AND / OR / NOT으로 조건식 업그레이드 가능
가끔은 여러 조건을 넣고싶을 때가 있습니다.
예를 들어서 1. 카테고리가 가구 2. 가격이 5000원인 것들만 필터링하고 싶으면 어떻게합니까.
조건식이 2개 이상 필요한 경우 조건식 2개를 AND, OR, NOT 붙여서 연결해줄 수 있습니다.
SELECT * FROM product
WHERE 카테고리 = '가구' AND 가격 = 5000;
AND는 왼쪽 오른쪽 조건이 전부 맞으면~ 이라는 뜻입니다.
그래서 위 코드를 실행하면 카테고리가 '가구' 이면서 가격이 5000인 것을 출력해줍니다.
SELECT * FROM product
WHERE 카테고리 = '가구' OR 가격 = 5000;
OR는 왼쪽 오른쪽이 둘 중 하나만 맞아도~ 라는 뜻입니다.
그래서 위 코드를 실행하면 카테고리가 '가구' 또는 가격이 5000인 것을 출력해줍니다.
SELECT * FROM product
WHERE NOT 카테고리 = '가구'
NOT은 뭐게요
제외라는 뜻입니다.
그래서 위 코드는 카테고리가 '가구'가 아닌 것들만 출력해줍니다.
이렇게 SQL은 영어단어 몇개만 알면 되는거라 초등학생 데려다놔도 잘합니다.
SELECT * FROM product
WHERE (카테고리 = '가구' OR 카테고리 = '옷') AND 가격 = 5000
AND 혹은 OR이 여러개 있으면 괄호같은거 쳐도 됩니다.
괄호있으면 괄호안에 있는 것들 먼저 연산한다는거 초등학교 수학시간에 배웠죠?
SQL도 마찬가지로 괄호안에 있는 것들을 먼저 연산해줍니다.
그래서 위 코드는 뭐가 출력될지 한번 예상하고 실행해봅시다.
그럼 잠깐 퀴즈시간인데
SELECT * FROM product
WHERE NOT 카테고리='가구' AND NOT 가격 = 5000
이건 무슨 뜻인지 말해보십시오.
안알려줌 직접 출력해봅시다.
IN 문법 쓰면 OR 여러개 필요없음
상품 카테고리가 신발, 가전, 식품인 것들만 출력하고 싶으면 어떻게 하죠?
알아서 조건을 줘서 출력해보면 됩니다. 5분줄테니까 해보십쇼
SELECT * FROM product
WHERE 카테고리 = '신발' OR 카테고리 = '가전' OR 카테고리 = '식품'
이렇게 OR 3번 쓰면 됩니다.
아니면 NOT 써도 되긴 하는데 실은 이런 짓거리보다 간단한 방법이 있습니다.
SELECT * FROM product
WHERE 카테고리 IN ('신발', '가전, '식품')
컬럼명 IN (값1, 값2 ... ) 쓰면 컬럼명에서 값1, 값2 등을 만족하는 행을 전부 출력해줍니다.
그래서 위 코드는 카테고리가 '신발' or '가전 or '식품' 인 행을 전부 출력해줍니다.
쉽게 말하면 그냥 같은 컬럼에서 OR 연산자가 여러개 필요할 때 IN () 문법을 쓰면 짧아집니다.
카테고리 = '신발' OR 가격 = 5000
다만 이렇게 다른 컬럼명을 OR로 연결해놓은 경우는 IN () 으로 축약 못합니다.
(참고)
- OR 여러개를 IN ()으로 축약할 수 있으면 하는게 좋습니다. 그게 처리속도가 대부분 더 빠름
- IN () 쓰면 괄호 안에 SELECT 또 사용할 수 있는데 나중에 알아봅시다. 서브쿼리라고 합니다.
오늘의 결론 :
1. SELECT FROM 뒤에 WHERE 조건식을 붙여서 필터링할 수 있고
2. 조건식란엔 > / < / = / != / >= / <= 전부 이용가능하고
3. 조건식 여러개가 필요하면 AND OR 이런걸로 이어붙일 수 있고
4. 괄호로 AND OR 사용한 부분을 묶을 수도 있고
5. OR 조건식 여러개 필요하면 IN () 사용해도 될 때가 있습니다.
알아서 코드 잘짜려면
하지만 아직도 직접 WHERE 써서 코드짜라고 시키면 코드 한 줄 못짜는 사람들이 있습니다.
이유는 여러가지가 있는데
- 강의에서 하라는거 안하고 강의만 2배속으로 주구장창 들음
- 바로 위에서 정리한 WHERE 사용법 5개를 모름
대부분 이런 이유입니다.
Q. 저는 WHERE 사용법도 다 외웠는데 왜 실전에선 코드를 못짜죠?
SQL로 코드부터 짜려고 하면 어렵습니다.
1. 우선 코드짜기 전에 무슨 데이터를 출력하고 싶은지 한글로 상세히 적습니다.
2. 그 다음에 한글을 SQL로 그대로 번역하면 쉽습니다.
원래 다들 코딩 그렇게 합니다. 한글로 생각안하고 코드부터 짜는 사람 없습니다.
실은 있긴 한데 천재 고수 아니면 생초짜 둘 중 하나임
오늘의 숙제 :
읽기만 하면 오늘 배운거 1일 후에 다 까먹지만 직접 SQL 작성해보면 무려 7일 후에 까먹습니다.
Q1. 오늘 다룬 테이블에서 재고가 20이하인 상품들을 상품명 가나다 순으로 출력해보십시오.
SELECT * FROM product
WHERE 재고 <= 20 ORDER BY 상품명
ORDER BY는 가장 마지막에 사용합니다.
왜냐고요? 필터링하고 정렬해야지 정렬하고 필터링하는건 좀 이상함
Q2. 가격이 3000원 미만이거나 6000원 초과인 상품들만 출력해봅시다.
SELECT * FROM product
WHERE 가격 < 3000 OR 가격 > 6000
혹은 WHERE 가격 NOT BETWEEN 3000 AND 6000 이런거 써도 될듯요
Q3. 카테고리가 옷이 아닌 것들 중 가격이 5천원인 상품들만 출력해봅시다.
SELECT * FROM product
WHERE 카테고리 != '옷' AND 가격 = 5000
Q4. 상품명이 셔츠, 반팔티, 운동화가 아닌 상품들만 출력해봅시다.
SELECT * FROM product
WHERE NOT 상품명 IN ('셔츠', '반팔티', '운동화')
방법은 여러가지입니다.
'Mysql&DBeaver' 카테고리의 다른 글
DBeaver)MIN, MAX, AVG, SUM 집계함수로 통계내기 (0) | 2024.09.06 |
---|---|
DBeaver)LIKE, %, _ 연산자로 간단하게 검색가능 (0) | 2024.09.06 |
DBeaver)SQL WHERE로 데이터 필터링하기 (0) | 2024.09.06 |
DBeaver)SQL WHERE로 데이터 필터링하기 (0) | 2024.08.13 |
DBeaver)SQL로 테이블 만들기 & 데이터 타입 (0) | 2024.08.13 |