Programing Language/Sql

SQL 정리

JHeaon 2024. 5. 8. 11:04

 

 

 

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 정리

관련글