Contents
SQL Query
SELECT
1
2
3
4
5
SELECT 컬럼1, 컬럼2 FROM 테이블;
SELECT 컬럼1 (as) 별명1, 컬럼2 (as) 별명2 FROM 테이블;
SELECT * FROM 테이블;
DESC 테이블;
테이블로 부터 지정한 컬럼을 검색한다.
컬럼
컬럼은 ,를 사용해 연결할 수 있다.
‘*‘을 이용하여 테이블내의 모든 컬럼을 검색할 수 있다.
별명을 이용하여 데이터를 불러올 수 있다.(as는 생략가능)DESC
테이블의 구조(컬럼의 이름, 데이터 타입)를 확인할 수 있다.수식을 이용한 검색
1
SELECT sal as 월급, sal*12 as 연봉 FROM table;
- NULL 값 연산을 위한 NVL 함수 사용
NVL(컬럼, 치환 값)
을 이용해 NULL 값을 연산할 수 있다.
1
SELECT sal as 월급, comm as 보너스, sal*12 + NVL(com,0) as 연봉 FROM table;
- 연결 연산자
컬럼을 하나의 문자열로 검색
1
SELECT 컬럼1 || ' ' || 컬럼2 FROM 테이블;
- 중복 제거
1
SELECT [DISTINCT | ALL] 컬럼, 컬럼 FROM 테이블;
DISTINCT : 중복된 출력 값은 한번만 출력
ALL : 중복된 값을 모두 출력(default)
ORDER BY
1
2
SELECT * FROM table
ORDER BY 컬럼1 [ASC/DESC], 컬럼2 [ASC/DESC];
ORDER BY : 지정된 컬럼을 대상으로 정렬 수행
ASC: 오름차순(default)
DESC: 내림차순
WHERE
1
2
3
4
SELECT *
FROM table
WHERE 조건
ORDER BY 컬럼;
조건을 통해 컬럼 내의 데이터를 제한한다.
WHERE 절은 FROM 절 바로 뒤에 사용한다.
조건의 대상에는 컬럼명, 연산자, 수식 등이 가능하다.
조건에 이용되는 연산자: =, <, >, <=, >=, (<>, !=, ^=): 같지 않다
NULL 값은 비교 연산이 불가능하며, IS NULL
, IS NOT NULL
등을 사용
- 관계 연산자
여러개의 조건을 동시에 이용할 때 사용
AND, OR, NOT 등
WHERE 조건 '관계연산자' 조건
- LIKE 연산자
1
WHERE 컬럼 LIKE '비교문자열'
문자 전용 비교 연산자이다.
문자열의 일부만으로 검색하거나, 패턴을 찾아주는 연산자이다.
두 개의 와일드 문자를 이용할 수 있다.
‘-‘ : 한개의 문자를 대체
‘%’ : 문자열을 대체(문자가 없는 경우도 포함)
해당 와일드 문자를 일반 문자로 인식하고 싶은 경우 ‘#’을 앞에 붙인다.
ex) 이#%% : 이%로 시작하는 모든 문자열
- BETWEEN, AND
1
WHERE 컬럼 BETWEEN 값1 AND 값2
WHERE 컬럼 >= 값1 AND 컬럼 <= 값2
와 동일하다.
값1은 반드시 값2보다 작아야한다.
- IN
1
WHERE 컬럼 IN (값1, 값2, ...)
지정된 값 중 하나라도 일치하면 검색된다.
OR과 = 으로 교환 가능하다.
WHERE 컬럼 = 값1 OR 컬럼 = 값2
JOIN
- 등가조인, 비등가조인
등가조인 : 두 테이블간에 같은 값을 찾아서 조인(‘=’ 을 이용)
비등가조인 : 부등호를 통해 서로 다른 값을 조인
1
2
3
SELECT table1.c1, table1.c2, table2.c1, table2.c2
FROM table1, table2
WHERE table1.c2 = table2. c1;
- 자기 참조 조인(Self Join)
동일 테이블을 자기 참조에 의해 조인한다.
t1, t2는 동일 테이블에 대한 별명이지만, 각각 별도의 테이블처럼 사용한다.
별명을 다르게하여 마치 여러개의 테이블간 조인하는 것처럼 구현한다.
1
2
3
SELECT t1.name, t1.mgr, t2.name
FROM table t1, table t2
WHERE t1.mgr = t2.name;
- 외부 조인
조인 조건에 일치하지 않는 데이터도 출력해 준다.
조인 결과물을 해석할 때 오해를 방지하기 위한 방법이다.
‘+’ 기호는 데이터가 부족한 쪽에 기술한다.
1
2
3
SELECT t1.col, ... , t2.col, ...
FROM table1 t1, table2 t2
WHERE t1.col = t2.col(+);
- 자연 조인(Natural Join)
SELECT 문에 테이블 이름을 생략하고 컬럼명만 표기한다.
반드시 두 테이블간에 조인할 수 있는 동일한 이름, 타입을 가진 컬럼이 필요하다.
조인에 이용되는 컬럼은 별도로 명시하지 않아도 자동으로 조인에 이용된다.
조인 조건을 쓸 필요가 없다.
1
2
3
4
SELECT col1, col2, col3, col4
FROM table1
NATURAL JOIN table2
WHERE condition;
- USING 절을 이용한 조인
만약 동일한 이름, 타입을 가진 컬럼이 여러개일 경우 이를 모두 이용하므로, 문제가 될 수 있다.
이를 방지하기 위해 USING
구문을 사용할 수 있다.
USING
절은 조인에 사용될 컬럼을 명시적으로 지정한다.
1
2
3
4
SELECT col1, col2, col3, col4
FROM table1
JOIN table2 USING (조인 컬럼)
WHERE condition;
- ON 절을 이용한 조인
비등가 조인과 같은 다양한 조인에 사용할 수 있다.
1
2
3
4
SELECT table1.col1, table1.col2, table2.col3, table2.col4
FROM table1
JOIN table2 ON join_condition
WHERE condition;
- 좌우 외부 조인
이전에 ‘+’를 이용한 외부 조인의 새로운 표현법
양쪽 모두에 ‘+’를 추가한 것과 동일한 표현도 가능하다.
LEFT: table1을 왼쪽 테이블이라 하고, 왼쪽 테이블에 조인 조건과 일치하지 않은 행도 검색에 포함
RIGHT: table2을 오른쪽 테이블이라 하고, 오른쪽 테이블에 조인 조건과 일치하지 않은 행도 검색에 포함
FULL: 양쪽 테이블 모두에서 조인조건과 일치하지 않은 행을 검색에 포함
조인 조건은 ON절, USING절을 모두 이용가능, 자연 조인과 혼용해서 사용은 불가
1
2
3
4
SELECT table1.col1, table1.col2, table2.col3, table2.col4
FROM table1
[LEFT | RIGHT | FULL] JOIN table2 [ON join_condition | USING (조인 컬럼)]
WHERE condition;
Having
HAVING : 조건 중에 그룹 함수를 포함하는 조건을 기술한다.
HAVING절은 GROUP BY절 뒤에 기술한다.
1
2
3
4
5
SELECT col
FROM table
GROUP BY group
HAVING <그룹함수 포함 조건>
ORDER BY 정렬대상;
서브 쿼리
- 단일행 서브쿼리