SQL 기초 정리
1. SELECT
테이블에서 원하는 데이터를 조회할 때 사용
SELECT menu_name
FROM tbl_menu;
SELECT menu_code, menu_name, menu_price
FROM tbl_menu;
SELECT * FROM tbl_menu;
SELECT 7+3;
SELECT NOW() AS 현재시간;
2. ORDER BY
결과 집합을 정렬할 때 사용
SELECT menu_name, menu_price
FROM tbl_menu
ORDER BY menu_price;
SELECT menu_name, menu_price
FROM tbl_menu
ORDER BY menu_price DESC;
SELECT menu_name, menu_price
FROM tbl_menu
ORDER BY menu_price DESC, menu_name ASC;
SELECT menu_code, menu_price, menu_code*menu_price AS total
FROM tbl_menu
ORDER BY total DESC;
SELECT menu_name, orderable_status
FROM tbl_menu
ORDER BY FIELD(orderable_status, 'N', 'Y');
3. WHERE
조건을 설정해 원하는 레코드만 조회
SELECT menu_name, menu_price
FROM tbl_menu
WHERE menu_price >= 13000;
SELECT menu_name, category_code
FROM tbl_menu
WHERE orderable_status='Y' AND category_code=10;
SELECT menu_name, menu_price
FROM tbl_menu
WHERE menu_price BETWEEN 10000 AND 25000;
SELECT menu_name
FROM tbl_menu
WHERE menu_name LIKE '%마늘%';
SELECT menu_name
FROM tbl_menu
WHERE category_code IN (4,5,6);
SELECT category_name
FROM tbl_category
WHERE ref_category_code IS NULL;
4. DISTINCT
중복 제거
SELECT DISTINCT category_code
FROM tbl_menu;
SELECT DISTINCT category_code, orderable_status
FROM tbl_menu;
5. JOIN
두 개 이상의 테이블을 연결
SELECT a.menu_name, b.category_name
FROM tbl_menu a
JOIN tbl_category b ON a.category_code=b.category_code;
SELECT a.menu_name, b.category_name
FROM tbl_menu a
LEFT JOIN tbl_category b ON a.category_code=b.category_code;
SELECT a.menu_name, b.category_name
FROM tbl_menu a
RIGHT JOIN tbl_category b ON a.category_code=b.category_code;
SELECT a.menu_name, b.category_name
FROM tbl_menu a
CROSS JOIN tbl_category b;
SELECT a.category_name, b.category_name AS parent_category
FROM tbl_category a
JOIN tbl_category b ON a.ref_category_code=b.category_code;
6. GROUP BY / HAVING
그룹별 집계
SELECT category_code, COUNT(*) AS menu_cnt
FROM tbl_menu
GROUP BY category_code;
SELECT category_code, SUM(menu_price), AVG(menu_price)
FROM tbl_menu
GROUP BY category_code;
SELECT category_code, COUNT(*)
FROM tbl_menu
GROUP BY category_code
HAVING category_code BETWEEN 5 AND 8;
SELECT category_code, SUM(menu_price)
FROM tbl_menu
GROUP BY category_code WITH ROLLUP;
7. SUBQUERY
쿼리 안에서 또 다른 쿼리 사용
SELECT menu_code, menu_name
FROM tbl_menu
WHERE category_code = (SELECT category_code
FROM tbl_menu
WHERE menu_name='민트미역국');
SELECT MAX(count_val)
FROM (SELECT COUNT(*) AS count_val
FROM tbl_menu
GROUP BY category_code) AS t;
SELECT menu_name, menu_price
FROM tbl_menu a
WHERE menu_price > (SELECT AVG(menu_price)
FROM tbl_menu
WHERE category_code=a.category_code);
SELECT category_name
FROM tbl_category a
WHERE EXISTS (SELECT 1
FROM tbl_menu b
WHERE b.category_code=a.category_code);
WITH menucate AS (
SELECT a.menu_name, b.category_name
FROM tbl_menu a
JOIN tbl_category b ON a.category_code=b.category_code
)
SELECT * FROM menucate;