
SQL 구문은 그동안 접했던 다른 SQL 데이터베이스와 동일하다.
SELECT 문은 테이블에서 원하는 데이터를 조회할 때 사용된다.
SELECT 컬럼명 FROM 테이블명;
SELECT 컬럼명1, 컬럼명2, ... FROM 테이블명;
SELECT * FROM 테이블명;
컬럼명을 나열할 때는, 나열한 순서대로 출력된다.
이메일에 작성할 고객의 성과 이름, 이메일이 필요한 경우
SELECT first_name, last_name, email FROM customer;
테이블에에서 중복되지 않는 값만 조회하고 싶을 때 사용한다.
SELECT DISTINCT(컬럼명) FROM 테이블명;
SELECT DISTINCT 컬럼명 FROM 테이블명;
어떤 등급의 영화들을 가지고 있는지 조회할 경우
SELECT DISTINCT rating FROM film;
특정 쿼리 조건에 맞는 입력 행의 개수를 구하고 싶을 때 사용한다.
SELECT COUNT(쿼리명) FROM 테이블명;
SELECT COUNT(*) FROM 테이블명;
예를 들어,
SELECT COUNT (DISTINCT rating) FROM film;
WHERE 문은 열에 조건을 지정하여 그에 맞는 행이 반환되도록 한다.
SELECT 컬럼명1, 컬럼명2 FROM 테이블명
WHERE 조건
- 비교 연산자 : =, < , >, >=, <=, <> OR !=
- 논리 연산자 : AND, OR, NOT
예를 들어,
SELECT * FROM customer
WHERE first_name='Jared';
SELECT COUNT(*) FROM film
WHERE rental_rate > 4 AND replacement_cost >= 19.99
AND rating='R';
SELECT * FROM film
WHERE rating != 'R';
한 고객이 매장이 지갑을 두고 갔다.
'Nancy Thomas' 고객의 이메일 주소를 찾아서 이메일을 보내야한다.
그의 이메일 주소를 조회해보자.
SELECT email FROM customer
WHERE first_name = 'Nancy' AND last_name = 'Thomas';
한 고객이 영화 'Outlaw Hanky'의 내용(description)을 궁금해한다.
영화의 내용을 조회해보자.
SELECT description FROM film
WHERE title='Outlaw Hanky';
한 고객이 영화 반납을 연체했다.
고객의 '259 Ipoh Drive'주소로 우편을 보냈고, 전화로도 이 내용을 알려야 한다.
해당 주소에 살고있는 고객의 전화번호를 조회해보자.
SELECT phone FROM address
WHERE address = '259 Ipoh Drive' ;
열의 값에 따라 오름차순(ASC)/내림차순(DESC)으로 정렬한다.
SELECT * FROM customer
ORDER BY first_name ASC;
여러 칼럼에 각기 다른 정렬을 적용할 수도 있다.
SELECT store_id, first_name, last_name FROM customer
ORDER BY store_id DESC, first_name ASC;
👉 1. store_id를 기준으로 내림차순 정렬
2. first_name을 기준으로 오름차순 정렬 (A to Z)
쿼리에 대해 반환되는 행의 개수를 제한할 수 있다.
쿼리의 가장 마지막에 실행된다.
SELECT * FROM payment
WHERE amount != 0.00
ORDER BY payment_date DESC
LIMIT 5;
빠르게 테이블 구조만 확인하고 싶을 때, `
**SELECT * FROM table LIMIT 1`**을 쓰기도 한다.
처음으로 결제한 10명의 고객에게 리워드를 지급하고 싶다.
처음으로 결제를 생성한 고객 10명의 ID는?
SELECT customer_id FROM payment
ORDER BY payment_date ASC
LIMIT 10;
고객이 점심 시간에 볼 짧은 영화를 대여하고 싶어한다.
상영시간이 가장 짧은 영화 5편의 제목은?
SELECT title, length FROM film
ORDER BY length ASC
LIMIT 5;
🚨 상영 시간이 46분인 영화가 5개일 뿐이라는 보장은 없다.
6분짜리 영화가 6개 이상일수도 있다.
위의 고객이 50분 이하의 영화를 찾는다면, 제안할 수 있는 영화는 총 몇 편인가?
SELECT COUNT(*) FROM film
WHERE length <= 50;
값의 범위를 제어한다.
범위 안에 존재하는 값만 가져오는 게 아니라,
NOT BETWEEN 연산자로 범위 밖에 존재하는 값을 조회할 수도 있다.
SELECT * FROM payment
WHERE amount NOT BETWEEN 8 AND 9;
SELECT * FROM payment
WHERE payment_date BETWEEN '2007-02-01' AND '2007-02-15';
시간 범위를 지정할 땐, TIMESTAMP를 고려해야 한다.
BETWEEN '2007-02-01' AND '2007-02-14' 로 범위를 지정하면,
14일에 결제한 데이터는 출력되지 않는다.
SELECT color FROM table
WHERE color IN ('red','blue','green');
색상이 red OR blue OR green 인인 행을 조회한다.
NOT 연산자와 결합해서 사용할 수도 있다.
SELECT color FROM table
WHERE color NOT IN ('red','blue');
SELECT COUNT(*) FROM payment
WHERE amount IN (0.99,1.98,1.99);
SELECT COUNT(*) FROM payment
WHERE amount NOT IN (0.99,1.98,1.99);
SELECT * FROM customer
WHERE first_name IN ('John','Jake','Julie');
@gmail.com 으로 끝나는 이메일 주소를 찾는 경우처럼,
문자열 내의 일반 패턴에 매칭하고 싶을 때 사용한다.
WHERE name LIKE 'A%' : 대문자A로 시작하는 모든 문자열
WHERE name LIKE '%a' : 소문자a로 끝나는 모든 문자열
WHERE title LIKE 'Mission Impossible _'
: Missino Impossible 뒤에는 문자 하나만 올 수 있다. (1, 2, 3, 4, ...)
WHERE name LIKE '_her%' 의 경우
더 자세한 내용은 PostgreSQL 공식문서 참조.
SELECT * FROM customer
WHERE first_name LIKE 'J%' AND last_name LIKE 'S%';
성의 첫 글자가 대문자 J로 시작하고, 이름의 첫 글자가 대문자 S로 시작하는 고객을 조회한다.
👉 LIKE 연산자는 대소문자를 구분한다.
SELECT * FROM customer
WHERE first_name ILIKE 'j%' AND last_name ILIKE 's%';
성의 첫 글자가 J 혹은 j로 시작하고, 이름의 첫 글자가 S 혹은 s로 시작하는 고객을 조회한다.
👉 ILIKE 연산자는 대소문자를 구분하지 않는다.
SELECT * FROM customer
WHERE first_name LIKE '_her%
5달러보다 큰 금액을 결제한 거래는 몇 건입니까?
SELECT COUNT(*) FROM payment
WHERE amount > 5;
성이 P로 시작하는 배우는 몇 명입니까?
SELECT COUNT(*) FROM actor
WHERE first_name LIKE 'P%';
고객 주소에서 중복되지 않는 고유한 지역(district)은 몇 개입니까?
SELECT COUNT(DISTINCT(district)) FROM address;
위에서 조회한 중복되지 않는 지역의 목록을 조회하세요.
SELECT DISTINCT(district) FROM address;
R등급이고 교환 비용이 5달러에서 15달러 사이인 영화는 몇 개입니까?
SELECT COUNT(*) FROM film
WHERE rating = 'R'
AND replacement_cost BETWEEN 5 AND 15;
제목에 'Truman'이 포함되는 영화는 몇 편인가요?
SELECT COUNT(*) FROM film
WHERE title LIKE '%Truman%';
SQLD 공부할 때 같아서 재밌었다.
ILIKE는 처음 보는 연산자라서 배워가는 것도 있었다.
아님 내가 공부를 덜 했던 걸지도...😉