DB/SQL

MySQL 문법 정리

뽀루피 2024. 8. 30. 19:29

AS (별칭 정의)

속성이나 테이블에 별칭을 설정하는 것

  1. SELECT 절에서의 AS:
    • SELECT 절에서 정의된 별칭은 WHERE 절에서 사용할 수 없다.
    • ORDER BY, GROUP BY, HAVING 절에서 사용할 수 있다.
  2. FROM 절에서의 AS (테이블 별칭):
    • FROM 절에서 정의된 테이블 별칭은 쿼리의 모든 부분에서 사용할 수 있다.
  3. 서브쿼리에서의 AS:
    • 외부 쿼리에서는 사용할 수 없다. 단, 해당 서브쿼리를 직접 포함하는 상위 쿼리에서는 사용할 수 있다.

 

WITH (반복 함수)

복잡한 쿼리를 쉽게 풀어쓸 수 있다.

  1. 임시 테이블 생성
    • WITH절은 쿼리 내에서 임시로 사용할 수 있는 이름을 붙인 서브쿼리를 생성한다.
  2. 재사용성
    • 동일한 서브쿼리를 여러번 써야할 때 WITH절을 통해 한번만 정의하고 여러번 참조할 수 있다.

 

ex)

WITH sales_data AS (
    SELECT customer_id, SUM(amount) AS total_sales
    FROM sales
    GROUP BY customer_id
)
SELECT customer_id, total_sales
FROM sales_data
WHERE total_sales > 10000;

 

sales_data라는 임시 테이블을 WITH절로 정의하고 메인 쿼리에서 사용한다.(1)

 

WITH 
avg_scores AS (
    SELECT AVG(score) AS overall_avg
    FROM exam_results
),
student_scores AS (
    SELECT 
        student_id,
        AVG(score) AS student_avg
    FROM exam_results
    GROUP BY student_id
)
SELECT 
    s.student_id,
    s.student_name,
    ss.student_avg,
    CASE 
        WHEN ss.student_avg > a.overall_avg THEN 'Above Average'
        WHEN ss.student_avg = a.overall_avg THEN 'Average'
        ELSE 'Below Average'
    END AS performance
FROM students s
JOIN student_scores ss ON s.student_id = ss.student_id
CROSS JOIN avg_scores a
ORDER BY ss.student_avg DESC;

avg_scores와 student_scores를 메인 쿼리에서 여러번 참조할 수 있다.(2)

 

 

RANK(순위 구하기)

데이터에 순위를 매기고 싶을 때 사용할 수 있는 기능

SELECT id, amount, RANK() OVER(ORDER BY amount DESC) AS ranking
FROM ex_card

 

RANK() OVER(ORDER BY 정렬 기준)으로 순위 컬럼을 생성할 수 있다.

RANK() 함수의 경우 같은 순위가 있을 경우 다음 순위는 건너뛴다.

결과는 1, 1, 1, 4, 4, 6, ... 이런식으로 나타난다.

 

 

만약 다음 순위를 이어가고 싶다면 DENSE_RANK()를 사용하자.

SELECT id, amount, DENSE_RANK() OVER (ORDER BY amount DESC) AS ranking
FROM ex_card

 

결과는 1, 2, 3, 4, ... 순서대로 나타난다.

 

 

TRUNCATE (절삭 함수)

TRUNCATE(number, decimals)
  • number: 절삭할 숫자
  • decimals: 유지할 소수점 자리수 (음수 값 사용 가능)

 

ex)

SELECT
    TRUNCATE(PRICE, -4) AS PRICE_GROUP,
    COUNT(PRODUCT_ID) AS PRODUCTS
FROM PRODUCT 
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP
  • PRICE를 10,000 단위로 그룹화한다 (TRUNCATE(PRICE, -4))

 

 

SET(변수 지정 함수)

변수 선언 및 초기화

SET @변수명 = 값;

 

SELECT 문에서 변수 선언

SELECT @변수명 := 값;

 

ex)

SET @start = 15, @finish = 20;
SELECT * FROM employee WHERE id BETWEEN @start AND @finish;