상세 컨텐츠

본문 제목

비전공자도 SQL 구문 뽀개기 1편 (where, order by)

카테고리 없음

by 꽃담25 2024. 12. 17. 16:29

본문

[1] WHERE 구문 이해하기

 

맥도날드에 들어갑니다. 포스기 앞에 섰습니다.
메뉴판에서 많은 음식 카테고리 중 우리가 햄버거를 고르는 상황이라고 가정하겠습니다. 

아마 이 순서대로 포스기를 누르실 겁니다.
[햄버거] 카데고리 클릭 -> 먹고 싶던 햄버거라... 🧐 ->  '베이컨과 계란이 들어간' 햄버거!

위 햄버거 고르는 과정처럼 저희는 SQL에서 조건에 맞는 데이터 값을 추출해야 하는 상황이 있습니다.
이때 특정 조건에 알맞은 데이터를 골라주는 WHERE을 사용합니다. 


SQL의 기본 구문인 select, from에서  추가로 특정 조건인 where 구문을 사용합니다!

select (칼럼 :열 )
from (테이블 ) 
where (조건 : 행 관련 ) <-- new! 



" [햄버거] 카테고리 클릭 > 먹고 싶던 '베이컨과 치즈가 들어간' 햄버거를 고르기 "
위 예시 사례를 이용하면 아래와 같이 정리할 수 있겠네요!

menu: 테이블 (from에 이용)
[hamburger] : 칼럼 (select에 이용)
베이컨 포함 : 조건 1 (where에 이용)
치즈 포함 : 조건 2 (where에 이용)

[1-1] WHERE에 사용하는 5가지 조건


where에 사용하는 조건은 엑셀과 마찬가지로 5가지 유형으로 나뉩니다. 

1. 논리 연산자 : 같다(=), 같지 않다 (!=)

특정 값이 내가 찾고자 하는 값과 일치한다면 등호 (=)를, 일치하지 않는 값을 경우엔 등호의 반대(!=)를 사용합니다!
(*! 는 NOT을 의미한다.)

ex. 상품목록 테이블에서 카테고리가 '패스트푸드'인 것을 전체 열에서 추출합니다. 

select *
from 상품목록 
where category = '패스트푸드' 
ex. 상품목록 테이블에서 카테고리가 '패스트푸드'가 아닌 것을 전체 열에서 추출합니다.

select *
from 상품목록 
where category != '패스트푸드'

 

 

2. 숫자의 크기 혹은 날짜 전후 비교 : 크다 (>), 작다(<), 이상(>=), 이하 (<=)

ex. 상품목록 테이블에서 가격이 5500원 이상인 값을 전체 열에서 추출합니다.

select
from 상품목록 
where 가격 >= 5500

 

 

3-1. 범위 또는 목록의 포함 여부 :  ~사이 (BETWEEN~ AND~)

ex. 상품목록 테이블에서 가격이 5000원에서 5500원 사이 값을 전체 열에서 추출합니다. 

select
from 상품목록 
where 가격 BETWEEN 5000 AND 5500
ex. 상품목록 테이블에서 가격이 5000원에서 5500원 사이가 아닌 값을 전체 열에서 추출합니다. 

select 
from 상품목록 
where 가격 NOT BETWEEN 5000 AND 5500

 


3-2. 범위 또는 목록의 포함 여부 : ~중에 해당함 (IN~)

연속되는 범위가 아닌, 특정 몇 개 항목 중에서 해당되는 것을 골라내야 할 때,
IN (A,B,C,...)을 사용할 수 있습니다!

ex. 상품목록 테이블에서 카테고리에서 '밥 또는 술'이 있다면 포함해라.

select 
from 상품목록 
where 카테고리 IN ('밥','술')

 

ex. 상품목록 테이블에서 카테고리에서 '커피 또는 쿠키'가 없다면 포함하지 마라. 

select
 
from 상품목록 
where 카테고리 NOT IN ('커피', '쿠키')

 


4. 특정 문자열 포함 여부 판단 : 포함 (LIKE), 포함 안 함 (NOT LIKE)

 

'문자' 데이터에서 1) 특정 글자로 시작하거나, 2) 특정 글자나 단어로 끝나거나,
3) 중간에 특정 글자나 단어를 포함하는 것을 골라내고 싶은 경우에는

LIKE '(문자열) %'를 사용합니다!

* like 구문에서 에서 작은따옴표(')를 사용해야 문자열로 인식합니다!

* %는 이외의 문자가 해당한다는 뜻으로, '(앞 또는 뒤에) 모든 글자가 있든 상관하지 않는다'는 의미입니다! 

LIKE '문자열%' : 특정 문자열로 시작하는 것들을 모두 골라낸다. 
LIKE '%문자열' : 특정 문자열로 끝나는 것들을 모두 골라낸다. 
LIKE '%문자열%' : 특정 문자열이 어딘가에라도 포함되어있다면 모두 골라낸다. 

 

ex. 상품목록 테이블에서 이름이 '사'으로 끝나는 전체 열을 조회해주세요.
select

from 상품목록 
where name like '%사'

ex. 상품목록 테이블에서 이름이 '인'으로 시작하는 전체 열을 조회해주세요.
select
 
from 상품목록 
where name like '인%'

ex. 상품목록 테이블에서 이름이 '랑'를 포함하는 전체 열을 조회해주세요.
select
 
from 상품목록 
where name like '%랑%'

 

 

5. 비어 있음 (IS NULL), 비어 있지 않음 (IS NOT NULL)

데이터가 누락되어 '비어 있다'는 IS NULL

'비어있지 않다'는 의미는 IS NOT NULL 을 사용합니다!

ex. 상품목록 테이블에서 카테고리 id가 비어 있는 전체 열을 조회해주세요.

select * 
from 상품목록 
where 카테고리 id IS NULL
ex. 상품목록 테이블에서 카테고리 id가 비어있지 않은 전체 열을 조회해주세요.

select * 
from 상품목록 
where 카테고리 id IS NOT NULL

 


[2] ORDER BY 구문 이해하기

PM이라면 누구나 방대한 양의 데이터를 마주하게 됩니다. |

PM 왈, ' 순서대로 정리되면 참 좋을텐데 🤯' 

이 때 알아두면 좋을 구문이 ORDER BY 구문입니다! 
오름차순과 내림차순을 구분해야 하는데요, 문과생이면 헷갈리기 쉽죠. 그래서 정리했습니다!
 
* 오름차순 ❓= 숫자가 작은 것에서 큰 것으로 점차 올라가는 것
* 내림 차순 ❓ = 숫자가 큰 것에서 작은 것으로 점차 내려가는 것 

예를 들면, 등급이 높은 1등급부터 10등급까지 오름차순을 하거나, 
가격이 큰 것부터 작은 것 순으로 내림차순을 합니다.

 

SQL에서는 이를 ORDER BY라는 명령어를 통해 적용합니다. 

[SQL에서는 ORDER BY]

"칼럼 1을 기준으로 오름차순으로 정렬해줘."
ORDER BY 칼럼 1

= ORDER BY 칼럼 1 ASC (* ASC가 없어도 무방합니다)


"칼럼 2를 기준으로 내림차순으로 정렬해줘."
ORDER BY 칼럼1 DESC

"칼럼 1을 기준으로 내림차순으로 정렬한 뒤 다시 칼럼2를 기준으로 오름차순으로 정렬해줘."
ORDER BY 칼럼 1 DESC, 칼럼 2 ASC
ex. 상품목록 테이블에서 아이템넘버를 오름차순으로 전체 열을 조회해 주세요.

SELECT * 
FROM 상품목록 
ORDER BY item_no



ex. 상품목록 테이블에서 아이템넘버를 내림차순으로 전체 열을 조회해 주세요.

SELECT * 
FROM 상품목록 
ORDER BY 카테고리 DESC



ex. 카테고리 아이디를 기준으로 내림차순 후, 다시 그 안에서 원래 가격을 기준으로 오름 차순으로 정렬해 주세요. 

SELECT * 
FROM 상품목록 
ORDER BY 카테고리 DESC, 원래 가격 ASC

 

✅ 오늘의 포스팅 요약 

1. WHERE 구문 : 특정한 조건 값에 맞는 데이터를 고를 때 
2. WHERE구문의 5가지 조건이 있다 
1) 논리 연산 [=][!=]
2) 숫자 혹은 날짜 비교 [>],[<],[>=],[<=]
3) 범위 또는 목록의 포함 [between A and B] [IN A, B] 
4) 특정 문자열 포함 [ LIKE '문자열%']
5) 비어있는 데이터, 안 비어있는 데이터 [IS NULL], [IS NOT NULL]

3. ORDER BY 구문 : 오름 차순 혹은 내림 차순으로 데이터를 정리할 때
: ORDER BY 칼럼 1 DESC /  ORDER BY 칼럼 1 ASC / ORDER BY 칼럼 1 DESC, 칼럼 2 ASC