MySQL DQL 쿼리 정리 / 테이블 데이터 조회 쿼리 문법
MySQL DQL 쿼리
INNER JOIN (=JOIN)
SELECT * FROM 테이블1 A
INNER JOIN 테이블2 B ON A.키 = B.폴인키
두 테이블에서 조인 조건을 만족하는 행만 결합하여 반환합니다.
조인 조건을 만족하지 않는 행은 결과에서 제외해서 NULL 값으로 채우지 않으므로, 성능이 개선됩니다.
테이블1에 2건, 테이블2에 5건 있으면 최소 0건, 최대 5건의 결과가 나올 수 있습니다.
게시판 댓글을 조회할 때 사용하면 적합합니다.
LEFT OUTER JOIN (=LEFT JOIN)
SELECT * FROM 테이블1 A
LEFT OUTER JOIN 테이블2 B ON A.키 = B.폴인키
왼쪽 테이블에 있는 모든 행을 반환하고, 우측 테이블에 조인 조건을 만족하는 데이터가 있으면 결합합니다.
우측 테이블에 조건에 맞는 데이터가 없으면 NULL 값으로 채워 반환하므로, 불필요한 계산이 있을 수 있습니다.
테이블1에 2건, 테이블2에 5건 있으면 최소 2건, 최대 5건의 결과가 나올 수 있습니다.
LEFT JOIN 그룹화
SELECT * FROM 테이블1 A
LEFT OUTER JOIN 테이블2 B ON A.키 = B.폴인키
GROUP BY A.키
테이블1에 2건, 테이블2에 5건 있으면 테이블1의 키컬럼 값을 그룹화하여 총 2건의 결과가 나옵니다.
테이블2의 컬럼 값은 무작위로 선택되어 나타나며, MIN 또는 MAX 함수로 제어할 수 있습니다.
전체 테이블 row 수 확인
SELECT
table_name,
table_rows
FROM
information_schema.tables
WHERE
table_schema = 'DB명'
AND
table_rows > 0
ORDER BY table_name;
숫자형 캐스팅
SELECT * FROM 테이블명
WHERE 컬럼명 = CAST(#{파라미터명} AS UNSIGNED)
CAST 함수로 파라미터를 숫자 변환 후, 컬럼 값과 일치하면 조회합니다.
특정 컬럼 데이터 순으로 정렬
ORDER BY FIELD (컬럼명, "1순위", "2순위", "3순위")
조건에 따른 값 출력
SELECT
CASE
WHEN 컬럼명='조건1' THEN '값1'
WHEN 컬럼명='조건2' THEN '값2'
ELSE '값3'
END AS '출력컬럼명'
FROM 테이블명
컬럼 내 JSON 값 추출
SELECT
컬럼명 ->> '$."JSON키"', -- JSON 값에서 양 옆의 ""를 제거하고 출력
json_extract(컬럼명, '$.JSON키'), -- JSON 값 그대로 출력
json_value(컬럼명, '$.JSON키') -- JSON 값을 문자열 변환하여 출력
FROM
테이블명
여러 컬럼 데이터 병합
SELECT
CONCAT(컬럼명1, 컬럼명2)
FROM
테이블명
여러 컬럼의 데이터를 이어붙여 하나의 문자열로 반환합니다.
MySQL 페이징
SELECT
*
FROM
테이블명
WHERE
조건
LIMIT 페이지당글수 OFFSET 건너뛸글수
또는
LIMIT 건너뛸글수, 페이지당글수
WITH 조회
WITH 테이블1명 AS (
SELECT 쿼리 1
),
테이블2명 AS (
SELECT 쿼리 2
)
SELECT
*
FROM
테이블1명 AS 약칭1
INNER JOIN
테이블2명 AS 약칭2 ON 약칭1.키 = 약칭2.키
결과가 중복 실행될 수 있는 서브쿼리 테이블 대신 WITH 절을 사용하여 조회하면,
WITH 절 결과를 메모리에 임시 테이블 (CTE) 저장하고 전체 쿼리에서 재사용하므로 간결하고 효율적입니다.
CTE는 쿼리 실행시간 동안 메모리에 유지되기 때문에, 메모리 사용량이 많아질 수 있습니다.
데이터 통계 쿼리
SELECT
t.MBER_ID,
COUNT(t.MBER_ID) AS ditbCnt
FROM
시험지테이블 e
INNER JOIN
과제배포테이블 d
ON e.시험지ID = d.시험지ID
AND e.DEL_YN = 'N'
INNER JOIN
학생배포테이블 t
ON d.과제배포ID = t.과제배포ID
AND d.DEL_YN = 'N'
AND t.DEL_YN = 'N'
WHERE
d.교과서ID = #{교과서ID}
AND d.클래스ID = #{클래스ID}
GROUP BY
t.MBER_ID
학생별 배포된 시험지 수 통계 조회 쿼리 예시입니다.
Leave a comment