MariaDB | SELECT, WHERE절

2025. 1. 24. 17:42Database/SQL

SELECT

특정 테이블에서 원하는 데이터를 조회해서 가져오는 명령어 

-- 괄호 안 실행순서 
(5) SELECT *, 가져올 컬럼명, 계산식, 함수
(1) FROM 테이블명
(2) WHERE 조건식
(3) GROUP BY 그룹으로 묶을 컬럼명
(4) HAVING 그룹의 조건식
(6) ORDER BY 컬럼명 정렬방식

1. AS (Alias, 별칭)   

SELECT NAME AS '이름' FROM EMPLOYEE;
  • 컬럼명, 계산식, 함수 뒤에 AS '별칭'을 입력 (AS 생략가능)
  • 조회 결과 View에 원래 이름을 대신하여 별칭이 출력되어 가독성이 좋아진다. 

2. DISTINCT 

SELECT DISTINCT 컬럼명 FROM 테이블명;
  • 해당 컬럼의 중복 데이터를 제거하는 키워드
  • DISTINCT는 SELECT절에서 단 한 번만 사용 가능함

3. LIMIT

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

-- LIMIT 반환할 행의 개수 
SELECT * FROM TABLE1 LIMIT 5;  
 
-- LIMIT 시작점, 개수
-- 5번째부터 10개 반환 (첫번째 파라미터는 0 부터 시작)  
SELECT * FROM TABLE1 LIMIT 4, 10;

 

4. ORDER BY 

SELECT price, name, price*num AS '연산결과' FROM table_1

ORDER BY price (ASC); 		-- 오름차순
ORDER BY price DESC; 		-- 내림차순
ORDER BY price DESC, name ASC; 	-- 여러 기준으로 정렬, 앞에 있는 정렬기준이 우선임  
ORDER BY price*num DESC; 	-- 연산 결과 정렬 
ORDER BY 연산결과 DESC; 		-- 별칭으로 정렬할 수도 있음  
ORDER BY -price DESC; 		-- 오름차순+NULL
  • ORDER BY절은 결과 집합을 특정 열이나 열들의 값에 따라 정렬하는 데 사용한다. 
  • - (마이너스 부호) : null을 제외하고 정렬을 반대로 뒤집음
    • ASC : NULL + 오름차순
    • -ASC : NULL + 내림차순
    • DESC : 내림차순 + NULL
    • -DESC : 오름차순 + NULL                        

5. FIELD 함수 

  • 단순 값 사용
    • FIELD(찾으려는 값, 리스트 값1, 리스트 값2, ...)
    • 찾으려는 값이 리스트 안에서 몇 번째 위치에 있는지를 반환
SELECT FIELD(5, 1, 2, 5); -> 3 반환 (인덱스 1부터 시작)
SELECT FIELD(3, 1, 2, 5); -> 0 반환 (존재하지 않음)
  • 컬럼명 사용
    • FIELD(컬럼명, 리스트 값1, 리스트 값2, ..)
    • 컬럼 내의 값이 리스트에서 몇 번째인지 반환한다. 
-- 예시 테이블 fruit
id	name
1	Banana
2	Apple
3	Cherry
4	Orange

-- 1. 단순 사용 
SELECT id, name, FIELD(name, 'Orange', 'Banana') AS rank from fruit;
-- 실행 결과
id	name	rank
1	Banana	2
2	Apple	0
3	Cherry	0
4	Orange	1

-- 2. WHERE절에 사용
SELECT id, name, FIELD(name, 'Orange', 'Banana') AS rank FROM fruit
WHERE FIELD(name, 'Orange', 'Banana')>0
-- 실행 결과
id	name	rank
1	Banana	2
4	Orange	1

-- 3. ORDER BY절에 사용 
SELECT id, name, FIELD(name, 'Orange', 'Banana') AS rank FROM fruit
WHERE FIELD(name, 'Orange', 'Banana')>0
ORDER BY FIELD(name, 'Orange', 'Banana')
-- 실행 결과 
id	name	rank
4	Orange	1
1	Banana	2

 

 

6. GROUP BY

SELECT 열1, 집계함수 -- GROUP BY에서 지정된 열 또는 집계 함수의 결과만 포함가능
FROM 테이블명
GROUP BY 열 -- 데이터를 그룹화할 기준이 되는 열
HAVING 조건; -- 그룹화 결과를 필터링할 조건
  • GROUP BY는 데이터베이스 테이블의 데이터를 특정 열을 기준으로 그룹화하여 요약된 결과를 얻는 데 사용된다.
  • 주로 집계 함수(SUM, AVG, COUNT, MAX, MIN)와 함께 사용된다.
  • 다중 그룹화: 먼저 첫 번째 열로 그룹화 -> 같은 그룹 안에서 두 번째 열을 기준으로 다시 세분화.
  • 함께 쓰는 키워드
    • HAVING: WHERE가 그룹화 이전에 조건을 필터링한다면, HAVING은 그룹화 이후 결과를 필터링
    • WITH ROLLUP각 그룹화된 결과의 소계와 전체 합계를 자동으로 계산해주는 기능. GROUP BY의 열 순서를 기준으로, 점진적으로 그룹별 합계(소계)를 계산한 뒤, 최종적으로 전체 합계를 추가.
  • GROUP BY 예시 
-- 단일 GROUP BY + HAVING, ORDER BY 
SELECT 반, AVG(점수) AS 평균점수
FROM 학생
GROUP BY 반
HAVING AVG(점수) >= 80
ORDER BY 평균점수 DESC;
-- 결과 
반	평균점수
1반	80.5
2반	78.0
3반	90.0

-- 다중 GROUP BY: 지정된 여러 열의 조합을 기준으로 데이터를 그룹화 
SELECT 반, 성별, AVG(점수) AS 평균점수
FROM 학생
GROUP BY 반, 성별;
-- 결과
반	성별	평균점수
1반	남	80.5
1반	여	85.0
2반	남	78.0
2반	여	82.0
3반	남	90.0
3반	여	94.0

-- WITH ROLLUP
SELECT 지역, 제품명, SUM(판매량) AS 총판매량
FROM 판매내역
GROUP BY 지역, 제품명 WITH ROLLUP; 
--결과
지역	제품명	총판매량
서울	노트북	120
서울	스마트폰	200
서울	NULL	320
부산	노트북	30
부산	스마트폰	100
부산	NULL	130
NULL	NULL	450

 


WHERE 절

1. 비교 연산자

  • > , >= , < , <=
  • equal: =
  • not equal: !=, <>

2. IS NULL, IS NOT NULL

WHERE 컬럼명 IS NULL;

 

3. 논리연산자 

  • AND: 두 조건이 모두 참일 때만 결과를 반환한다.
  • OR: 두 조건 중 하나라도 참이면 결과를 반환한다.
  • AND가 OR보다 우선순위가 높다. OR의 우선순위를 높이고 싶다면 소괄호(())를 사용한다.

4. BETWEEN, NOT BETWEEN

-- BETWEEN, 아래 두 쿼리의 결과 동일 
SELECT * FROM TABLE_1
WHERE PRICE BETWEEN 10000 AND 25000;

SELECT * FROM TABLE_1
WHERE PRICE >= 10000 AND price <= 25000;


-- NOT BETWEEN, 아래 두 쿼리의 결과 동일
SELECT * FROM TABLE_1
WHERE PRICE < 10000 OR price > 25000;

SELECT * FROM TABLE_1
WHERE PRICE NOT BETWEEN 10000 AND 25000;

 

5. IN

-- IN, 아래 두 코드 결과 동일 
SELECT * FROM TABLE_1
WHERE MENU_CODE = 1 OR MENU_CODE = 2 OR MENU_CODE = 5;

SELECT * FROM TABLE_1
WHERE MENU_CODE IN (1, 2, 5);

 

6. LIKE, NOT LIKE 

  • _ : 임의의 글자수 1개
  • % : 특정 글자 포함 
  • # : ESCAPE 문자, _와 %를 문자열로 취급
SELECT * FROM TABLE_1
WHERE 컬럼명 LIKE '_A' -- 2글자, A로 끝나는 데이터 
WHERE 컬럼명 LIKE '_A_' -- 3글자, A가 가운데에 있는 데이터
WHERE 컬럼명 LIKE '__A' -- 3글자, A로 끝나는 데이터

SELECT * FROM TABLE_1
WHERE 컬럼명 LIKE 'A%'  -- 글자 수 상관 없고, A로 시작하는 데이터
WHERE 컬럼명 LIKE '%A'  -- 글자 수 상관 없고, A로 끝나는 데이터
WHERE 컬럼명 LIKE '%A%' -- 글자 수 상관 없고, A를 포함하는 데이터