안녕하세요.
7강 시작합니다.
지금까지의 강의에서는 전체 행을 대상으로 SELECT를 수행했습니다.
이번 강의에서는
▶ WHERE 절
에 대해서 알아보겠습니다.
※ 보충 ※
지난 강의에서 행과 열에 대한 개념을 언급하지 않은 것 같습니다.
테이블(table)은 행(row) 및 열(column)로 구성되는 2차원 데이터 배열입니다.
행은 하나 이상의 열이 들어 있는 가로 파트입니다.
열은 하나의 데이터 유형을 가진 데이터 행이 하나 이상 들어 있는 세로 파트입니다.
● 행(row) : 테이블에서 가로 방향의 자료 집합을 의미합니다. 데이터베이스에서는
이것을 레코드(record) 또는 튜플(tuple)로 부릅니다.
테이블에서 모든 행(row)은 같은 열(column) 속성을 가진 같은 구조입니다.
●열(column) : 테이블에서 세로 방향의 자료 집합을 의미합니다.
데이터베이스에서는 이것을 속성(attribute)이라고도 부릅니다.
필드(field)도 같은 의미로 쓰이기도 합니다.
●필드(field) : 열(column)과 같은 의미로 쓰이기도 합니다.
cell이라고 부르기도 합니다.
엄밀히 말하면 행과 열이 교차하는 한 값을 의미합니다.
행(row)에서 특정 열(column)에 해당하는 단일 값 cell을 의미합니다.
1. WHERE 절
테이블의 전체 행에서 WHERE 절에 지정된 조건에 맞는 행만 SELECT 한다.
● 기본구문 ●
SELECT select_list
FROM table_name
WHERE condition
ORDER BY sort_expression
WHERE 절은 FROM 다음에 기술합니다.
쿼리는 WHERE 조건에 맞는 데이터만 반환합니다.
쿼리문의 작동순서는
1) FROM 절에서 테이블을 선택
2) WHERE 조건에 맞는 데이터 선택
3) 선택된 ROW를 SELECT
4) 수집된 ROW를 정렬
순으로 쿼리가 동작합니다.
WHERE 절의 condition에는 연산자를 사용합니다.
● WHERE문에 사용되는 연산자 ●
1. 논리연산자
◈ AND (논리곱)
TRUE AND TRUE -> TRUE
TRUE AND FALSE -> FALSE
TRUE AND NULL -> NULL
FALSE AND FALSE -> FALSE
FALSE AND NULL -> FALSE
NULL AND NULL -> NULL
전체 표현식이 TRUE가 되는 것은 좌변과 우변이 모두 TRUE 인 경우 뿐이다.
또한 TRUE AND NULL이 NULL인데 비해 FALSE AND NULL은 FALSE가 되는 점에 주의한다.
◈ OR (논리합)
TRUE OR TRUE -> TRUE
TRUE OR FALSE -> TRUE
TRUE OR NULL -> TRUE
FALSE OR FALSE -> FALSE
FALSE OR NULL -> NULL
NULL OR NULL -> NULL
좌변과 우변의 적어도 어느 하나가 TRUE 인 경우 전체 표현식이 TRUE이다.
또한 TRUE OR NULL이 TRUE 인 반면 FALSE AND NULL은 NULL이 되는 점에주의한다.
◈ NOT (부정)
NOT TRUE -> FALSE
NOT FALSE -> TRUE
NOT NULL -> NULL
우변이 TRUE이면 FALSE가 되고, 우변이 FALSE이면 TRUE가 된다.
또한 NOT NULL은 NULL이 된다.
2. 비교연산자
< : 왼쪽은 오른쪽보다 작다
> : 왼쪽이 오른쪽보다 크다
<= : 왼쪽은 오른쪽보다 작거나 같다
>= : 왼쪽은 오른쪽보다 크거나 같다
= : 왼쪽과 오른쪽은 같다
<> : 왼쪽과 오른쪽은 같지 않다
!= : 왼쪽과 오른쪽은 같지 않다
3. BETWEEN - 범위 내에 있는지 비교연산자
a BETWEEN x AND y : x 이상 y 이하의 범위에 있다
a NOT BETWEEN x AND y : x 이상 y 이하의 범위에 없다
4. IS NULL, IS NOT NULL - 값이 NULL인지 비교연산자
expression IS NULL : expression이 NULL이다.
expression IS NOT NULL : expression이 NULL이 아니다.
5. LIKE - 패턴매칭 비교연산자
집합에서 어떠한 컬럼의 값이 특정 값과 유사한 패턴을 갖는 집합을 출력하는 연산자
'%' 는 문자 혹은 문자열이 매칭 되었다고 판단한다.
'_'는 한개의 문자가 매칭 되었다고 판단한다.
a LIKE 'b%' : a가 'b'로 시작하는 1 자리이상의 문자열인지 패턴매칭
a LIKE 'ab%' : a가 'ab'로 시작하는 2 자리이상의 문자열인지 패턴매칭
a LIKE 'b_' : a가 'b'로 시작하는 2 자리 문자열인지 패턴매칭
a LIKE 'b__' : a가 'b'로 시작하는 3 자리 문자열인지 패턴매칭
6. SIMILAR TO - 패턴매칭 비교연산자
'abc' SIMILAR TO 'abc' : true
'abc' SIMILAR TO 'a' : false
'abc' SIMILAR TO '%(b|d)%' : true b 또는 d로 시작하니깐 true
'abc' SIMILAR TO '(b|c)%' : false b 또는 c로 시작하지않아 false
Like의 확장 - Like or 여러개를 하나로 표현
name similar to '(a|b|c)%' : name like 'a%' or name like 'b%' or name like 'c%'
dvdrental DB의 customer 테이블의 샘플 데이터를 사용해서 실습예제를 해보겠습니다.
★ 실습 1 ★ first_name = 'Jamie' ( 비교연산자 = )
이름이 'Jamie'인 고객
SELECT
last_name,
first_name
FROM
customer
WHERE
first_name = 'Jamie';
★ 실습 2 ★ AND ( 논리연산자 AND , 비교연산자 = )
이름이 'Jamie' 이고 성이 'Rice'인 고객
SELECT
last_name,
first_name
FROM
customer
WHERE
first_name = 'Jamie' AND
last_name = 'Rice';
★ 실습 3 ★ OR ( 논리연산자 OR , 비교연산자 = )
성이 'Rodriguez' 이거나 이름이 'Adam'
SELECT
first_name,
last_name
FROM
customer
WHERE
last_name = 'Rodriguez' OR
first_name = 'Adam';
★ 실습 4 ★ IN ( 비교연산자 IN )
이름이 'Ann','Anne','Annie' 에 포함되는 고객
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name IN ('Ann','Anne','Annie');
★ 실습 5★ LIKE ( 비교연산자 LIKE )
이름의 첫 3글자가 'Ann'으로 시작하는 고객
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name LIKE 'Ann%';
★ 실습 6 ★ LIKE AND BETWEEN ( 비교연산자 LIKE, BETWEEN )
이름이 ‘A’로 시작하고 이름의 길이가 3 ~ 5 범위에 있는 고객을
이름의 길이 name_length로 정렬하여 결과를 리턴한다.
SELECT
first_name,
LENGTH(first_name) name_length
FROM
customer
WHERE
first_name LIKE 'A%' AND
LENGTH(first_name) BETWEEN 3 AND 5
ORDER BY
name_length;
★ 실습 7 ★ LIKE AND <> ( 비교연산자 LIKE AND <> )
이름의 첫 3글자가 ‘Bra’로 시작하고 성이 'Motley'가 아닌 고객
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name LIKE 'Bra%' AND
last_name <> 'Motley';
★ 실습 8 ★ SIMILAR TO ( 비교연산자 SIMILAR TO )
이름이 ‘A’ 또는 'T'로 시작하고 이름의 길이가 3 ~ 5 범위에 있는 고객을
이름, 이름의 길이 name_length로 정렬하여 결과를 리턴한다.
SELECT
first_name,
LENGTH(first_name) name_length
FROM
customer
WHERE
first_name SIMILAR to '(A|T)%'
AND
LENGTH(first_name) BETWEEN 3 AND 5
ORDER BY
first_name ,
name_length;
실습 예제에서 다루지 못한 WHERE 문은 자습 많이 해보시고
숙달하시길 바랍니다.
다음 시간에 만나요~~
'IT > SQL 기초강좌 (PostgreSQL)' 카테고리의 다른 글
9강 SQL이 뭐지? PostgreSQL : IN에 대해서 (2) | 2022.12.15 |
---|---|
8강 SQL이 뭐지? PostgreSQL LIMIT와 FETCH (3) | 2022.12.14 |
6강 SQL이 뭐지? SELECT DISTINCT 뽀개기 (3) | 2022.12.13 |
5강 SQL이 뭐지? Column Aliases ORDER BY (4) | 2022.12.13 |
4강 SQL이 뭐지? 너와의 첫 만남... 살짝 설렜어... (6) | 2022.12.12 |
댓글