수달이네 기술 블로그

1. SQL 문 (오라클) 본문

RDBMS

1. SQL 문 (오라클)

슬픈 수달이 2025. 10. 23. 23:51

오라클문법

디비버 스크립트 파일: 명령어를 작성할 수 있는 파일

쿼리문 작성법: 여러줄에 걸쳐 작성 가능, 대소문자 구분 X, 들여쓰기 활용, 세미콜론으로 마무리.

주석가능: 한줄 --, 범위 /* ~ */

자료형

문자형

  • VARCHAR2(용량)
  • CHAR(용량)
  • COLB

숫자형

  • NUMBER(p, s) : s부분에 실수부분

날짜형

  • DATE
  • TIMESTAMP

논리형

  • 오라클엔 존재하지 않는다

연산자

산술 연산자

  • 숫자타입끼리 연산 가능(+,-,*,/)
  • 날짜타입끼리 연산 가능(-) : 날짜끼리의 차이
  • 날짜타입, 숫자타입끼리 연산 가능(+,-): 몇일 후인지, 전인지
  • NULL + 숫자 : NULL

관계연산자

  • =.<>,!=, >,<,>=,<=등등
  • null 값은 확인불가

논리연산자

  • AND, OR, NOT 등등

SQL연산자

  • IS NULL, IS NOT NULL, IN(값1, 값2….), BETWEEN A AND B(A이상B이하)
  • LIKE: 문자 패턴 확인 %(앞 뒤에 어떤 문자열이 오는지 확인), _(문자열 개수에 따라 정해짐)

연결 연산자

  • ||

SELECT문

SELECT [DISTINCT(중복 제거)] COLUMN [AS “별칭]….

FROM 테이블명

WHERE 조건식

ORDER BY 정렬기준 컬럼 ASC(오름차), DESC(내림차);

실행순서: FROM>WHERE> SELECT>ORDERBY

작성순서

  1. SELECT → 가져올 컬럼 선택
  2. FROM→ 어떤 테이블에서 가져올지 선택
  3. WHERE→ 조건 걸기
  4. ORDER BY→ 정렬 방식 지정

기본 출력

 EMPLOYEES 테이블 : 107명의 직원 정보가 담겨있는 테이블
 EMPLOYEE_ID : 직원 번호(사번) PK
 FIRST_NAME / LAST_NAME : 이름 / 성
 EMAIL : 이메일 주소
 PHONE_NUMBER : 핸드폰 번호
 HIRE_DATE : 입사일
 JOB_ID : 직책(직무)
 SALARY : 급여
 COMMISSION_PCT : 급여에 따른 보너스
 MANAGER_ID : 상사 번호
 DEPARTMENT_ID : 부서번호
SELECT * FROM employees;

as(alias 별명)

SELECT first_name AS 이름, last_name AS 성, SALARY AS 급여
FROM employees;

한글로 이름을 설정 가능하다

  • 큰따옴표로 모아주어도 되며,
  • as를 쓰지 않아도 가능하다.

연결 연산자

SELECT first_name || ' ' || last_name 풀네임, salary 급여
FROM employees;

 

  • || 로 연결 가능하다.

중복 제거

SELECT JOB_ID 
FROM employees;

SELECT DISTINCT JOB_ID 
FROM employees;

위처럼 해당 DISTINCT뒤의 컬럼에 중복되는 내용은 제거한 후 출력된다.

SELECT DISTINCT FIRST_NAME, JOB_ID
FROM EMPLOYEES;

위처럼 컬럼 두개일 경우 두개 모두 같을 경우에만 중복이 제거된다.

ORDER BY 절

SELECT first_name, salary
FROM employees
ORDER BY salary ASC;

ORDER BY 컬럼명을 이용하여 오름차순 정렬이 가능하다

  • 참고로 ASC는 기본값이므로 없어도 됨.
SELECT first_name, salary
FROM employees
ORDER BY salary DESC;

DESC는 위처럼 내림차순으로 정렬된다.

SELECT first_name, salary
FROM employees
ORDER BY employee_id;

order by 의 경우 select에 없더라도 정렬 가능하다. from 절에 포함된 attribute라면

WHERE절

SELECT first_name, salary
FROM employees
WHERE salary > 10000;

위처럼 일부 필터링 가능하다

위에선 salary가 10000보다 큰 값만 출력했다.

여기서 중요한것! where절이 먼저 실행되므로select에서 설정한 alias를 사용할 수 없음!

SELECT first_name, salary 급여
FROM employees
WHERE salary > 10000
ORDER BY 급여 asc;

반대로 order by절은 select절보다 늦게 실행되므로 사용 가능하다.

여러조건 적용

SELECT first_name 이름, department_id 부서번호, salary 급여
FROM EMPLOYEES
WHERE department_id = 90 OR salary > 3000;

위처럼 where 절에 or문을 사용하면 조건1 이거나 조건 2인 경우의 값을 모두 출력한다.

SELECT first_name 이름, department_id 부서번호, salary 급여
FROM EMPLOYEES
WHERE department_id = 90 AND salary > 3000;

반대로 위와 같이 and문을 사용하면 조건1 이면서 조건 2인 경우의 값을 출력한다(두가지 모두 적용되어야함.)

계정 만들기(DB 사용자 생성)

  1. dba관리자 계정에서 실행(cmd)
Microsoft Windows [Version 10.0.22631.6060]
(c) Microsoft Corporation. All rights reserved.

C:\\Users\\....>sqlplus

SQL*Plus: Release 11.2.0.2.0 Production on 목 10월 23 20:20:34 2025

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Enter user-name: sys as sysdba
Enter password:

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

  1. create user 유저명 identified by 비밀번호;
SQL> CREATE USER web2 identified by 1234;

User created.

위처럼 생성할 수 있다. 그러나

SQL> conn web2/1234
ERROR:
ORA-01045: user WEB2 lacks CREATE SESSION privilege; logon denied

그냥 로그인 하면 권한이 없기에 실행할 수 없다.

  • 로그인 실패시 다시 sys as sysdba 로 로그인해주어야함
  1. 권한 부여(grant문)

grant create session to 권한을 줄 유저명;

  • create session: 접속 권한
SQL> grant create session to web2;

Grant succeeded.

SQL> conn web2/1234;
Connected.

테이블 생성(create문)

SQL> create table test1 (
  2  test1_id number,
  3  test1_name varchar2(10)
  4  );
create table test1 (
*
ERROR at line 1:
ORA-01031: insufficient privileges

위처럼 테이블을 생성할 수 있지만, 왜인지 sql문이 실행되지 않았다.

그 이유는 테이블 생성 권한이 없기 때문

테이블 생성 권한

SQL> grant create table, create view, resource to web2;

Grant succeeded.
SQL> conn web2 /1234;
Connected.
SQL> show user;
USER is "WEB2"
SQL> CREATE TABLE test1(
  2     test1_id number,
  3     test1_name varchar2(10)
  4  );

Table created.

sysdba권한으로 들어가서 grant 권한명 to 유저명; 을 이용하여 권한을 준다.

권한명 리스트

  • create table: 테이블 생성 권한
  • create view: 뷰 생성 권한
  • resource
    • 한번에 권한을 부여하는 것.(create table, create sequence, create trigger, create type, create indextype,…)
    • 그러나 필요없는 권한까지 과도하게 부여될 수 있다.
    • 따라서 필요한 권한만 적절히 부여하는 것을 추천
  • create session: 접속 권한
  • create sequence:

이후 다시 만든 유저명으로 로그인 후 테이블을 생성해보면 잘 생성됨을 알 수 있다.

권한 제거

grant가 아닌 revoke를 이용하여 권한을 빼앗아 올 수 있다.

revoke 권한명 from 사용자명

테이블 삭제

DROP TABLE test1;

테이블을 삭제할 수 있다.

INSERT문

INSERT INTO TBL_USER1(user1_id, user1_pw, user1_name)
values('aaa', '1234', '홍길동');
INSERT INTO TBL_USER1 (user1_id, user1_name, user1_joindate)
values('bbb', '이순신', sysdate);

SELECT * FROM TBL_USER1;

insert into 테이블명(넣을 컬럼) values(컬럼별 넣을 값);

만약 값을 넣지 않았을 경우 NULL으로 채워진다.

INSERT INTO TBL_USER1
values('gu', '1234', '짱구', '010-1234-5678', 'M', sysdate);

SELECT * FROM TBL_USER1;

만약 위처럼 (컬럼명을 쓰지 않을경우 전체 컬럼의 개수에 따라 알아서 모두 넣어주어야한다.

date

sysdate: 위에서 처럼 현재 날짜 시간을 입력시켜준다.

to_date(문자열, 포맷): 문자열을 날짜 포맷으로 변경해준다.

INSERT INTO tbl_user1
values('back', 'korea', '유리', '010-1111-1111', 'W', TO_DATE('2025-10-24','YYYY-MM-DD'));

select * from tbl_user1;

'RDBMS' 카테고리의 다른 글

MySQL 설치 및 기본 문법 등  (1) 2025.11.07
4. JDBC기능 구현 + SEQUENCE문  (0) 2025.10.30
3. DDL, DML, DCL, TCL  (0) 2025.10.28
2. 제약조건(오라클)  (0) 2025.10.25
0. RDBMS 배우기  (0) 2025.10.22