정확하게 천천히 이해해보자
나는 SQL 문법이 가장 어려웠어. 왜냐면 띄어쓰기 하나 잘못하고, 쉼표 하나 안 붙이면 코딩 에러가 떠버리거든. 그래서 내가 나름 시행착오를 겪으면서 정리해본 문법들과 내용들을 공유해볼까 해.
(주의: 헷갈리고 어려운 문법 정리 부분은 SQL코딩을 기초선에서 어느 정도 배운 후 다시 한 번 읽어줘!)
앞에 쓰는 이유는 문법정리하는 것이 실제 코딩을 성공시키는데 매우 중요하다는 의미에서 두괄식으로 앞에 놓을게
<헷갈리고 어려운 문법 정리>
1. ()괄호는 언제쓰는가? 주로 of나 in 범주설정할 때 사용한다.
ex) AVG(셀 이름)
"Average of 어떤 셀 또는 속성"이라고 기억하자!
ex) in(셀 이름)
같은 속성의 여러 별칭들을 나열할 때 in 을 사용한다.
Where country in (‘Mexico’, ‘Korea’, ‘America’)
2. =등가 표시는 언제 쓰는가? 셀/속성 title쓰고, 특정 별칭으로 조건제한할 때
ex) Where country = ‘Korea’, cuisine type = ‘Chinese’
3. 작은 따음표는 '___' 언제 쓰는가? 속성/셀 아늬 문자 별칭에만 사용 ‘서울’
ex) 숫자 별칭이나, 별칭이 아닌 속성의 title에는 사용하지 않는다.
4. 큰 따음표는 "____" 언제 쓰는가? 속성column의 title을 rename할 때 한국어면 사용, 영어만 사용x
ex) select addr as “주소”
5. select 부분에 뭘 써야하나? 표(tablet)에서 조회하고 싶은 속성(column/ 셀 / 세로줄)의 title들을 쓴다.
6. from 부분에 뭘 써야 하나? 표의 이름 tablet name
7. group by는 도대체 왜 필요한가? select에서 존재하는 셀 title만 조회하는 것이 아니라, tablet의 평균값, sum, max, count등 연산값을 조회할 경우. group by 존재하는 셀 title을 해줘야, 전체 표가 정상적으로 연산의 대상의 후보가 된다.
ex) select price, count(customer_id)
from food_orders
group by price
예: 이때 group by price라고 해줘야, 고객의 아이디 수를 셀 때 금액을 지불한 모든 고객들의 아이디 수를 셀 수 있게 된다.
Step1: select 셀(column)에 대한 값
1. 출력하고 싶은 결과 (검색하고 싶은 내용) ex) customer name 고객명단
*헷갈리지 말기! select는 속성column을 조절하는 부분으로, 어떤 column(셀)을 보고 싶은지 쓰는 구간이다. *from은 내가 데이터 출력해내야하는 표의 이름이다. ex)customer 고객표
2. 없는 셀도 만들어 낼 수 있음. 바로 연산을 통해! count, sum, avg, substr(별칭 중에 특정 문자만 뽑아내서 새로운 셀 만들기), 그리고 없는 셀을 새로운 이름으로 또 창조할 수 있음.
ex) 속성 column이름 바꾸기
select restaurant_name as “음식점”, addr (as) “주소”
from food_orders
*조건) 영문 title은 따음표 안 써도 되고 , / 특수문자나 한글을 사용해서 별명 지정하면 따음표 필수
*조건) as는 생략 가능
ex) select restaurant_name as “음식점”, addr (as) address
from food_orders
Step2: 전체 * 은 언제 사용하냐? 표에서 모든 열(세로줄)을 출력하고 싶거나, 내가 찾는게 어디 들어있는지 몰라서 일단 전체 표에서 확인하려고 할 때.
select *
from 표 이름
Step3: where 조건문 붙일 때
select *
from customers
where 조건문 age = 21 / age = ‘male’
*언제 사용? 속성 column전체 다 보고 싶은데 그 전체 속성들 중에서도 필터링으로 나이 21이상으로 제한할 때. Ex) 나는 나이 Age라는 세로줄 속성을 조회하고 싶은데 20살 이상의 예시들만 보고싶어. 그럴때 where로 조건문 건다!
혼돈하지 말기!
select는 속성을 제한해서 보는거기 때문에, select랑 where구분하기
where은 instance 가로 행의 일부만 보고 filtering하는 것!
조건이 두 개 이상일 때 and로 연결한다.
ex) where country = ‘Mexico’ and age = 30
여러 조건 중에 하나만 만족해도 될 때에는 or로 연결한다.
ex) where country = ‘Mexico’ or age = 30
제외하고 싶은 필터가 있을 때 != 이렇게 하거나, <>이렇게 하기
ex) where country != ‘Korea’
등호 처리할 때
ex) where age >= 30 and <40
조건) 문자는 ‘ ’ 따옴표 사용/그리고 숫자는 그냥 (속성 column 이름에는 따옴표 안 붙임)
같은 조건에 동일한 문자일 때
ex) Where country in (‘Mexico’, ‘Korea’, ‘America’)
Where country not in (‘Mexico’, ‘Korea’, ‘America’)
또는 where country != ‘Mexico’ 또는 where country <> ‘Mexico’
Step4: where 조건문 붙일 때 버전 3 비교연산자 (between, like, %, in )
Select
From
Where age>=21 (조건 이때 띄어쓰기 하면 안됨)
같지 않다. not, <>, !=
between: 범위설정
ex) where age >= 30 and <=40
ex) 이거는 뭐랑 같냐면 where age between 30 and 40
제외하고 싶으면 not between 30 and 40
like ‘%’: 완전히 같은 값은 아니지만, 비슷한 값을 조건으로 추가
찾고 있는 일정한 패턴이 있을 경우 사용. tom~으로 시작하는 이름
ex)
select
from
where name like ‘Tom%’ and ‘김%’
이건 무슨 뜻이냐면 tom으로 시작하는 이름들 다 보여줘
ex)
select *
from customers
where country in (‘Mexico’, ‘Germany’, ‘UK’) and contactname not like ‘M%’
ex)
where contactname like ‘%d’ 이름 끝에 d들어있는 사람 찾을 때
in 포함한다.
ex) where age in (21, 25, 27)
21,25,27 나이만 포함할 때 사용
ex) where name in (‘Ka%’, ‘Ma%’)
Step5: order by 나열 순서
내림차순 DESC (역행) 큰거에서 작은 순서 / 최근일자부터 먼 일자까지
오름차순 ASC (순행) 작은것에서 큰걸로 순서 / 먼일자부터 최근까지 순서
ex)
select *
from customers
where country in (‘Germany’, ‘Mexico’, ‘UK’) and contactname like ‘M%’
order by 고객가입일 DESC 아니면 order by 고객이름 ASC
안쓰면 오름차순이 디폴트값임.