[SQLD] SQL 기본 - SELECT, WHERE, GROUP BY, HAVING, ORDER BY 요약

1. SELECT 

SELECT 문은 데이터베이스에서 특정 데이터를 조회할 때 사용되는 가장 기본적이고 중요한 명령어이다.

기본구조

SELECT column1, column2, ...
FROM table_name;

 

column1, column2, ...: 조회하고 싶은 컬럼들을 나열한다.
table_name: 데이터를 조회할 테이블의 이름을 기입한다.

SELECT 사용법

특정 컬럼 조회

학생 테이블의 이름과 성적 컬럼을 조회하는 방법

SELECT 이름, 성적
FROM 학생;

모든 컬럼 조회

테이블의 모든 컬럼을 조회할 때는 별표(*)를 사용한다.

SELECT *
FROM 학생;

중복 제거 (DISTINCT)

DISTINCT 키워드를 사용하여 중복된 값 없이 특정 컬럼을 조회할 수 있다.

SELECT DISTINCT 학년
FROM 학생;

조건부 조회 (With WHERE)

WHERE 절과 함께 사용하여 특정 조건을 만족하는 데이터만 조회할 수 있다.

SELECT 이름, 성적
FROM 학생
WHERE 성적 >= 90;

정렬 조회 (With ORDER BY)

ORDER BY절을 사용하여 조회 결과를 특정 컬럼에 따라 정렬할 수 있다.

SELECT 이름, 성적
FROM 학생
ORDER BY 성적 DESC;

제한된 수의 행 조회

LIMIT 키워드를 사용하여 조회할 데이터의 수를 제한할 수 있다.

SELECT *
FROM 학생
LIMIT 5;

함수와 함께 사용하여 조회

다양한 SQL 함수를 SELECT 문과 함께 사용하여 데이터를 가공할 수 있다.

SELECT AVG(성적) as 평균성적
FROM 학생;

 


 

2. WHERE

WHERE 절은 SELECT, UPDATE, DELETE 등 다양한 SQL 명령어와 함께 사용되어 데이터베이스 내에서 특정 기준에 맞는 데이터를 추출하거나 조작한다.

기본 구조

SELECT column1, column2, ...
FROM table_name
WHERE condition;

 

condition: 특정 조건을 나타낸다. 이 조건이 참(True)인 경우에만 해당 행(row)이 결과에 포함된다.

WHERE 사용법

기본 조건

특정 컬럼이 주어진 값과 같은 행을 찾는다.

SELECT *
FROM 학생
WHERE 이름 = '홍길동';

비교 연산자 사용

>, <, >=, <=, <> (다르다) 등의 비교 연산자를 사용하여 조건을 작성한다.

SELECT 이름, 성적
FROM 학생
WHERE 성적 >= 90;

논리 연산자 사용

AND, OR, NOT 등의 논리 연산자를 사용하여 복합 조건을 지정하여 조건을 작성한다.

SELECT *
FROM 학생
WHERE 성적 >= 90 AND 학년 = 3;

범위 지정

BETWEEN 키워드를 사용하여 특정 범위의 값에 해당하는 행을 찾는 조건을 작성한다.

SELECT *
FROM 학생
WHERE 성적 BETWEEN 80 AND 90;

목록 중 하나에 해당하는지 확인

IN 키워드를 사용하여 주어진 목록 중 하나와 일치하는 행을 찾는 조건을 작성한다.

SELECT *
FROM 학생
WHERE 학년 IN (1, 2);

부분 문자열 검색

LIKE와 와일드카드(%, _)를 사용하여 특정 패턴에 맞는 행을 찾을 수 있다.

SELECT *
FROM 학생
WHERE 이름 LIKE '김%';

NULL 검사

IS NULL 또는 IS NOT NULL을 사용하여 NULL 값을 검사한다.

SELECT *
FROM 학생
WHERE 주소 IS NULL;

 


 

3. GROUP BY

GROUP BY 절은 테이블의 데이터를 특정 기준에 따라 그룹화하는 데 사용된다. 이 기능은 주로 집계 함수(예: COUNT, SUM, AVG, MAX, MIN 등)와 함께 사용되어, 각 그룹에 대한 집계 데이터를 제공한다.

기본구조

SELECT column1, column2, aggregate_function(column3)
FROM table_name
GROUP BY column1, column2;

 

column1, column2: 그룹화할 기준이 되는 컬럼을 지정한다.
aggregate_function(column3): 각 그룹에 대해 수행할 집계 함수를 적용할 컬럼을 지정한다.

GROUP BY 사용법

기본 그룹화

특정 컬럼을 기준으로 데이터를 그룹화하고, 그룹별로 집계 함수를 적용한다. 아래 쿼리는 '학생' 테이블에서 학년별로 학생 수를 세어준다.

SELECT 학년, COUNT(*)
FROM 학생
GROUP BY 학년;

여러 컬럼으로 그룹화

두 개 이상의 컬럼을 기준으로 그룹화할 수 있다. 아래 쿼리는 '학년'과 '성별'을 기준으로 평균 성적을 계산한다.

SELECT 학년, 성별, AVG(성적)
FROM 학생
GROUP BY 학년, 성별;

HAVING 절과 함께 사용

GROUP BY와 함께 HAVING 절을 사용하여 그룹에 대한 특정 조건을 지정할 수 있다. 아래 쿼리는 평균 성적이 80점을 넘는 학년만을 선택한다.

SELECT 학년, AVG(성적)
FROM 학생
GROUP BY 학년
HAVING AVG(성적) > 80;

 


 

4. HAVING

HAVING 절은 GROUP BY와 함께 사용되어 그룹화된 결과에 조건을 적용하는 데 사용된다. WHERE 절과 유사하지만, HAVING은 그룹화된 결과에 대한 조건을 설정하는 데 사용되며, 주로 집계 함수와 함께 쓰인다.

기본 구조

SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1
HAVING condition;

 

aggregate_function(column2): 집계 함수를 적용할 컬럼이다.
condition: 그룹화된 결과에 적용할 조건을 지정한다.

HAVING 사용법

집계 조건 설정

HAVING 절을 사용하여 집계 결과에 대한 특정 조건을 적용한다. 아래 쿼리는 각 학년별 평균 성적이 80점을 넘는 경우에 대한 결과를 보여준다.

SELECT 학년, AVG(성적) AS 평균성적
FROM 학생
GROUP BY 학년
HAVING 평균성적 > 80;

복합 조건 사용

AND, OR 등을 사용하여 복합 조건을 설정할 수 있다. 아래 쿼리는 학생 수가 10명을 초과하고, 2학년 이상인 학년에 대한 결과를 보여준다.

SELECT 학년, COUNT(*) AS 학생수
FROM 학생
GROUP BY 학년
HAVING 학생수 > 10 AND 학년 >= 2;

집계 함수 사용

다양한 집계 함수(COUNT, SUM, AVG, MAX, MIN 등)를 HAVING 절에서 사용할 수 있다. 아래 쿼리는 '학생' 테이블에서 성별로 그룹화한 후, 각 성별 그룹의 학생 수가 5명을 초과하는 경우에 대한 결과를 보여준다.

SELECT 성별, COUNT(*) AS 학생수
FROM 학생
GROUP BY 성별
HAVING COUNT(*) > 5;

 


 

5. ORDER BY

ORDER BY 절은 조회 결과를 특정 컬럼의 값에 따라 정렬하는 데 사용된다. 이를 통해 데이터를 오름차순(ASC) 또는 내림차순(DESC)으로 정렬할 수 있으며, 결과의 가독성과 분석의 용이성을 높일 수 있다.

기본 구조

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;

 

column1, column2, ...: 정렬의 기준이 되는 컬럼.
ASC: 오름차순 정렬 (기본값).
DESC: 내림차순 정렬.

ORDER BY 사용법

단일 컬럼으로 정렬

한 컬럼을 기준으로 결과를 정렬한다. 아래 쿼리는 '학생' 테이블에서 성적을 기준으로 데이터를 내림차순으로 정렬한다.

SELECT 이름, 성적
FROM 학생
ORDER BY 성적 DESC;

여러 컬럼으로 정렬

두 개 이상의 컬럼을 사용하여 정렬 순서를 결정할 수 있다. 아래 쿼리는 먼저 학년으로 오름차순 정렬한 후, 같은 학년 내에서 성적을 기준으로 내림차순으로 정렬한다.

SELECT 이름, 학년, 성적
FROM 학생
ORDER BY 학년 ASC, 성적 DESC;

별칭 사용

SELECT 절에서 별칭을 지정하고, 이를 ORDER BY에서 사용할 수 있다. 아래 쿼리는 성적을 '점수'라는 별칭으로 지정하고, 이를 기준으로 내림차순으로 정렬한다.

SELECT 이름, 성적 AS 점수
FROM 학생
ORDER BY 점수 DESC;