SELECT DATE_FORMAT(DATE_COLUMN, '%Y-%m-%d') AS formatted_date
FROM POSTS;
# 결과 : 2024-11-11
SELECT TITLE
FROM POSTS
WHERE YEAR(DATE_COLUMN) = 2022
AND MONTH(DATE_COLUMN) = 10;
SELECT
CONCAT('Q', QUARTER(DIFFERENTIATION_DATE)) AS QUARTER,
COUNT(*) AS ECOLI_COUNT
FROM
ECOLI_DATA
GROUP BY QUARTER(DIFFERENTIATION_DATE)
ORDER BY QUARTER(DIFFERENTIATION_DATE);
SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE,START_DATE)+1),1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY 1
HAVING AVERAGE_DURATION >=7
ORDER BY 2 DESC, 1 DESC
SELECT FLOOR(15.7) AS FLOOR_VALUE;
# r
15
SELECT FLOOR(-8.3) AS FLOOR_VALUE;
# r
-9
SELECT
WAREHOUSE_ID,
NAME,
ADDRESS,
COALESCE(FREEZER_AVAILABLE, 'N') AS FREEZER_AVAILABLE
FROM
FOOD_WAREHOUSE
WHERE
ADDRESS LIKE '경기도%'
ORDER BY
WAREHOUSE_ID ASC;
# LIKE '강원도%' : "강원도"로 시작하는 모든 문자열과 일치
# LIKE '%공장' : "공장"으로 끝나는 모든 문자열과 일치
# LIKE '%식품%' : 문자열에 "식품"이 포함된 모든 항목과 일치
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원도%'
ORDER BY FACTORY_ID
# LIKE '_강원도' : 첫 번째 자리에 임의의 한 문자가 있고 두 번째 위치부터 "강원도"가 오는 문자열과 일치
# LIKE '강원도_공장' : "강원도" 다음에 한 글자가 오고, 그 뒤에 "공장"이 있는 문자열과 일치
# LIKE '식품공장___' : "식품공장" 뒤에 정확히 3글자가 있는 문자열과 일치
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원도_공장';
SELECT *
FROM users
WHERE username LIKE '%\_%' ESCAPE '\';
SELECT DISTINCT page_location
FROM ga
WHERE INSTR(page_location, '_') = 0
ORDER BY page_location;
SELECT CONCAT(MAX(LENGTH), 'CM') AS MAX_LENGTH
FROM FISH_INFO;
CONCAT(SUBSTRING(U.TLNO, 1, 3), '-', SUBSTRING(U.TLNO, 4, 4), '-', SUBSTRING(U.TLNO, 8))

INNER JOIN: 두 테이블에서 조인 조건을 만족하는 행만 반환
LEFT JOIN (또는 LEFT OUTER JOIN): 왼쪽 테이블의 모든 행을 반환하고, 오른쪽 테이블에서 일치하는 행이 있으면 함께 반환. 오른쪽에 일치하는 값이 없으면 NULL로 표시
RIGHT JOIN (또는 RIGHT OUTER JOIN): 오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블에서 일치하는 행이 있으면 함께 반환. 왼쪽에 일치하는 값이 없으면 NULL로 표시
FULL OUTER JOIN: 두 테이블의 모든 행을 반환하며, 일치하는 항목이 없는 경우 NULL로 표시 (일부 데이터베이스에서만 지원)
2개 테이블 조인
SELECT M.USER_ID, M.NAME, O.ORDER_ID, O.ORDER_DATE
FROM MEMBERS AS M
INNER JOIN ORDERS AS O ON M.USER_ID = O.USER_ID;
SELECT M.USER_ID, M.NAME, O.ORDER_ID, O.ORDER_DATE, P.PRODUCT_NAME
FROM MEMBERS M
INNER JOIN ORDERS O ON M.USER_ID = O.USER_ID
INNER JOIN PRODUCTS P ON O.PRODUCT_ID = P.PRODUCT_ID;
SELECT name FROM customers
UNION
SELECT name FROM suppliers;
SELECT JT.USER_ID, JT.PRODUCT_ID
FROM (
SELECT M.USER_ID, O.PRODUCT_ID
FROM MEMBERS M
INNER JOIN ORDERS O ON M.USER_ID = O.USER_ID
) AS JT
ORDER BY JT.USER_ID, JT.PRODUCT_ID DESC;
CREATE VIEW JOINED_TABLE AS
SELECT M.USER_ID, O.PRODUCT_ID
FROM MEMBERS M
INNER JOIN ORDERS O ON M.USER_ID = O.USER_ID;
SELECT USER_ID, PRODUCT_ID
FROM JOINED_TABLE
ORDER BY USER_ID, PRODUCT_ID DESC;
SELECT FLAVOR, TOTAL_ORDER
FROM ICECREAM_SALES
WHERE TOTAL_ORDER > 3000;
SELECT FLAVOR, SUM(TOTAL_ORDER) AS TOTAL_SALES
FROM ICECREAM_SALES
GROUP BY FLAVOR
HAVING SUM(TOTAL_ORDER) > 3000;
SELECT PT_NAME, GEND_CD,
CASE
WHEN GEND_CD = 'M' THEN '남성'
WHEN GEND_CD = 'F' THEN '여성'
ELSE '기타'
END AS GENDER
FROM PATIENT;
SELECT
ROUND(AVG(CASE
WHEN LENGTH < 10 THEN 10
WHEN LENGTH IS NULL THEN 10
ELSE LENGTH
END),2) AS AVERAGE_LENGTH
FROM FISH_INFO
WITH TopSales AS (
SELECT employee_id, SUM(sales) AS total_sales
FROM sales_data
GROUP BY employee_id
HAVING total_sales > 10000
)
SELECT *
FROM TopSales
ORDER BY total_sales DESC;


SELECT
region,
salesperson,
sale_date,
sales_amount,
LAG(sales_amount) OVER (PARTITION BY region ORDER BY sale_date) AS prev_sales,
LEAD(sales_amount) OVER (PARTITION BY region ORDER BY sale_date) AS next_sales
FROM sales;
RANK() OVER (PARTITION BY column_name ORDER BY column_name ASC|DESC)

# 상위 5개의 행을 조회
SELECT NAME
FROM ANIMAL_SHELTER
ORDER BY INTAKE_DATE ASC
LIMIT 5;
# 6번째부터 5개의 행을 조회
SELECT NAME
FROM ANIMAL_SHELTER
ORDER BY INTAKE_DATE ASC
LIMIT 5 OFFSET 5;