티스토리 뷰

MySQL

[1] SQL 코딩테스트 문법 정리

up_one 2025. 1. 5. 20:27

SQL은 데이터베이스 관리 시스템(DBMS)에서 데이터를 조작, 검색하기 위한 표준화된 언어입니다. 특히 데이터베이스에 쿼리(Query)를 보내 원하는 데이터를 가져오거나 삽입할 수 있습니다.

 

1. 조회를 위한 SELECT

SELECT 조회를 원하는 칼럼명 FROM 테이블명

*은 모든 칼럼을 출력하여 조회할 때 사용됩니다.

 

ex) sakila.customer 테이블에서 first_name, last_name 칼럼을 조회

SELECT first_name, last_name FROM sakila.customer;

 

2. SQL 쿼리 적는 순서

 

SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY - LIMIT

 

SQL 실행 순서 : FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY

 

3. 집계함수와 GROUP BY

SELECT 집계함수(칼럼명) FROM 테이블명

집계함수에는 SUM, MAX, MIN, AVG, COUNT, STDDEV, VARIANCE 등이 있습니다.

 

ex) sakila.customer 테이블에서 address_id의 평균 조회

SELECT AVG(address_id) FROM sakila.customer;

 

GROUP BY는 같은 값을 가진 칼럼끼리 그룹을 지어서 조회할 수 있는 문법입니다.

GROUPY BY를 사용하기 위해서는 집계함수를 필수로 사용해야 합니다.

 

ex) sakila.customer 테이블에서 활성 상태(active)가 1 또는 0인 고객의 수를 각각 구하기

SELECT active, COUNT(*) AS total_customer FROM sakila.customer GROUP BY active;

 

GROUP BY에 사용된 칼럼 이외 칼럼은 단독으로 SELECT 절에 사용할 수 없습니다. => GROUP BY에 사용된 단일 행(칼럼)은 단독으로 SELECT 절에 사용할 수 있지만 그 이외의 칼럼은 사용 불가능!

 

ex) 부서별 최대 연봉을 알아볼 때 누가 최대 연봉을 받는지 알아보기 위해 ename 칼럼을 조회하면 에러 발생

 

HAVING 절은 GROUP BY로 그룹화를 한 후 적용할 조건입니다.

 

ex) 각 store_id 별 고객 수가 2명 이상인 store 찾기

SELECT store_id, COUNT(*) AS total_store FROM sakila.customer 
	GROUP BY store_id HAVING COUNT(*)>=2;

 

4. 전체 테이블에서 조건을 적용하는 WHERE

 

ex) Active 상태가 1인 고객만 조회하기

SELECT * FROM sakila.customer WHRE active=1;

 

WHERE 절에는 별칭을 사용할 수 없습니다.

 

WHERE문의 SQL 연산자

  • IN 연산자 : 하나의 조건만 충족해도 조회되는 것 == OR 연산자
  • LIKE : 부분적으로 일치하는 칼럼을 조회할 때 사용

ex) 어떤 문자를 포함한 모든 것을 조회하는 '%'

SELECT * FROM sakila.customer WHERE first_name LIKE '%LEE%';	#이름에 LEE 글자가 포함된 데이터 추출

 

ex) 단일 문자만 조회하는 '_'

SELECT * FROM 테이블명 WHERE LIKE 'TEST_';	#TEST로 시작하고 하나의 글자만 더 있는 데이터 조회

 

  • BETWEEN 연산자 : 특정 값의 범위에 따라 조회할 때 사용
SELECT * FROM sakila.customer WHERE customer_id BETWEEN 2 AND 4;	#customer_id가 2부터 4인 데이터

 

5. 정렬을 위한 ORDER BY

 

ORDER BY DESC는 내림차순, ORDER BY ASC는 오름차순

 

ex) store_id 기준으로 오름차순 정렬하고 그 안에서 last_update 기준으로 내림차순 정렬

SELECT * FROM sakila.customer ORDER BY store_id ASC, last_update DESC;

 

6. 중복 제거를 위한 DISTINCT

 

ex) store_id와 active 칼럼의 고유한 조합 조회

SELECT DISTINCT store_id, active FROM sakila.customer;

 

7. 결과의 개수를 정하는 LIMIT

 

ex) address_id가 가장 높은 데이터 조회

SELECT * FROM sakila.customer ORDER BY address_id DESC LIMIT 1

 

'MySQL' 카테고리의 다른 글

[3] WITH 문 연습  (0) 2025.04.08
[2] 서브쿼리(Subquery)  (0) 2025.01.08
TAG more
글 보관함
최근에 올라온 글