본문 바로가기

SQL/SQLD (개발자)

2-1. SQL 기본_(5)WHERE 절

제5절 WHERE 절

 

1. WHERE 조건절 개요
  - SELECT 과 FROM 절에서 자료를 제한할 때 사용
  - FTS(Full Table Scan): WHERE 조건 없이 테이블 전체를 추출하는 것

# WHERE절의 기본 구조
# SELECT와 FROM이 나온 다음에 사용한다.

SELECT 칼럼명
FROM 테이블명
WHERE 조건식 ;

  - WHERE 절에 사용할 수 있는 조건

  가. 칼럼(Column)명 (보통 조건식의 좌측에 위치)
  나. 비교 연산자
  다. 문자, 숫자, 표현식 (보통 조건식의 우측에 위치)
  라. 비교 칼럼명 (JOIN 사용시)

 

# Invoice라는 테이블 조회하기

SELECT InvoiceId, InvoiceDate, BillingCity, BillingCountry, Total
FROM Invoice
WHERE InvoiceId < 10

 

 

2. 연산자의 종류

  - 비교 연산자(부정 비교 연산자), SQL 연산자(부정 SQL 연산자), 논리 연산자,  비교 연산자

  - 연산자 계산 우선순위

연산자 우선순위 설명
1 괄호 ( )
2 NOT 연산자
3 비교 연산자, SQL비교 연산자
4 AND
5 OR

 

3. 비교 연산자

 = , > , >= , < , <=

 

4. SQL 연산자

BETWEEN 값1 AND 값2  # 값1 과 값2 사이의 데이터 추출
IN (list)  # 리스트에 값 중에 포함되면 추출
LIKE '문자열값'  #'문자열값' 이라는 값과 같으면 추출
IS NULL  # NULL만 추출


# LIKE 함수의 와일드카드

LIKE '%과자%'  # '~과자~'를 포함하면 모두 추출  ex) 초코과자, 과자세트, 초코과자세트
LIKE '%과자'   # 맨뒤에 '~과자'가 포함하면 모두 추출  ex) 초코과자
LIKE '과자%'   # 맨앞에 '과자~'가 포함하면 모두 추출  ex) 과자세트
LIKE '_과자_'  # '과자' 앞뒤로 _의 갯수만큼 문자만 들어가는 것 추출 ex) 큰과자1
LIKE '%과자_'  # %과 _ 같이 사용 가능 ex) 초코과자1
# SQL 연산자 사용한 쿼리 예시

SELECT InvoiceId, InvoiceDate, BillingCity, BillingCountry, Total
FROM Invoice
WHERE InvoiceDate BETWEEN '2007-01-01' AND '2007-03-31' #날짜조건
AND BillingCountry IN ('USA','France') #list에 포함되는 값
AND BillingCity LIKE '%s%' #'s'가 포함된 값
AND Total IS NOT NULL #Total이 NULL이 아닌 값

 

 

5. 논리 연산자

AND  # 이전 조건을 충족해야 됨
OR   # 이전 조건 중 하나만 충족되도 됨
NOT  # 뒤에 오는 조건에 반대되는 결과

# 처리순서
( ) , NOT , AND , OR

 

# OR 연산자를 사용할 때는 조건 범위에 맞춰 괄호( )를 사용해 줘야 한다.

SELECT InvoiceId, InvoiceDate, BillingCity, BillingCountry, Total
FROM Invoice
WHERE InvoiceDate BETWEEN '2007-01-01' AND '2007-03-31' #날짜조건
AND (BillingCountry IN ('USA','France') OR BillingCountry ='Germany') #OR 사용

 

6. 부정 연산자

# 부정 논리 연산자 종류 (= 같이 않다.)
!=
^=
<>
NOT 컬럼1 =

# 부정 SQL 연산자 종류
NOT BETWEEN 값1 AND 값2  # 값1 과 값2 사이에 없는 값
NOT IN (list)  # list에 없는 값
IS NOT NULL   # NULL이 아닌 값

 

# 부정 연산자 사용하기

SELECT InvoiceId, InvoiceDate, BillingCity, BillingCountry, Total
FROM Invoice
WHERE InvoiceId BETWEEN 1 AND 30  # InvoiceId가 1에서 30사이 값
AND InvoiceDate NOT BETWEEN '2007-01-01' AND '2007-03-31' #해당 날짜가 아닌 값
AND BillingCountry NOT IN ('USA','France') #USA와 France가 아닌 값
AND BillingCountry != 'Norway' #Norway가 아닌 값
AND Total IS NOT NULL

 

 

7. ROWNUM, TOP 사용

# 추출되는 ROW(행) 수 조절

# TOP 사용
SELECT TOP 10 컬럼1  
FROM 테이블명;

# LIMIT 사용
SELECT 컬럼1
FROM 테이블명
LIMIT 10;