SQL : WHERE구문, 비교연산자, 논리연산자,LIKE/BETWEEN/NOT BETWEEN

정민·2024년 1월 19일

SQL

목록 보기
4/16
post-thumbnail

1. WHERE 구문

목차
1.1 비교연산자 (<, >, =)
1.2 논리연산자(AND, OR, NOT)
1.3 LIKE, BETWEEN, NOT BETWEEN




🍀 1.1 비교연산자

SQL Code
이 문법 순서가 바뀌면 안된다.(select ,from, where 순)

select 
     컬럼
From
     테이블
where
     조건
     ;
SELECT *
FROM orderdetails
WHERE orderlinenumber = 1
;
  • 모두 가져올 거다, orderdetails 테이블에서, orderlinenumber=1 인 것만.

  • 데이터를 살짝 살펴보면, 주문 번호(orderNumber)는 같은데 제품 코드(productCode)는 같을 수 있다.

  • 예) 제품을 장바구니에 담아서 한번에 결제할 수 있음.

SELECT *
FROM orderdetails
WHERE productcode = 's24_3969'
;

  • productcode가 s24_3969인 것만 (25행)
  • orderNumber, orderLineNumber, quantityOrdered(주문수량), priceEach 각각 다 다름
SELECT *
FROM orderdetails
WHERE quantityoredered >= 70
;



실습

❔ 문제 1 : customers 테이블에서 creditLimit이 10000보다 큰 고객들의 이름(customerName)을 조회하라.

SELECT customerName
FROM customers
WHERE creditLimit > 10000
;

  • 데이터 결과 확인 시 집중할 것은 ! 98개의 row가 나왔고, 첫번째 row가 어떤 사람인지! (즉 결과가 같은지 확인할 것)




🍀 1.2 논리연산자(AND, OR, NOT)

SELECT *
FROM orderdetails
WHERE quantityordered = 46
AND
productcode = 's24_3969'
;

  • AND : 교집합, 그리고 라고 생각하면 쉽다
SELECT *
FROM orderdetails
WHERE quantityordered =46 OR
productcode = 's24_3969'
;

  • OR : 합집합, 또는 라고 생각하면 쉽다

SELECT *
FROM orderdetails
WHERE priceEach = 35.29 AND
productcode = 's24_3969'
OR
quantityordered = 46 ;

# AND, OR

  • 중요! AND와 OR을 같이 사용하는 경우 우선순위는 AND에 있음
  • OR가 우선적으로 실행되기 위해서는 소괄호 활용 ()
  • 위 코드에서는, (priceEach AND productcode) OR quantityordered 로 실행
SELECT *
FROM orderdetails
WHERE priceEach = 35.29
AND
(productcode = 's24_3969'
OR
quantityordered = 46) ;

  • 괄호를 통해서 OR 조건을 우선순위로 하면 다른 결과가 출력됨
  • 위 코드에서는, priceEach AND (productcode OR quantityordered) 로 실행



실습

❔ 문제 2 : orders 테이블에서 status가 'Shipped'이거나 'InProcess'인 주문의 orderNumber를 조회하라.

SELECT orderNumber
FROM orders
WHERE status = 'Shipped'
OR
status = 'InProcess' ;

  • 여기서 status는 문자형 데이터이기 때문에 ''작은 따옴표를 사용함
  • orders 테이블을 살펴보면 전체 326개 데이터 (status에는 Cancelled, Resolved도 포함)

❔ 문제 3 : products 테이블에서 재고(quantityInStock)가 100개 미만이거나 500개 초과인 제품의 productName을 조회하라.

SELECT productName
FROM products
WHERE quantityInStock <100
OR
quantityInStock > 500;




🍀 1.3 LIKE/BETWEEN/NOT BETWEEN

LIKE

LIKE 함수는 문자열에서 원하는 문자가 포함되어 있는지를 검색

SELECT *
FROM table
WHERE LIKE '%CARS' #CARS로 끝나는 데이터 검색
WHERE LIKE 'CARS%' #CARS로 시작하는 데이터 검색
WHERE LIKE '%CARS%' #CARS를 포함하는 데이터 검색, 가장 많이 사용

  • Product table을 살펴보자
  • Productline column을 보면 다양한 상품이 있는 것 같다
  • 어떤 상품이 있는지 확인하기 위해 distinct를 활용
SELECT *
FROM products
WHERE productline = 'vintage cars' OR productline ='classic cars';
SELECT *
FROM products
WHERE productline LIKE '%cars';

  • 위 두 코드는 서로 같은 결과를 출력함
  • Like '%cars%'도 같은 결과.



실습

❔ 문제 4 : employees 테이블에서 jobTitle에 'Sales'라는 단어가 포함된 직원의 firstName과 lastName을 조회하라.

SELECT firstName, lastName
FROM employees
WHERE jobTitle LIKE '%Sales%' ;

  • employees 테이블 살펴보기
  • reportsTo : 누구에게 보고를 하느냐 (직장 상사)
  • officeCode : 근무 지역

BETWEEN

BETWEEN 함수는 A이상 B이하의 데이터를 출력
경계값을 포함한다.
비교, 논리연산자로도 가능하지만 좀 더 짧게 표현가능한 함수

SELECT *
FROM table
WHERE column1 BETWEEN 10 AND 30;
# column1이 10이상 30이하인 모든 데이터 출력하라
SELECT *
FROM orders
WHERE orderdate
BETWEEN '2003-01-01' AND '2003-01-31' ;
SELECT *
FROM orders
WHERE orderdate >= '2003-01-01' AND orderdate <= '2003-01-31';
  • 위 두 코드는 같은 결과를 나타냄.



실습

❔ 문제 5 : orderdetails 테이블에서 주문 수량(quantityOrdered)이 10개 이상 50개 이하인 주문의 orderNumber를 조회하라.

SELECT orderNumber
FROM orderdetails
WHERE quantityOrdered
BETWEEN 10 AND 50;


NOT BETWEEN

NOT BETWEEN 함수는 A이상 B이하를 제외한 데이터를 출력
여집합이라고 생각.
경계선을 포함하지 않음.

SELECT *
FROM table
WHERE column1 NOT BETWEEN 10 AND 30;
# column1이 10이상 30이하 제외 모든 데이터 출력
SELECT *
FROM orders
WHERE orderdate
NOT BETWEEN '2003-01-01' AND '2003-01-31';
SELECT *
FROM orders
WHERE orderdate < '2003-01-01' OR orderdate > '2003-01-31';
# AND가 들어가면 안되고 OR이 들어가야함!
  • 위 두 코드는 서로 같은 결과를 출력함
profile
데이터 공부하는 예비 데이터 분석가, 김정민입니다.

0개의 댓글