01. SQL(Structured Query Language)이란?
- 데이터베이스와 대화를 하기 위한 언어
- 데이터베이스 관리 시스템에서 데이터를 관리하고 조회하기 위해 사용됨
※ Query(질의)는 데이터베이스에서 정보를 얻기 위한 요청이나 질문을 의미함
각각의 쿼리는 데이터 베이스에서 다양한 작업을 수행하도록 요청하는 질의문 (모두 쿼리의 예시임)
-- customers 테이블에서 나이를 선택하는 쿼리
SELECT age
FROM customers
02. 테이블과 컬럼
- 테이블의 구조는 아래와 같으며, 각 열을 '컬럼' 혹은 '필드'라고 부름
03. SQL 데이터 조회하기(SELET, FROM : 기본)
1) 기본 명령어
- SELECT : 데이터를 가져오는 기본 명령어로, 데이터를 조회하는 모든 Query 에 사용됨
- FROM : 데이터를 가져올 테이블을 특정해주는 문
- * : 모든 컬럼을 가져와준다는 의미
select *
from customers
2) 원하는 컬럼 선택하기
select 컬럼1, 컬럼2
from 테이블
3) 컬럼에 별명(alias)을 주기
- 입력한 별명으로 출력됨
- 영문, 언더바 : 따음표 없이 별명만 적음
- 특수문자, 한글 : "별명" 큰 따음표 안에 작성
- 유의사항 : 공백행이 있으면 정상 작동하지 않음.
select email as e_mail #as 없어도 작동함
gender "성별"
from customers
04. 조건에 맞는 데이터 필터링 (WHERE)
1) WHERE : 전체 데이터 중 특정 조건을 필터링할 때 사용 ' ex) 나이가 21살인 사람 '
select *
from 테이블
where 필터링 조건 (나이가 21살 이상)
select *
from customers
where age=21
2) 필터링에 유용한 표현
① 비교연산 : 같음, 큼, 작음 등의 조건을 지정할 수 있음
비교연산자 | 의미 | 예시 |
= | 같다 | age = 21 gender = 'female' |
<> | 같지 않다(다르다) | age <> 21 gender <> 'female' |
> | 크다 | age>21 |
>= | 크거나 작다 | age>=21 |
< | 작다 | age<21 |
<= | 작거나 같다 | age<=21 |
select *
from customers
where age<21
② BETWEEN / IN / LIKE : 필터링 조건 다양하게 지정
BETWEEN | A와 B사이 | where between A and B | 나이가 10과 20 사이 where age between 10 and 20 |
IN | 포함하는 조건주기 | where IN (A,B) | 나이가 15,21,31세인 경우 where age in (15,21,31) |
LIKE | 완전히 똑같지는 않지만, 비슷한 값을 조건으로 주기 |
where like '시작문자%' | '김'으로 시작하는 이름 where like '김%' '김'을 포함하는 이름 where like ' % 김 % ' '김'으로 끝나는 이름 where like '김 % ' |
③ 논리연산 AND , OR , NOT : 여러 개의 조건으로 필터링
AND | 그리고 | 나이가 20세이고, 여성 where age=20 and gender = 'female' |
OR | 또는 | 나이가 20세 이상이거나, 여성 where age>20 or gender = 'female' |
NOT | 아닌 | 여성이 아닌 where not gender = 'female' |
④ SQL로 계산하기 : SUM, AVG, COUNT, MIN, MAX
SUM | 합계 | 상품 준비시간을 구하고 별명 짓기 SELECT sum(food_preparation_time) total_food_preparation_time FROM food_orders |
AVG | 평균 | 상품준비시간의 합계와 평균 구하고 별명짓기 SELECT sum(food_preparation_time) total_food_preparation_time avg(delivery_time) avg_food_preparation_time FROM food_orders |
COUNT | 갯수 - COUNT(컬럼) 컬럼명 대신 1 혹은 * 사용가능 - 몇개의 값을 가지고 있는지 구할 때 : DISTINCT |
COUNT(컬럼) 컬럼명 대신 1 혹은 * 사용가능 몇개의 값을 가지고 있는지 구할 때 : DISTINCT 주문건수와, 주문 한 고객 수 구하기 SELECT count (1) count(distinct customer_id) FROM food_orders |
MIN | 최솟값 | 주문 가격의 최솟값 SELECT min (price) min_price FROM food_orders |
MAX | 최대값 | 주문가격의 최대값 SELECT max (price) min_price FROM food_orders |
숫자연산 |
+ , - , * , / | 상품준비시간과 배달시간의 합계 SELECT food_preparation_time + delivery_time FROM food_orders |
05. GROUP BY로 범주별 연산 한 번에 끝내기
- GROUP BY : 여러번의 쿼리 없이, 카테고리를 지정하여 수식 함수로 연산
1) 기본 구조
select 카테고리컬럼(원하는컬럼 아무거나),
sum(계산 컬럼),
from
group by 카테고리컬럼(원하는컬럼 아무거나)
2) 예시 : 음식 종류별 주문 금액 합계
select cuisine_type,
sum(price) sum_of_price
from food_orders
group by cuisine_type
06. Query 결과를 정렬하여 업무에 바로 사용하기 (ORDER BY)
- 오름차순 : 숫자가 점점 커지는 순서로 정렬
- 내림차순 : 숫자가 점점 작아지는 순서로 정렬
- 기본구조
select 카테고리컬럼(원하는컬럼 아무거나),
sum(계산 컬럼),
from
group by 카테고리컬럼(원하는컬럼 아무거나)
order by 정렬을 원하는 컬럼 (카테고리컬럼(원하는컬럼 아무거나), sum(계산 컬럼) 둘 다 가능)
종류 | 구문 | 예시 |
오름차순 | 생략 | order by sum(price) |
내림차순 | DESC | order by sum(price) desc |
07. SQL 기본 구조
select
from
where
group by
order by
- 예시
음식 종류별 가장 높은 주문 금액과 가장 낮은 주문금액을 조회하고, 가장 낮은 주문금액 순으로 (내림차순) 정렬하기
select cuisine_type,
min(price) min_price,
max(price) max_price
from food_orders
group by cuisine_type
order by min(price) desc