카테고리 없음

[SQL] SQL 기본 문법 - Select

Cocori_ 2024. 6. 17. 17:47

기본 문법

Select 명령문의 기본 문법은 다음과 같다.

SELECT 속성명1, 속성명2
  FROM 테이블 명1, ...
[WHERE 조건]
[GROUP BY 속성명1, ...]
[HAVING 그룹 조건]
[ORDER BY 속성 [ASC | DESC]];

 

대괄호 ( [ ] ) 쳐진 것은 옵션으로 꼭 들어갈 필요는 없는 문법들이다.

 

SELECT, FROM 절

Select절은 검색하고자 하는 속성명과 계산식이 들어간다.

From절에는 검색에 사용할 테이블 명이 들어간다.

-- SELECT '속성명' FROM '테이블명'
SELECT student_number, name FROM student;

-- 속성에 *을 넣을 경우 테이블에 있는 모든 컬럼이 보여진다. 
SELECT * FROM student;

-- SELECT '속성명'뒤에 AS 새로운 별칭을 넣을 경우, 새로운 별칭이 적용된 컬럼이 보여진다.
SELECT student_number AS 학번, name AS 이름
FROM student;

-- 2개 이상의 테이블을 사용할 경우, 테이블 명.속성 명으로 표현한다.
SELECT student.name, teacher.name
FROM student, teacher

 

WHERE 절

Where절에는 조건문이 사용된다.

조건문의 결과 값이 참인 데이터를 추출하여, 최종적으로 우리가 원하는 조건을 가진 데이터를 검색 할 수 있게 해준다.

 

Where에서 사용할 수 있는 연산자는 다음과 같다.

연산자 사용법 설명
= A = B A와 B가 같을 경우 True
> A > B A가 B보다 큰 경우 True
< A < B B가 A보다 큰 경우 True
>= A >= B A가 B보다 크거나 같은 경우 True
<= A <= B B가 A보다 크거나 같은 경우 True
<> A <> B A와 B가 다른 값일 경우 True
BETWEEN 속성 명 BETWEEN A AND B 데이터가 A와 B사이에 있는 값인 경우 True
LIKE 속성 명 LIKE %'값' / LIKE _'값'
속성 명 LIKE '값'% / LIKE '값'_
문자열에 '값'이 들어간 경우 True
_ : 문자열 수 제한 / % : 문자열 수 제한 X
IN 속성명 IN( 데이터1, 데이터2, ... ) 괄호 안에 들어간 데이터 중 하나일 경우 True
NOT NOT 조건문 조건문 결과가 False인 경우 True
IS NULL 속성명 IS NULL 데이터가 NULL인 경우 True

 

-- 성적이 A 이상인 학생만 조회
SELECT * FROM student
	WHERE grade >= 'A'
    
-- 성적이 A ~ C사이인 학생만 조회
SELECT * FROM student
	WHERE grade BETWEEN 'A' AND 'C'
    
-- 이름이 '우'로 끝나는 학생만 조회
SELECT * FROM student
	WHERE name LIKE '%우'
    
-- 이름 중에 '건우', '재균', '한솔'이 들어간 경우만 조회
SELECT * FROM student
	WHERE name IN ('건우', '재균', '한솔')

 

GROUP BY 절

속성값이 같은 데이터를 그룹으로 분류하고자 할 때 사용된다.

SUM, AVG, COUNT 등과 같은 집계 함수를 통해, 속성 값이 같은 데이터끼리 추가적인 연산을 진행할 수 있다.  

-- 같은 반 학생들의 평균을 구한다.

SELECT AVG(score) AS 평균
	FROM student
    GROUP BY class

 

HAVING 절

GROUP BY로 묶은 그룹에 대한 조건을 추가할 수 있다.

-- 시험을 치룬 학생들(성적이 NULL이 아닌 학생)의 평균을 구한다.

SELECT AVG(score) AS 평균
	FROM student
    GROUP BY class
    HAVING score IS NOT NULL

 

ORDER BY 절

속성 값을 기준으로 정렬을 하고자 할 때 사용된다.

AS '기준'문을 통해 오름차순이나 내림차순으로 정렬할 수 있다. 

-- 생일이 빠른 순서대로 정렬
SELECT *
	FROM student
    ORDER BY birthday AS ASC
    
-- 생일이 느린 순서대로 정렬
SELECT *
	FROM student
    ORDER BY birthday AS DESC

-- ASC, DESC는 생략이 가능하다. (이 경우 오름차순으로 정렬)
SELECT *
	FROM student
    ORDER BY birthday