Developer's Development

3.1.10 [DB] SELECT 본문

프로그래밍과 데이터 기초/DB

3.1.10 [DB] SELECT

mylee 2025. 7. 8. 21:49
SELECT

 

MySQL의 가장 기본적인 명령어로, 특정 테이블에서 원하는 데이터를 조회해서 가져오는 데 사용된다.

-- 단일 컬럼 조회
SELECT menu_name FROM tbl_menu;
  
-- 다중 컬럼 조회
SELECT menu_code, menu_name, menu_price, category_code FROM tbl_menu;

-- 전체 컬럼 조회
SELECT * FROM tbl_menu;

 

 

WHERE

 

특정 조건에 맞는 레코드만을 선택하는 데 사용되며, 다양한 방법으로 조건을 설정할 수 있다.

 

1) 비교 연산자: 같음(=), 같지 않음(!=, <>)

2) AND

3) OR

4) BETWEEN

5) LIKE

6) IN

7) IS (NOT) NULL

 

 

ORDER BY

 

SELECT문과 함께 사용되며, 결과 집합을 특정 열이나 열들의 값에 따라 정렬하는 데 사용한다.

오름차순(기본, ASC), 내림차순(DESC)

-- 다중 조건 정렬
SELECT menu_code, menu_name, menu_price
  FROM tbl_menu
ORDER BY menu_price DESC, menu_name;

-- 컬럼의 연산 결과로 정렬
SELECT menu_code, menu_name, menu_price, menu_code * menu_price
  FROM tbl_menu
ORDER BY menu_code * menu_price;

-- 별칭을 사용한 정렬
SELECT menu_code, menu_name, menu_price, menu_code * menu_price as '연산결과'
  FROM tbl_menu
ORDER BY '연산결과';

-- 오름차순 정렬 시 기본적으로 (default) NULL이 맨처음
-- IS NULL을 붙이면 NULL을 맨끝으로 보냄 (IS NULL ASC) : ASC 생략 가능
SELECT category_code, category_name, ref_category_code
  FROM tbl_category
ORDER BY ref_category_code IS NULL;

-- 내림차순 정렬 시 기본적으로 (default) NULL이 맨끝
-- IS NULL을 붙이면 NULL을 맨처음으로 보냄 (IS NULL DESC) : DESC 생략 불가
SELECT category_code, category_name, ref_category_code
  FROM tbl_category
ORDER BY ref_category_code IS NULL DESC, ref_category_code DESC;

 

 

DISTINCT

 

중복된 값을 제거하는 데 사용된다. 컬럼에 있는 컬럼값들의 종류를 쉽게 파악할 수 있다.

-- 단일 컬럼 DISTINCT
SELECT DISTINCT category_code
  FROM tbl_menu
ORDER BY category_code;

-- 단일 컬럼 DISTINCT with NULL
SELECT DISTINCT ref_category_code
  FROM tbl_category;
  
-- 다중 컬럼 DISTINCT
SELECT DISTINCT category_code, orderable_status
  FROM tbl_menu
ORDER BY category_code, orderable_status;

 

 

LIMIT

 

SELECT문의 결과 집합에서 반환할 행의 수를 제한하는 데 사용된다.

offset: 시작할 행의 번호(인덱스 체계), row_count: 이후 행부터 반환 받을 행의 개

SELECT
    select_list
FROM
    table_name
LIMIT [offset,] row_count;
-- row count = 3
SELECT menu_code, menu_name, menu_price
  FROM tbl_menu
ORDER BY menu_price DESC
LIMIT 3;

-- offset = 2, row count = 5
SELECT menu_code, menu_name, menu_price
  FROM tbl_menu
ORDER BY menu_price DESC
LIMIT 2, 5;

 

 

GROUPING (GROUP BY)

 

GROUP BY절은 결과 집합을 특정 열의 값에 따라 그룹화 하는 데 사용된다.

HAVING은 GROUP BY 절과 함께 사용해야 하며, 그룹에 대한 조건을 적용하는 데 사용된다.

-- 다중 컬럼 GROUP BY
SELECT category_code, menu_price, COUNT(*)
  FROM tbl_menu
GROUP BY category_code, menu_price;

# HAVING
SELECT category_code, COUNT(*)
  FROM tbl_menu
GROUP BY category_code
HAVING category_code BETWEEN 5 AND 8;

# ROLLUP
-- 컬럼 한 개를 활용해 GROUP BY 후 ROLLUP -> 총계(합계)
SELECT category_code, SUM(menu_price)
  FROM tbl_menu
GROUP BY category_code
WITH ROLLUP;

-- 컬럼 두 개를 활용해 GROPU BY 후 ROLLUP -> 중계 + 총계
-- 먼저 나온 컬럼의 총합을 구하고, 이후에 나오는 컬럼의 총합까지 구하는 방식
SELECT category_code, menu_price, COUNT(*)
  FROM tbl_menu
GROUP BY category_code, menu_price
WITH ROLLUP;

'프로그래밍과 데이터 기초 > DB' 카테고리의 다른 글

3.1.13 [Python] MySQL 연동  (0) 2025.07.08
3.1.12 [DB] JOIN, SUBQUERY  (1) 2025.07.08
3.1.11 [DB] DML  (0) 2025.07.08
3.1.9 [DB] 데이터 모델링  (3) 2025.07.07
3.1.8 [DB] 데이터베이스  (2) 2025.07.06