USE database_name;
SELECT 컬럼명 FROM 테이블명 WHERE 조건문 GROUP BY 기준컬럼 HAVING 조건문 ORDER BY 기준컬럼
➀ FROM 발췌 대상 테이블을 참조 ➁ WHERE 대상 데이터 아닌 것 제거 ➂ GROUP BY 행들을 소그룹화 ➃ HAVING 조건에 맞는 것만 출력 ➄ SELECT 데이터 값 출력/계산 ➅ ORDER BY 데이터 정렬
SELECT * FROM 테이블;
SELECT 컬럼1, .. FROM 테이블;
SELECT DISTINCT 컬럼1, .. FROM 테이블;
별도의 WHERE절이 없으면 테이블 전체 Row가 조회된다.
SELECT 컬럼1, .. FROM 테이블 WHERE 컬럼1 = Value;
SELECT 컬럼명 AS 별명 FROM 테이블;
SELECT 별명.컬럼 FROM 테이블 별명 WHERE 별명.row = Value;
# 별명은 호출 시 사용되거나, 결과값 컬럼명으로 지정된다.
INSERT를 제외한 DML문인 SELECT, UPDATE, DELETE를 수행할 때 원하는 데이터만 골라 수행할 수 있도록 해주는 구문이다.
SELECT 컬럼 FROM 테이블 WHERE 조건절;
UPDATE 테이블 SET 컬럼 = 새로운_데이터 WHERE 조건절;
DELETE FROM 테이블 WHERE 조건절;
연산자
- 산술, 합성 연산자는
SELECT문에서 사용한다.- 비교, SQL, 논리 연산자는
WHERE 조건절에서 사용한다. 해당하는 행을 출력한다.
산술 연산자 - 숫자형을 계산함 (), *, /, +, -
합성 연산자 - 문자를 연결함 ||, CONCAT()
비교연산자 - =, >, >=, <, <=
부정비교연산자
!=, ^=, <>,NOT 칼럼명 =NOT 칼럼명 >SQL연산자
BETWEEN a AND b : A와 B의 사이 (A, B 포함) IN (list) : list 중 하나와 일치LIKE ‘비교문자열’ : 비교 문자열을 포함%어떤 문자% : LIKE 조건에 앞뒤로 %가 붙으면 그 문자가 포함된 컬럼을 가진 행을 출력_ or %가 포함된 문자 검색하고자 할 때 ESCAPE '#' 지정IS NULL : NULL 값부정SQL연산자 - NOT BETWEEN a AND b, NOT IN (list), IS NOT NULL
논리연산자 - AND, OR, NOT
✔️ 와일드 카드 : % (0개 이상의 어떤 문자), _ (1개인 단일 문자)
✔️ 우선순위 : (괄호) ⏵ NOT 연산자 ⏵ 비교연산자, SQL 연산자 ⏵ AND ⏵ OR
TOP-N 쿼리
행의 갯수를 제한할 수도 있다.
단, 순서 상 ORDER BY 절 바깥에서 정의되어야 한다.
- ROWNUM (Oracle) :
<or<=조건으로 사용- TOP (SQL Server)
- LIMIT
SELECT * FROM table_name WHERE ROWNUM <= 5;
TOP SELECT TOP(반환할 행의 수)[PERCENT][WITH TIES]
윈도우 함수의 순위 함수를 이용하여 작성할 수도 있다.
SELECT * FROM (
SELECT RANK() OVER(__) AS RANK,
column1
FROM table_name)
WHERE RANK <= 5
SELECT 컬럼1, 컬럼2, .. FROM 테이블 ORDER BY 기준_컬럼1 [기준], 기준_컬럼2 [기준];
ASC - Ascending : 오름차순 (기본값) & DESC - Descending : 내림차순Oravcel에서의 NULL값 : 가장 큰 값 (오름차순의 가장 마지막)
SQL Server에서의 NULL값 : 가장 작은 값 (오름차순의 가장 처음)
순서를 바꾸고 싶다면 NULLS FIRST, NULLS LAST 옵션 사용
각기 다른 테이블을 한 번에 보여줄 때 쓰는 쿼리
두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것
테이블 간에 PK, FK의 연관 관계가 없어도 JOIN 가능
WHERE절, EQUI JOIN, Non EQUI JOINFROM절, INNER JOIN, NATURAL JOIN, USING 조건절, ON 조건절, CROSS JOIN, OUTER JOINWHERE절에 사용한다.
Equal = 을 조건으로 JOIN 하는 것으로, 가장 흔히 볼 수 있는 JOIN 방식이다. 두 개의 테이블 간에 컬럼 값들이 서로 정확하게 일치하는 경우에 사용한다.
WHERE 테이블1.컬럼x = 테이블2.컬럼y SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2, B.컬럼3
FROM 테이블1 A, 테이블2 B
WHERE A.컬럼1 = B.컬럼1;
1) 교집합 : INNER JOIN, LEFT JOIN, RIGHT JOIN, OUTER JOIN
2) 합집합 : UNION
3) 차집합 : Oracle MINUS = SQL Server EXCEPT
Equal 조건이 아닌 다른 조건 BETWEEN, >, >=, <, <= 으로 JOIN하는 방식이다. 두 개의 테이블 간에 컬럼 값들이 서로 정확하게 일치하지 않는 경우에 사용한다.
WHERE 테이블1.컬럼x = BETWEEN 테이블2.컬럼y AND 테이블2.컬럼z SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2, B.컬럼3
FROM 테이블1 A, 테이블2 B
WHERE A.컬럼1 BETWEEN B.컬럼1 AND B.컬럼2;
EQUI JOIN과 Non EQUI JOIN을 하나의 쿼리에서 같이 사용할 수 있다.
FROM절에 사용한다.
INNER JOIN(내부 조인)은 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.OUTER JOIN(외부 조인)은 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나온다.CROSS JOIN(상호 조인)은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능이다.SELF JOIN(자체 조인)은 자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용한다.JOIN 조건에 충족하는 데이터만 출력되는 방식 (교집합)
두 테이블에 모두 있는 내용만 출력
USING or ON 필수
SELECT 컬럼 FROM 테이블 A INNER JOIN 테이블 B ON 조인될 조건 [WHERE 검색 조건]
같은 이름을 가진 컬럼들 중에서 원하는 컬럼에 대해서만 선택적으로 EQUI JOIN (SQL Server 미지원)
SELECT * FROM Table JOIN Dept_Temp USING (DEPTNO)
JOIN에서 USING절을 사용할 경우, SELECT 절에서 USING 절로 정의된 컬럼 앞에는 별도의 별명이나 테이블명을 표기할 수 없다.
# Oracle에서 USING 이용하여 NATURAL JOIN 처럼 쓰기
SELECT 컬럼1, 컬럼2, .. FROM 테이블 A JOIN 테이블 B USING (컬럼1, 컬럼2)
두 테이블 간 특정 컬럼으로 EQUI JOIN 수행. 컬럼명 다르더라도 JOIN 사용 가능
JOIN 조건에 만족하지 않는 행들도 출력되는 형태
LEFT OUTER JOIN : 왼쪽 테이블의 모든 값이 출력되는 조인RIGHT OUTER JOIN : 오른쪽 테이블의 모든 값이 출력되는 조인FULL OUTER JOIN : 왼쪽, 오른쪽 테이블의 모든 값이 출력되는 조인 = 합집합 (단, 중복값은 제거)SELECT *
FROM 테이블 A (LEFT/RIGHT/FULL) OUTER JOIN 테이블 B #➀
ON 조건절 #➁
WHERE 조건절 #➂
➀ 기준이 되는 테이블은 항상 모두 출력
➁ 이후 ON 절에 정의된 조건에 따라 JOIN 여부 판단
➂ 최종적으로 WHERE 조건에 의해 필터링
Oracle의 경우, 기준이 되는 테이블 반대편 좌변/우변 하나에만 (+) 기호를 표시한다.
SELECT * FROM 테이블 A, 테이블 B WHERE A.컬럼(+) = B.컬럼;
테이블 간 JOIN 조건이 없는 경우, 생길 수 있는 모든 데이터의 조합
ON 사용 불가능M * N 건의 데이터 조합 발생SELECT * FROM 테이블 A CROSS JOIN 테이블 B
SELECT * FROM 테이블, 테이블 B.
# 별도의 JOIN 선언이 없다면, 두 테이블의 CROSS JOIN 발생
두 테이블 간의 동일한 이름을 갖는 모든 칼럼들이 모두 동일한 데이터를 가지고 있을 경우 EQUI JOIN 수행 (SQL Server 미지원)
ON 사용 불가능, WHERE 에서의 JOIN 정의 불가능SELECT * FROM 테이블 A NATURAL JOIN 테이블 B
Oracle의 경우, USING 조건절을 이용하여 같은 이름을 가진 컬럼 중 원하는 컬럼만 JOIN에 이용할 수 있다. (단, SELECT 절에서 USING 절로 정의된 컬럼 앞에는 별도의 별명이나 테이블명 붙이지 않아야 한다.)
# Oracle에서 USING 이용하여 NATURAL JOIN 처럼 쓰기
SELECT 컬럼1, 컬럼2, .. FROM 테이블 A JOIN 테이블 B USING (컬럼1, 컬럼2)
동일 테이블 사이의 조인
반드시 테이블 별칭 사용 : FROM 절에 같은 테이블이 두 번 이상 등장하기 때문에 혼란 방지를 위해
SELECT 컬럼들 FROM 테이블 별칭A INNER JOIN 테이블 별칭B ON 조인될 조건 [WHERE 검색 조건]