Programing Language/Sql

SQL 정리

jheaon 2024. 5. 8. 11:04

 

 

 

목차
1.SELECT, FROM
2.WHERE
2.1.WHERE vs HAVING
3.BETWEEN, IN, LIKE
4.여러 조건 적용하기
5.SUM, AVERAGE, COUNT, MIN, MAX
6.GROUP BY
7.ORDER BY
8.REPLACE,  SUBSTRING, CONCAT
9.IF, CASE
10.Subquery
11.Join

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

'Programing Language/Sql'의 다른글

  • 현재글 SQL 정리

관련글