[DB SQL] Select문 : 데이터 읽기
- DataBase/SQL
- 2021. 8. 23.
반응형
SELECT문은 데이터베이스(DB) 테이블의 데이터를 읽어 출력하는데, 이 동작을 조회라고 합니다. 테이블을 조회하는 것은 가장 기본적인 동작이며, SELECT 문은 모든 SQL 명령 중 사용 빈도가 압도적으로 가장 높습니다.
1. SELECT (조회)
1) 기본 형태
-- 테이블에서 필드목록 조회
SELECT 필드목록 FROM 테이블
2) 예시
-- tCity라는 테이블에서 모든 필드(*) 조회
SELECT * FROM tCity;
-- tCity라는 테이블에서 name, popu 컬럼 조회
SELECT name, popu FROM tCity;
2. WHERE (조건문)
1) 기본 형태
-- 테이블에서 조건에 맞는 경우에 대해, 필드목록 조회
SELECT 필드목록 FROM 테이블 WHERE 조건
2) 예시
-- 아래 모든 예시는 tCity 테이블 사용
-- area(면적)이 1000 초과인 경우, 모든 컬럼(필드) 출력
SELECT * FROM tCity WHERE area > 1000;
-- area(면적)이 1000 초과인 경우, name과 area 컬럼(필드) 출력
SELECT name, area FROM tCity WHERE area > 1000;
-- name(이름)이 '서울'인 경우, 모든 컬럼 출력
SELECT * FROM tCity WHERE name = '서울';
-- name(이름)이 '서울'이 아닌 경우, 모든 컬럼 출력
-- (아래 두 쿼리문은 동치 NOT 연산자 사용 가능)
SELECT * FROM tCity WHERE name != '서울';
SELECT * FROM tCity WHERE NOT(name = '서울');
-- namee이 '서울'이면서, popu(인구)가 100이상 이거나 area(면적)이 700이상인 경우, 모든 컬럼 출력
-- (AND, OR 연산자는 괄호와 함께 사용하여 우선순위를 줄 수 있습니다.)
SELECT * FROM tCity WHERE name = '서울' AND (popu >= 100 OR area >= 700);
-- popu(인구)값이 아예 없는 경우(NULL), 모든 컬럼 출력
-- (NULL은 아예 비어있는 값을 의미하며, IS 연산자로 판단할 수 있습니다.)
SELECT * FROM tCity WHERE popu IS NULL;
3. LIKE : 부분 문자열 검색
1) 기본 형태
-- 테이블에서 필드에 '와일드카드 포함 문자'가 있는 경우에 대해, 필드목록 조회
-- (LIKE는 WHERE절과 함께 쓰입니다.)
SELECT 필드목록 FROM 테이블 WHERE 필드 LIKE '와일드카드 포함 문자'
* 와일드 카드란?
문자의 패턴을 의미합니다.
와일드 카드 문자 | 설명 |
% | 임의의 복수개의 문자와 대응합니다. 도스의 *와 동일한 의미입니다. |
_ | 임의의 하나의 문자와 대응합니다. 도스의 ?와 동일한 의미입니다. |
[ ] | [ ] 안에 포함된 문자들 중 하나의 문자와 대응하는 경우. |
[^ ] | [^ ] 안에 포함된 문자들에 포함되지 않는 경우. |
2) 예시
-- 아래 예시 역시 모두 tCity 테이블을 사용합니다.
-- name(이름) 컬럼에 '서'가 들어가는 경우, 모든 컬럼 출력
SELECT * FROM tCity WHERE name LIKE '%서%'
-- name(이름) 컬럼이 '서'로 시작하는 경우, 모든 컬럼 출력
SELECT * FROM tCity WHERE name LIKE '서%'
-- name(이름) 컬럼이 '서'로 시작하고, 2글자인 경우, 모든 컬럼 출력
SELECT * FROM tCity WHERE name LIKE '서_'
-- name(이름) 컬럼이 '서'로 끝나는 경우, 모든 컬럼 출력
SELECT * FROM tCity WHERE name LIKE '%서'
-- name(이름) 컬럼에 '서'가 포함되지 않는 경우, 모든 컬럼 출력
-- (NOT 연산자 사용 가능합니다.)
SELECT * FROM tCity WHERE name NOT LIKE '%서%'
-- name(이름) 컬럼에 a~z가 포함되는 경우, 모든 컬럼 출력
SELECT * FROM tCity WHERE name LIKE '[a-z]'
-- name(이름) 컬럼에 a~z가 포함되지 않는 경우, 모든 컬럼 출력
SELECT * FROM tCity WHERE name LIKE '[^a-z]'
4. BETWEEN : ~이상 ~이하 (연속 범위 ex - 1 이상 5 이하)
1) 기본 형태
-- 테이블에서 필드가 A이상 B이하 인 경우에 대해, 필드목록 조회
-- (BETWEEN 최소값 AND 최대값은 WHERE절과 함께 쓰입니다.)
SELECT 필드목록 FROM 테이블 WHERE 필드 BETWEEN A AND B;
2) 예시
-- 아래 역시 tCity 테이블 사용
-- popu(인구수)가 50 이상 100 이하인 경우, 모든 컬럼 출력
SELECT * FROM tCity WHERE popu BETWEEN 50 AND 100;
-- name(도시이름)에 대해 사전 순으로 봤을 때, '가'로 시작하여, '서'까지 있는 경우이고,
-- popu(인구수)가 50 이상 100 이하인 경우, name 컬럼 출력
-- (BETWEEN ~ AND ~는, 문자열에 대해선 사전순이고, 날짜도 가능합니다.)
SELECT name FROM tCity WHERE (name BETWEEN '가' AND '서') AND (popu BETWEEN 50 AND 100);
5. IN : 리스트에 하나라도 포함되는 경우 (불연속적인 값. ex - ['a', 'b', 'c'])
1) 기본 형태
-- 테이블에서 필드가 ('리','스','트')에 포함되는 경우, 필드목록 조회
-- (IN 연산자는 WHERE절과 함께 쓰입니다.)
SELECT 필드목록 FROM 테이블 WHERE 필드 IN ('리','스','트')
2) 예시
-- 아래 역시 tCity 테이블 사용
-- name(도시이름)이 '서울' 이나 '대구'에 속하는 경우, 모든 필드 출력
SELECT * FROM tCity WHERE name IN ('서울','대구');
-- name(도시이름)이 '서울', '대구', '부산'에 속하지 않는 경우, 모든 필드 출력
SELECT * FROM tCity WHERE name NOT IN ('서울','대구','부산');
Reference
내용) 김상형, 김상형의 SQL 정복 Chapter 4 (104p - 140p)
반응형
'DataBase > SQL' 카테고리의 다른 글
[DB] 이벤트 설정, 생성, 삭제 (0) | 2022.04.29 |
---|---|
[DB SQL] 중복제거 (DISTINCT) (0) | 2021.08.25 |
[DB SQL] 정렬 (ORDER BY) (0) | 2021.08.24 |