본문 바로가기
IT/SQL 기초강좌 (PostgreSQL)

7강 SQL이 뭐지? WHERE 절

by DoitSQL 2022. 12. 13.
728x90

안녕하세요.

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 문은 자습 많이 해보시고

 

숙달하시길 바랍니다.

 

다음 시간에 만나요~~

 

 

 

 

 

 

 

 

728x90

댓글