문자열 가공하기
- REPLACE : 특정 문자를 다른 문자로 변경
- SUBSTRING(SUBSTR) : 특정 부분만 추출
- CONCAT : 문자끼리 연결
SELECT
REPLACE(대상 컬럼, 현재 값, 변경 값),
SUBSTR(대상 컬럼, 시작 위치, 길이),
SUBSTR(대상 컬럼, 시작 위치),
CONCAT(연결하고 싶은 값1, 연결하고 싶은 값2, 연결하고 싶은 값3, ...)
FROM 테이블명
SELECT
REPLACE(game_title, '롤토체스', 'TFT'),
SUBSTR(addr, 1, 2),
CONCAT('[', SUBSTR(addr, 1, 2), ']')
FROM users
조건에 따라 조회하기
- IF : 조건의 참, 거짓에 따라 결과 적용
- CASE : 여러가지 조건 지정 가능
SELECT
IF(조건, 참인 경우, 거짓인 경우),
CASE WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
WHEN 조건3 THEN 값3
ELSE 값4
END
FROM 테이블명
SELECT
IF(country = 'Korea', '한국', '기타'),
CASE WHEN contry = 'Korea' THEN '한국'
ELSE '기타'
END
FROM users
서브쿼리(Subquery)
- Subquery : 쿼리 안에 작성되는 쿼리로서 여러 번의 연산을 수행하거나 메인 쿼리에서 사용할 데이터를 추출하기 위해 사용
SELECT
컬럼1,
별칭 컬럼
FROM
(
SELECT
컬럼1,
컬럼2 별칭 컬럼
FROM 테이블명
) 서브쿼리 별칭
SELECT
컬럼1,
컬럼2,
FROM 테이블1
WHERE 컬럼1 = (SELECT 컬럼3 FROM 테이블2)
SELECT
order_id,
restaurant_name,
IF(over_time > 0, 'Late', 'On-time')
FROM
(
SELECT
order_id,
restaurant_name,
(food_preparation_time - 25) over_time
FROM food_orders
) a
조인(Join)
![](https://mblogthumb-phinf.pstatic.net/MjAyMTA0MTFfMjMz/MDAxNjE4MTQxNDk5OTE4.m3Y_8c5R33kk2qnO_5oS4Y_SKGT46Tg-bGYRMGY7NVQg.-KW-vexIEPohn400tfzjDhnf6fgiVU0dxw8TGug_Wuog.JPEG.ollala5276/SQL_JOIN.jpeg?type=w800)
- Join : 공통 컬럼을 기준으로 서로 다른 테이블에 있는 데이터를 추출하거나 연산하기 위해 사용
- INNER JOIN : 공통 컬럼만 조회
- LEFT JOIN : 공통 컬럼과 왼쪽 테이블의 모든 데이터 조회(오른쪽 테이블에 일치하는 데이터가 없다면 NULL로 표시)
- RIGHT JOIN : 공통 컬럼과 오른쪽 테이블의 모든 데이터 조회(왼쪽 테이블에 일치하는 데이터가 없다면 NULL로 표시)
SELECT
a.컬럼1
b.컬럼2
FROM 테이블1 a
INNER JOIN 테이블2 b
ON a.공통 컬럼 = b.공통 컬럼
SELECT
a.컬럼1
b.컬럼2
FROM 테이블1 a
LEFT JOIN 테이블2 b
ON a.공통 컬럼 = b.공통 컬럼
SELECT
a.컬럼1
b.컬럼2
FROM 테이블1 a
RIGHT JOIN 테이블2 b
ON a.공통 컬럼 = b.공통 컬럼
SELECT
a.order_id,
a.customer_id,
a.restaurant_name,
a.price,
b.name,
b.age,
b.gender
FROM food_orders a
INNER JOIN customers b
ON a.customer_id = b.customer_id
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
SELECT
a.order_id,
a.customer_id,
a.restaurant_name,
a.price,
b.name,
b.age,
b.gender
FROM food_orders a
RIGTH JOIN customers b
ON a.customer_id = b.customer_id
사용할 수 없는 데이터 / NULL 데이터 처리하기
- 사용할 수 없는 값 제외하기
IF : 비교연산자<>
를 사용
IS NOT NULL : WHERE
절에서 사용
SELECT
restaurant_name,
AVG(IF(rating <> 'Not given', rating, NULL))
FROM food_orders
GROUP BY restaurant_name
SELECT a.order_id,
a.customer_id,
b.age,
b.gender
FROM food_orders a
LEFT JOIN customers b
ON a.customer_id = b.customer_id
WHERE b.customer_id IS NOT NULL
- NULL값 대체하기
COALESCE : NULL값이 존재할 때 다른 값으로 대체
SELECT
COALESCE(컬럼명, 대체값)
FROM 테이블명
SELECT
a.order_id,
a.customer_id,
b.name,
COALESCE(b.age, 20)
FROM food_orders a
LEFT JOIN customers b
ON a.customer_id = b.customer_id
WHERE b.age IS NULL