티스토리 뷰
안녕하세요, 끙정입니다.
오늘은 지난 포스팅에 이어 WHERE절 두 번째 시간입니다.
WHERE절과 함께 쓰이는 LIKE, BETWEEN, IN 문법을 알아보겠습니다.
1. LIKE
비교 연산자는 완전히 일치하는 조건식을 표현합니다.
반면에 LIKE 연산자는 패턴으로 부분 문자열을 검색합니다.
예를 들면 성이 김 씨인 사람만 출력하고 싶다, 주소가 마포구인 사람만 출력하고 싶다, 이럴 때 쓰면 편합니다.
LIKE문 뒤에는 다음과 같은 와일드카드를 씁니다.
문자 | 설명 |
% | 복수개의 문자와 대응. %자리에는 임의 개수의 임의 문자가 올 수 있다. |
_ | 하나의 문자와 대응. _자리에 하나의 임의 문자가 올 수 있다. |
[ ] | [ ] 안에 포함된 문자 리스트 중 하나의 문자와 대응한다. |
[^ ] | [^ ] 안에 포함된 문자 리스트에 포함되지 않은 하나의 문자와 대응한다. |
아래와 같이 사용합니다.
/* '천'자가 들어가는 도시를 검색 */
SELECT * FROM tCity WHERE name LIKE '%천%';

다양하게 사용 가능하다.
1-1. ESCAPE
이런 경우가 있습니다. '30%'가 포함된 행을 출력하고 싶은데, 와일드카드 % 와 일치하기 때문에 잘못된 데이터가 출력되는 것입니다. 이럴 때는 ESCAPE 문을 씁니다.
/* # 이스케이프 문자 다음에 오는 와일드 카드를 일반 문자로 취급 */
SELECT * FROM tCity WHERE sale LIKE '%30#%' ESCAPE '#'
ESCAPE 문으로 '#'을 이스케이프 문자로 지정했기 때문에, LIKE 뒤에 오는 와일드카드에서 '#' 뒤에 오는 % 는 일반 문자로 인식합니다. 따라서 '30%'로 끝나는 정보를 모두 출력합니다.
2. BETWEEN
BETWEEN ~ AND 문은 'BETWEEN 최솟값 AND 최댓값' 형식으로 두 값 사이의 범위를 제한합니다.
/* WHERE절 뒤에 BETWEEN 최소값 AND 최대값 으로 범위를 지정해준다. */
SELECT * FROM tCity WHERE popu BETWEEN 50 AND 100;
그런데 여기서 의문이 하나 생깁니다. 어? 이거는 부등호와 AND를 같이 쓰는 것과 동일하지 않나요?
/* popu가 50보다 같거나 크고, 100보다 같거나 작은 행을 출력해주세요. */
/* 위에 있는 BETWEEN 50 AND 100 과 같다. */
SELECT * FROM tCity WHERE popu >= 50 AND popu <= 100;
그러나 부등호는 기계가 해석하기에는 차이가 없겠지만, 인간이 해석하기에는 직관적이지 않고 다소 헷갈릴 수 있습니다.
그러니 간단한 조건을 걸 때는 BETWEEN 문을 쓰는 것이 좋습니다.

다만 BETWEEN 문은 시작과 끝 범위를 항상 이상, 이하의 범위로만 지정할 수 있으며 미만, 초과는 지정할 수 없다는 단점이 있습니다.
또한 BETWEEN은 문자열과 날짜에도 사용할 수 있습니다.
/* 문자열은 사전 순으로 비교한다. */
SELECT * FROM tStaff WHERE name BETWEEN '가' AND '사';
/* 날짜는 날짜 순으로 비교한다. */
SELECT * FROM tStaff WHERE joindate BETWEEN '20150101' AND '20180101';

3. IN
BETWEEN 연산자는 연속된 범위만 검색할 수 있습니다.
불연속적인 임의적인 값 여러 개를 동시에 출력하기는 쉽지 않습니다.
그래서 주로 수치형 변수에 사용됩니다.
그래서 IN 연산자를 씁니다.
IN 연산자는 괄호 안에 콤마로 구분된 값 목록을 통해 값을 찾습니다.
/* IN (필드 값, 필드 값, 필드 값) */
/* 필드 값 개수에는 제한이 없다. */
SELECT * FROM tCity WHERE region IN ('경상', '전라');
/* NOT IN 으로 포함되지 않은 값을 출력하는 것도 가능하다. */
SELECT * FROM tCity WHERE region NOT IN ('경상', '전라');

부분 문자열 여러 개 중 하나에 해당하는지 찾으려면 LIKE와 IN 연산자를 같이 써야 합니다.
그러나 LIKE와 IN을 동시에 사용하면 에러가 뜹니다. SQL은 이러한 경우를 지원하지 않습니다.
/* 아래와 같이 LIKE IN (필드값, 필드값) 은 지원하지 않는다. */
SELECT * FROM tStaff WHERE name LIKE IN ('이%', '안%');
/* LIKE OR LIKE 로 사용해야만 지원이 됩니다. */
SELECT * FROM tStaff WHERE name LIKE '이%' OR name LIKE '안%';

그만 알아보겠습니다.
출처
http://www.yes24.com/Product/Goods/101637633?OzSrank=1
김상형의 SQL 정복 : 소문난 명강의 (무료특별판) - YES24
DBMS에 제약 없이 SQL을 활용한다!핵심 원리를 알려주는 SQL 바이블 DBMS 제품이나 개발툴이 아닌 SQL 언어 그 자체를 배우는 바이블 도서다. 특정 DBMS에 종속적인 사용법보다는 표준화된 데이터 관리
www.yes24.com
'SQL' 카테고리의 다른 글
집계함수를 알아보자 (feat.COUNT, SUM, AVG ...) (0) | 2023.01.26 |
---|---|
효율적으로 출력하는 법을 알아보자 (feat. DISTINCT, ROWNUM, TOP, LIMIT, OFFSET FETCH) (2) | 2023.01.26 |
ORDER BY 에 대해서 알아보자 (0) | 2023.01.26 |
WHERE 절을 알아보자 1편 (feat. NULL, 비교/논리 연산자) (0) | 2023.01.26 |
SELECT 문을 알아보자 / AS, 필드목록, 계산값 출력 (0) | 2022.11.27 |
- Total
- Today
- Yesterday
- sql
- datacenter
- genai
- condenast
- searchgpt
- perplexity
- Intel
- Apple
- apple intelligence
- ai pc
- IDC
- galaxyai
- aitv
- 액침냉각
- sb1047
- Amazon
- Samsung
- SSI
- Nvidia
- OpenAI
- Meta
- alexa
- ChatGPT
- aichip
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |