* 1-1강은 OT내용이라 스킵
[강의명]
패스트캠퍼스 SQL 100제 + 자격증 완성 온라인 완주반
[수강목록]
05. 데이터 조회와 필터링 - 01. SELECT 문
06. 데이터 조회와 필터링 - 02. ORDER BY 문
07. 데이터 조회와 필터링 - 03. SELECT DISTINCT 문
08. 데이터 조회와 필터링 - 04. WHERE 절
[강의내용]
05. 데이터 조회와 필터링 - 01. SELECT 문
SELECT : 일반적으로 테이블에 저장된 데이터를 가져오는데 쓰인다. SQL에서 가장 많이 쓰이는 문장이다.
실습
1. 전체 컬럼을 조회
SELECT *
FROM CUSTOMER;
* 쿼리 블럭지정 >> 컨트롤 쉬프트 e >> 실행계획 등장
SELECT * 를 했으므로 전체 데이터를 스캔한 것인데 Seq Scan이 전체 데이터를 스캔했다는 뜻이라고 한다.
2. 지정한 컬럼을 조회
SELECT first_name, last_name, email
FROM customer;
* 처리 순서 : FROM >> 커스토머 컬럼 >> SELECT >> 컬럼들
* 쿼리의 가독성과 SQL 성능을 높이기 위해 앨리어스(ALIAS)를 사용한다.
* DBMS에는 옵티마이저가 있음(최적화기능) >> 저비용 고효율의 쿼리 실행
e.g.
SELECT A.FIRST_NAME, A.LAST_NAME, A.EMAIL
FROM CUSTOMER A
06. 데이터 조회와 필터링 - 02. ORDER BY 문
ORDER BY : SELECT문에서 가져온 데이터를 정렬하는데 사용한다. 업무 처리상 매우 중요한 기능이다.
문법
SELECT 컬럼1, 컬럼2
FROM 테이블1
ORDER BY 컬럼1 ASC(오름차순), 컬럼2 DESC(내림차순) (디폴트 ASC)
실습
1. ASC 정렬 (오름차순)
SELECT first_name, last_name
FROM customer
ORDER BY first_name ASC;
2. DESC 정렬 (내림차순)
SELECT first_name, last_name
FROM customer
ORDER BY first_name DESC;
3. ASC+DESC 정렬
SELECT first_name, last_name
FROM customer
ORDER BY first_name ASC, last_name DESC;
* 컬럼명을 정수로 표현도 가능
SELECT first_name, last_name
FROM customer
ORDER BY 1 ASC, 2 DESC;
순서 잘 맞춰서 쓰면 이렇게도 가능함. 하지만 인덱싱 해석의 번거로움이 있음.
07. 데이터 조회와 필터링 - 03. SELECT DISTINCT 문
SELECT시 DISTINCT를 사용하면 중복값을 제외한 결과값이 출력된다.
문법
SELECT DISTINCT COLUMN_1
FROM TABLE_NAME;
실습
1. 먼저 중복데이터가 있는 실습용 테이블을 만든다
CREATE TABLE T1 ( ID SERIAL NOT NULL PRIMARY KEY, BCOLOR VARCHAR, FCOLOR VARCHAR);
INSERT INTO T1 (BCOLOR, FCOLOR)
VALUES ('red', 'red'),
('red', 'red'),
('red', NULL),
(NULL, 'red'),
('red', 'green'),
('red', 'blue'),
('green', 'red'),
('green', 'blue'),
('green', 'green'),
('blue', 'red'),
('blue', 'blue'),
('blue', 'green');
COMMIT;
* DDL(CREATE)은 COMMIT 불필요
* INSERT는 COMMIT 필요
2. BCOLOR 컬럼 중복제거
SELECT DISTINCT BCOLOR
FROM T1
ORDER BY BCOLOR;
3. DISTINCT 2개 컬럼에 사용
SELECT DISTINCT BCOLOR, FCOLOR
FROM T1
ORDER BY BCOLOR, FCOLOR;
(red, red) 가 2개의 로우가 있었지만 중복로우가 없어진 것을 볼 수 있다.
4. DISTINCT ON 사용
SELECT DISTINCT ON (BCOLOR) BCOLOR, FCOLOR
FROM T1
ORDER BY BCOLOR, FCOLOR;
SELECT DISTINCT ON (BCOLOR) BCOLOR, FCOLOR
FROM T1
ORDER BY BCOLOR, FCOLOR;
BCOLOR 컬럼에 중복값 제거가 적용되었고 FCOLOR 컬럼은 BCOLOR 컬럼에 대응해 1개의 값만 내보내게 되는데 ORDER BY에 걸려서 알파벳이 빠른 blue가 출력된 것을 알 수 있다.
5. 4번 + FCOLOR 컬럼만 DESC 정렬
SELECT DISTINCT ON (BCOLOR) BCOLOR, FCOLOR
FROM T1
ORDER BY BCOLOR, FCOLOR DESC;
red보다 null이 큰(마지막) 값이라 red, null에서는 FCOLOR 컬럼에 null이 등장함.
* 현업에선 DISTINCT만 많이 쓰고 DISTINCT ON 기능은 잘 쓰이지 않음
08. 데이터 조회와 필터링 - 04. WHERE 절
WHERE절은 집합을 가져올 때 어떤 집합을 가져올 것인지에 대한 조건을 설정하는 절이다.
문법
SELECT COLUMN_1, COLUMN_2, ...
FROM TABLE_NAME
WHERE <조건>
실습
1. 조건 1개
SELECT last_name, first_name
FROM customer
WHERE first_name = 'Jamie';
2. 조건 2개 (1)
SELECT last_name, first_name
FROM customer
WHERE first_name = 'Jamie'
AND last_name = 'Rice';
3. 조건 2개 (2)
amount가 1이하 이거나 8이상인 조건을 부여
SELECT customer_id, amount, payment_date
FROM payment
WHERE amount <= 1
OR amount >= 8;