[DB] SELECT

정의정·2023년 8월 16일
0

DB

목록 보기
8/9
post-thumbnail

💡 SELECT 쿼리

SELECT 쿼리는 테이블에서 원하는 데이터를 검색하는 SQL이다.

⭐ SELECT

테이블에서 원하는 데이터를 검색한다.

1. 기본 사용법

Systax✔️

SELECT [ DISTINCT ] { * | < column_name >, ... } FROM < table_list >;


DISTINCT

👉🏻 결과 테이블에서 중복된 레코드를 제거하는 키워드이다.

산술식(Arithmetic expression) 포함 가능

SELECT id, name, salary/12 FROM employee;

👉🏻 위처럼 산술식을 포함할 수 있다.

Example✔️

SELECT DISTINCT dept_name FROM instructor;

2. with WHERE

테이블에서 조건에 맞는 데이터만 검색한다.

Syntax✔️

SELECT [ DISTINCT ] { * | < column_name >, ... } FROM < table_list > [ WHERE condition ];

< LIKE > keyword

👉🏻 문자열 컬럼인 경우 부분적인 매칭으로 조건 검색이 가능하다
👉🏻 % : 0개 이상의 문자
👉🏻 _ : 1개의 문자

Example✔️

SELECT * FROM employee WHERE name LIKE '이%';

3. NULL

Null은 empty가 아니라 unknown이다. Null값이 있는 경우 연산이 어떻게 되는지 알아보자.

NULL과 논리 연산✔️

👉🏻 OR: (null | true) = true, (null | false) = null, (null | null) = null

👉🏻 AND: (true & null) = null, (false & null) = false, (null & null) = null

👉🏻 NOT: (!null) = null

IS NOTNULL 과 IS NUL✔️

SELECT id, name FROM customer WHERE age IS NOTNULL;

👉🏻 IS NOTNULL: NULL 값을 가진 row를 찾기 위한 조건식이다.
👉🏻 IS NULL: NULL 값을 가지지 않는 row를 찾기 위한 조건식이다.

4. ORDER BY

테이블을 정렬한다.

Syntax✔️

SELECT [ DISTINCT ] { * | < column_name >, ... } FROM < table_list > [ WHERE condition ] [ORDER BY < column_name >, ... [ ASC | DESC ] ];
👉🏻 ASC : 오름차순 정렬 (default)
👉🏻 DESC : 내림차순 정렬

Example✔️

SELECT id, product, quantity, order_date FROM sales_orders ORDER BY order_date ASC, quantity DESC;

5. Aggregation Function

특정 컬럼의 값을 통계적으로 계산한 결과를 보여주는 SQL 함수이다.

Function설명
COUNT컬럼 값의 개수
MAX컬럼 값의 최대값
MIN컬럼 값의 최소값
SUM컬럼 값의 합계
AVG컬럼 값의 평균

👉🏻 COUNT, MAX, MIN 은 LOB 타입을 제외한 모든 타입에서 사용이 가능하다.

👉🏻 SUM, AVG 는 숫자 데이터만 사용 가능하다.

Example✔️

SELECT COUNT (DISTINCT id) FROM sales_orders WHERE product='computer';

with NULL✔️

👉🏻 MAX, MIN, SUM, AVG의 경우 NULL이 아닌 값으로만 계산한다. 단, 모든 컬럼 값이 NULL일 경우엔 NULL을 반환한다.

👉🏻 COUNT는 NULL이 아닌 값의 개수를 출력한다. 모든 컬럼 값이 NULL일 경우 0을 반환한다.

테이블에 레코드가 없는 경우✔️

👉🏻 MAX, MIN, SUM, AVG의 경우 NULL을 반환한다.

👉🏻 COUNT0을 반환한다.

6. GROUP BY

테이블에서 특정 컬럼의 값이 같은 row들을 모아 그룹을 만들고, 그룹별로 검색하기 위해 사용되는 키워드이다.

그룹에 대한 조건을 추가하려면 HAVING 키워드를 이용한다.

WHERE VS HAVING✔️

👉🏻 WHERE 조건: 레코드를 grouping 하기 전에 조건을 검색한다.

👉🏻 HAVING 조건: 레코드를 grouping 한 후 그룹에 대한 조건을 검색한다.

Syntax✔️

SELECT [ DISTINCT ] { * | < column_name >, ... } FROM < table_list > [ WHERE condition ] [ GROUP BY < column_name_list > [ HAVING condition ] ] [ORDER BY < column_name >, ... [ ASC | DESC ] ];

Example✔️

SELECT company_name, count(product_name) as number_of_product, max(price) as highest_price FROM product GROUP BY company_name HAVING COUNT(product_name)>=3;

⭐ SET

1. UNION

rsr\cup s

Syntax✔️

SELECT a, b FROM r UNION SELECT a, b FROM s;

2. Difference(exception)

rsr - s

Syntax✔️

SELECT a, b FROM r EXCEPT SELECT a, b FROM s;

3. Intersection

rsr\cap s

Syntax✔️

SELECT a, b FROM r UNION INTERSECT a, b FROM s;


⭐ JOIN

1. Cartesian Product

r×sr\times s

Syntax✔️

SELECT * FROM r, s;

2. Natural join

많은 DBMS가 지원하지 않고 있다.

Syntax✔️

SELECT * FROM r NATURAL JOIN s;

3. Theta join

많은 DBMS에서 사용되는 inner join 실행문이다.

Syntax✔️

SELECT r JOIN s ON r.b=s.b AND r.d=s.d;

4. Outer join

Left outer join example✔️

SELECT customer.id, customer.name, customer.age, order."OrderNum", order.product from customer LEFT OUTER JOIN order ON customer."id"=order."id";

Right outer join example✔️

SELECT customer.id, customer.name, customer.age, order."OrderNum", order.product from customer Right OUTER JOIN order ON customer."id"=order."id";

Full outer join example✔️

지원하지 않는 경우가 있어 UNION을 사용했다.

SELECT customer.id, customer.name, customer.age, order."OrderNum", order.product from customer LEFT OUTER JOIN order ON customer."id"=order."id” UNION SELECT customer.id, customer.name, customer.age, order."OrderNum", order.product from customer Right OUTER JOIN order ON customer."id"=order."id";
profile
배움 기록

0개의 댓글