[SQL] 4장. 데이터 필터링

김상현·2022년 9월 20일
0

SQL

목록 보기
4/22
post-thumbnail

[손에 잡히는 10분 SQL - 벤 포터 지음, 박남혜 옮김] 책의 학습 후 정리자료입니다.


📍 WHERE 절 사용하기

  • 데이터베이스 테이블에서 모든 행을 다 가져오는 일은 매우 드물고, 테이블에 있는 데이터 일부분만을 가져오는 경우가 대부분이다.
  • 원하는 데이터를 가져오려면 검색(필터) 조건을 지정하면 된다.
  • SELECT 문에서 WHERE 절로 검색 조건을 지정하여 데이터를 필터링할 수 있다.
  • WHERE 절은 테이블 이름(FROM 절) 바로 뒤에 적는다.

📒 필터링(Filtering)

  • 데이터베이스 질의를 통해 필요한 데이터만을 걸래내는 작업
SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49;

  • prod_price 의 값이 3.49 와 같은 레코드의 prod_nameprod_price 의 값을 출력한 결과이다.

❓ SQL 필터링 vs 클라이언트 프로그램 필터링

  • 데이터는 DBMS가 아니라 클라이언트 프로그램에서도 필터링할 수 있다.
  • 하지만 그렇게 하면 SELECT 문은 실제 클라이언트에서 필요한 것보다 더 많은 데이터를 검색해야 한다.
  • 그리고 클라이언트 코드는 필요한 행을 찾기 위해 반환된 데이터를 한 행씩 모두 살펴야 한다.
  • 클라이언트 프로그램이 데이터베이스가 수행해야 할 일을 하게 되면 클라이언트 프로그램의 성능에 영향을 준다.
  • 네트워크를 통해 서버는 계속 필요하지 않은 데이터를 보내야 하므로 네트워크 대역폭 역시 낭비된다.
  • 따라서 클라이언트 프로그램 필터링 사용은 지양하고 SQL 필터링 사용을 지향해야 한다.

❗️ WHERE 절의 위치

  • ORDER BY와 WHERE 절을 같이 사용할 대는 ORDER BY 절이 WHERE 절 뒤에 와야 한다.
  • ORDER BY 절은 항상 SELECT 문의 맨 뒤에 작성해야 한다.

📍 WHERE 절 사용하기

  • WHERE 절에서 사용되는 연산자
연산자설명
=같다.
<>같지 않다.
!=같지 않다.
<~보다 작다.
<=~보다 작거나 같다.
!<~보다 작지 않다.
>~보다 크다
>=~보다 크거나 같다.
!>~보다 크지 않다.
BETWEEN두 개 사이의 특정한 값 사이
IS NULL값이 NULL 이다.

📌 하나의 값으로 확인하기

SELECT prod_name, prod_price
FROM Products
WHERE prod_price < 9.49;

  • prod_price 의 값이 9.49 보다 작은 레코드의 prod_nameprod_price 의 값을 출력한 결과이다.
SELECT prod_name, prod_price
FROM Products
WHERE prod_price <= 9.49;

  • prod_price 의 값이 9.49 보다 작거나 같은 레코드의 prod_nameprod_price 의 값을 출력한 결과이다.
  • 위의 결과와는 다르게 prod_price 의 값이 9.49 인 레코드가 추가되었다.

📌 일치하지 않는 값 확인하기

SELECT vend_id, prod_price
FROM Products
WHERE vend_id != 'DLL01';

  • vend_id 의 값이 DLL01 이 아닌 모든 레코드를 호출하여 출력하였다.

💡 작은따옴표의 사용

  • 비교하는 열의 속성이 문자열 데이터라면 작은따옴표로 묶어야 하고, 수치형이면 작은따옴표를 사용할 필요가 없다.

📌 특정 범위의 값 확인하기

  • 특정 범위에 있는 데이터를 가져오기 위해 BETWEEN 연산자를 사용할 수 있다.
  • BETWEEN 연산자는 시작하는 값과 끝나는 값 2개의 값이 필수적으로 필요하다.
SELECT vend_id, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;

  • Products 테이블의 레코드 중 prod_price 의 값이 5 와 10 사이에 있는 레코드의 prod_nameprod_price 값을 출력한 결과이다.

📌 값이 없는 데이터 확인하기

  • 테이블을 생성할 때 테이블 설계자는 각 열에 초깃값이 없도록 설정할 수 있다.
  • 열이 아무런 값도 가지고 있지 않을 때, 열이 NULL 값을 가지고 있다고 한다.
  • 값이 NULL 인지 확인할 때 열 이름 = NULL 이라는 구문은 사용할 수 없다.

📒 NULL

  • 값이 들어 있지 않은 상태. 0, 빈 문자열, 단순 공백과는 다른 값이다.
SELECT cust_name
FROM Customers
WHERE cust_email IS NULL;

  • Customers 테이블에서 cust_email 의 값이 NULL 인 레코드의 cust_name 값을 출력한 결과이다.

❗️ NULL과 일치하지 않는 값

  • 특정한 값이 없는 행을 검색해도 NULL을 가진 행을 반환하지 않는다.
  • NULL은 특이한 방식으로 작동하기에 일치하는 값이나 일치하지 않는 값을 찾을 때 NULL 값이 있는 행을 가져오진 않는다.

📍 도전 과제

  1. Products 테이블에서 제품의 가격이 9.49 인 제품 ID(prod_id)와 제품명(prod_name)을 가져오는 SQL 문을 작성하라.
SELECT prod_id, prod_name
FROM Products
WHERE prod_price = 9.49;

  1. Products 테이블에서 제품의 가격이 9 또는 그 이상인 제품 ID(prod_id)와 제품명(prod_name)을 가져오는 SQL 문을 작성하라.
SELECT prod_id, prod_name
FROM Products
WHERE 9 <= prod_price;

  1. OrderItems 테이블에서 제품 수량이 100 개 이상인 항목을 검색하며, 이때 주문 번호(order_num)가 중복되지 않도록 SQL 문을 작성하라.
SELECT DISTINCT order_num 
FROM OrderItems 
WHERE 100 <= quantity

  1. Products 테이블에서 가격이 36 사이인 제품의 제품명(prod_name)과 제품 가격(prod_price)을 모두 가져와, 그 결과를 가격순으로 정렬하는 SQL 문을 작성하라.
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 3 AND 6
ORDER BY prod_price

profile
목적 있는 글쓰기

0개의 댓글