SELECT, FROM
어떤 테이블에서 데이터를 가져올 때 사용한다.
select * from 테이블
select 컬럼 from 테이블
select 컬럼1, 컬럼2 from 테이블
때로는 칼럼을 뽑았을 때, 사용하는 명칭과 다를 때가 있다. 이때는 칼럼 명에 별명을 지정하여 변경할 수 있는데 2가지 방법이 존재한다. 별명을 지을 때 주의점은 특수문자나 한글이 별명 안에 있을 경우 큰 따옴표 안에 적어주어야 한다.
- 칼럼 1 as 별명 1
- 칼럼 2 별명 2
select order_id as ord_no, restaurant_name "식당 이름" from food_orders
WHERE
데이터 중에 특정 조건을 필터링할 때 사용한다. 문자를 사용할 때에는 작은따옴표를 사용한다.
select * from customers where age=21
select * from customers where gender='female'
select * from food_orders where cuisine_type='Korean'
WHERE vs HAVING
where와 비슷하게 having이라는 것도 있는데 두 개의 차이점은having은 전체 결과, where은 개별 행에 조건을 건다는 것이다.
SELECT NAME, COUNT(NAME) FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME DESC;
BETWEEN, IN, LIKE
SQL에서는 일반적인 비교연산자(<, >, =)와 더불어 다양한 조건의 필터를 제공한다.
- BETWEEN : A와 B 사이
where age between 10 and 20
- IN : 포함하는 조건 주기
age in (15, 21, 31)
cuisine_type in ('Korean', 'Japanese')
- LIKE : 완전히 같지는 않지만, 비슷한 값을 조건으로 주기
- 특정 문자로 시작하는 경우 : like '시작문자%'
- 특정 문자를 포함하는 경우 : like '%포함문자%'
- 특정 문자로 끝나는 경우 : like "%끝문자'
name like '김%'
restaurant_name like '%Next%'
name like '%임'
여러 조건 적용하기
여러 개의 필터링 조건을 한 번에 적용하기 위해서는 아래의 논리 연산자를 이용한다.
- AND : 그리고
- OR : 또는
- NOT : 아닌
select * from food_orders where cuisine_type='Korean' and price>=30000
select * from payments where pay_type='card' or vat<=0.2
SUM, AVERAGE, COUNT, MIN, MAX
SQL에서는 필요한 형태로 여러 가지 계산식을 수행할 수 있다.
- SUM : 합계
- AVG : 평균
select sum(food_preparation_time) total_food_preparation_time,
avg(delivery_time) avg_food_preparation_time
from food_orders
- COUNT(칼럼) : 데이터 개수
- DISTINCT : 몇 개의 값을 가지고 있는지 구할 때 (중복 제거)
select count(*) count_of_orders,
count(distinct customer_id) count_of_customers
from food_orders
- MIN : 최솟값
- MAX : 최댓값
select min(price) min_price,
max(price) max_price
from food_orders
GROUP BY
조건에서 그룹별로 보고 싶을 때 사용한다.
select 카테고리컬럼(원하는컬럼 아무거나),
sum(계산 컬럼),
from
group by 카테고리컬럼(원하는컬럼 아무거나)
ORDER BY
조회한 결과를 순서대로 정렬할 때 사용한다.
select 카테고리컬럼(원하는컬럼 아무거나),
sum(계산 컬럼),
from
group by 카테고리컬럼(원하는컬럼 아무거나)
order by 정렬을 원하는 컬럼 (카테고리컬럼(원하는컬럼 아무거나), sum(계산 컬럼) 둘 다 가능)
REPLACE, SUBSTRING, CONCAT
문자 데이터의 형태를 바꾸기 위해서는 위의 함수를 이용한다.
- REPLACE : 특정 문자를 다른 것으로 바꿀 때 사용한다.
replace(바꿀 컬럼, 현재 값, 바꿀 값)
- SUBSTRING : 원하는 문자만 남기고 싶을 때 사용한다. 중요한 점은 시작 위치 인덱스는 1부터 시작한다.
substr(조회 할 컬럼, 시작 위치, 글자 수)
- CONCAT : 여러 컬럽의 값을 하나로 합치고 싶을 때 사용한다.
concat(붙이고 싶은 값1, 붙이고 싶은 값2, 붙이고 싶은 값3, .....)
IF, CASE
한 조건에 따라 포맷을 다르게 변경하려고 한다면 IF을 사용한다. 예를 들어서 음식 타입을 'Korea"일 때는 '한식' 아닌 경우에는 '기타'라고 지정하고 싶다면 다음과 같이 SQL을 작성한다.
select restaurant_name,
cuisine_type "원래 음식 타입",
if(cuisine_type='Korean', '한식', '기타') "음식 타입"
from food_orders
만약 조건이 여러 개라면 CASE을 사용한다.
case when 조건1 then 값(수식)1
when 조건2 then 값(수식)2
else 값(수식)3
end 칼럼이름
Subquery
여러 번의 연산을 수행하거나, 조건문에 연산 결과를 사용해야 할 때, 조건에 쿼리 결과를 사용하고 싶을 때 해당 쿼리를 사용한다.
select column1, special_column
from
( /* subquery */
select column1, column2 special_column
from table1
) a
예를 들어서 음식 주문시간이 25분보다 초과한 시간을 가져온다고 한다면 다음과 같이 작성이 가능하다.
select order_id, restaurant_name, if(over_time>=0, over_time, 0) over_time
from
(
select order_id, restaurant_name, food_preparation_time-25 over_time
from food_orders
) a
Join
여러 테이블에서 데이터를 불러올 때 사용한다. join을 사용하는 방법에는 여러 가지가 있다.
- LEFT JOIN : 공통 칼럼 (키값)을 기준으로, 하나의 테이블에 값이 없더라도 모두 조회되는 경우를 의미한다.
- INNER JOIN : 공통 컬럼 (키값) 을 기준으로, 두 테이블 모두에 있는 값만 조회한다.
-- LEFT JOIN
select 조회 할 컬럼
from 테이블1 a left join 테이블2 b on a.공통컬럼명=b.공통컬럼명
-- INNER JOIN
select 조회 할 컬럼
from 테이블1 a inner join 테이블2 b on a.공통컬럼명=b.공통컬럼명
만약 주문 테이블과 고객 테이블을 customer_id 기준으로 left join으로 묶는다고 가정하면 다음과 같이 작성이 가능하다.
select a.order_id,
a.customer_id,
a.restaurant_name,
a.price,
b.name,
b.age,
b.gender
from food_orders a left join customers b on a.customer_id=b.customer_id
'Programing Language > Sql' 카테고리의 다른 글
SQL 숫자 처리 (0) | 2024.05.13 |
---|---|
SQL 날짜 처리 (0) | 2024.05.13 |