Search

3-6. 특수 조건자

BETWEEN

BETWEEN 조건은 이상(>=)과 이하(<=) 조건을 동시에 처리할 수 있는 조건자다. BETWEEN 뒤에는 '시작 조건값 AND 종료 조건값'과 같이 두 개의 조건 값을 줄 수 있다. BETWEEN과 AND는 항상 쌍으로 사용된다. BETWEEN의 AND는 WHERE 절에서 조건을 연결하는 AND와는 별개다. 아래 예제를 살펴보자. Item(상품) 테이블에서 ItemId가 'A' 이상이면서 'C' 이하인 데이터를 조회하고 있다.
-- [SQL-3-6-1] SELECT ItemId ,ItemNm ,ItemCat FROM startdb.Item WHERE ItemId BETWEEN 'A' AND 'C'; ItemId ItemNm ItemCat ------ ------------------- ------- AMB Americano(B) COF AMR Americano(R) COF BGLR Bagel(R) BKR BMFR Blueberry Muffin(R) BKR
SQL
복사
위 SQL의 BETWEEN 조건은 아래와 같이 같이 이상(>=) 조건과 이하(<=) 조건 두개를 사용한 것과 같다.
-- [SQL-3-6-2] SELECT ItemId ,ItemNm ,ItemCat FROM startdb.Item WHERE ItemId >= 'A' AND ItemId <= 'C'; ItemId ItemNm ItemCat ------ ------------------- ------- AMB Americano(B) COF AMR Americano(R) COF BGLR Bagel(R) BKR BMFR Blueberry Muffin(R) BKR
SQL
복사

LIKE

LIKE는 조건값의 일부가 포함된 데이터를 검색하기 위해 사용한다. LIKE는 문자형 데이터에만 사용할 수 있다. LIKE를 사용할때는 아래의 특수문자를 사용해 와일드카드(대체문자)로 사용한다.
%: 글자 수 상관 없이 아무 문자를 의미
_(Under Bar): 한 글자의 아무 문자를 의미
아래는 상품명(ItemNm)이 'Cafe'로 시작하는 데이터를 조회하는 SQL이다.
-- [SQL-3-6-3] SELECT ItemId ,ItemNm ,ItemCat FROM startdb.Item WHERE ItemNm LIKE 'Cafe%'; ItemId ItemNm ItemCat ------ ------------- ------- CLB Cafe Latte(B) COF CLR Cafe Latte(R) COF
SQL
복사
반대로 %를 앞쪽에 놓고 뒤에 값을 사용하면, 입력한 값으로 끝나는 데이터를 검색할 수 있다. 아래는 상품명이 '(B)'로 끝나는 데이터를 조회하고 있다.
-- [SQL-3-6-4] SELECT ItemId ,ItemNm ,ItemCat FROM startdb.Item WHERE ItemNm LIKE '%(B)'; ItemId ItemNm ItemCat ------ ------------------ ------- AMB Americano(B) COF CLB Cafe Latte(B) COF HCHB Hot Chocolate(B) BEV IAMB Iced Americano(B) COF ICLB Iced Cafe Latte(B) COF
SQL
복사
%를 중간에 사용하면 시작 문자와 끝 문자가 일치하는 데이터를 검색할 수 있다. ’Iced'로 시작하면서 끝에는 '(B)'로 끝나는 상품명을 검색해보자.
-- [SQL-3-6-5] SELECT ItemId ,ItemNm ,ItemCat FROM startdb.Item WHERE ItemNm LIKE 'Iced%(B)'; ItemId ItemNm ItemCat ------ ------------------ ------- IAMB Iced Americano(B) COF ICLB Iced Cafe Latte(B) COF
SQL
복사
'_'는 한 글자의 아무 문자를 의미한다.
-- [SQL-3-6-6] SELECT ItemId ,ItemNm ,ItemCat FROM startdb.Item WHERE ItemNm LIKE 'Americano(_)'; ItemId ItemNm ItemCat ------ ------------ ------- AMB Americano(B) COF AMR Americano(R) COF
SQL
복사
LIKE 조건 앞에 NOT을 붙여 부정 조건으로 사용할 수 있다. 아래는 ItemCat(상품종류)가 'COF'(커피) 중에서 ItemNm(상품명)에 Latte가 포함되지 "않은" 데이터를 조회하는 SQL이다.
-- [SQL-3-6-7] SELECT ItemId ,ItemNm ,ItemCat FROM startdb.Item WHERE ItemCat = 'COF' AND ItemNm NOT LIKE '%Latte%'; ItemId ItemNm ItemCat ------ ------------------ ------- AMB Americano(B) COF AMR Americano(R) COF EINR Einspanner(R) COF FLTR Flat White(R) COF IAMB Iced Americano(B) COF IAMR Iced Americano(R) COF IEINR Iced Einspanner(R) COF IFLTR Iced Flat White(R) COF
SQL
복사

IN

IN을 사용하면 하나의 컬럼에 여러 조건 값을 줄 수 있다. 아래와 같이 괄호안에 필요한 조건 값을 콤마로 구분해 여러개 사용하면 된다.
-- [SQL-3-6-8] SELECT ItemId ,ItemNm ,ItemCat FROM startdb.Item WHERE ItemId IN ('AMB','IAMB','BGLR'); ItemId ItemNm ItemCat ------ ----------------- ------- AMB Americano(B) COF BGLR Bagel(R) BKR IAMB Iced Americano(B) COF
SQL
복사
위와 같은 IN을 사용한 SQL은 아래와 같이 OR 연결자를 여러개 사용한 SQL과 같다. SQL의 가독성을 위해 OR 보다는 IN 조건을 권장한다.
-- [SQL-3-6-9] SELECT ItemId ,ItemNm ,ItemCat FROM startdb.Item WHERE (ItemId = 'AMB' OR ItemId = 'IAMB' OR ItemId = 'BGLR'); ItemId ItemNm ItemCat ------ ----------------- ------- AMB Americano(B) COF BGLR Bagel(R) BKR IAMB Iced Americano(B) COF
SQL
복사
NOT LIKE와 마찬가지로 NOT IN으로 IN 조건을 부정 처리할 수 있다. 아래는 상품종류(ItemCat)가 'COF'(커피)이면서 Hot/Cold구분(HotColdCd)가 'HOT'인 상품 중에, ItemId(상품ID)가 'CLB'와 'CLR'이 아닌 상품만 조회하고 있다.
-- [SQL-3-6-10] SELECT ItemId ,ItemNm,ItemCat, HotColdCd FROM startdb.Item WHERE ItemCat = 'COF' AND HotColdCd = 'HOT' AND ItemId NOT IN ('CLB','CLR'); ItemId ItemNm ItemCat HotColdCd ------ ------------- ------- --------- AMB Americano(B) COF HOT AMR Americano(R) COF HOT EINR Einspanner(R) COF HOT FLTR Flat White(R) COF HOT
SQL
복사
IN을 OR로 변경할 수 있는 것처럼 NOT IN도 NOT과 OR를 혼합한 SQL로 변경할 수 있다. 아래와 같다.
-- [SQL-3-6-11] SELECT ItemId ,ItemNm,ItemCat, HotColdCd FROM startdb.Item WHERE ItemCat = 'COF' AND HotColdCd = 'HOT' AND NOT (ItemId = 'CLB' OR ItemId = 'CLR'); ItemId ItemNm ItemCat HotColdCd ------ ------------- ------- --------- AMB Americano(B) COF HOT AMR Americano(R) COF HOT EINR Einspanner(R) COF HOT FLTR Flat White(R) COF HOT
SQL
복사

BOOSTER QUIZ

BOOSTER QUIZ ERD

BOOSTER QUIZ 3-6-1

상품ID가 BMFR 이상이면서 CLR 이하인 상품을 보여주세요.
대상 테이블: 상품(Item)
조회 조건: ItemId가 BMFR 이상(>=) 이면서 CLR 이하(<=)인 데이터
조회 컬럼: ItemId, ItemNm, ItemCat
ItemId ItemNm ItemCat ------ ------------------- ------- BMFR Blueberry Muffin(R) BKR CITR Yuzu Ade(R) BEV CLB Cafe Latte(B) COF CLR Cafe Latte(R) COF
SQL
복사

BOOSTER QUIZ 3-6-2

뜨거운 상품중에, 명칭이 '(R)'로 끝나는 상품을 보여주세요.
대상 테이블: 상품(Item)
조회 조건: HotColdCd가 HOT이면서 ItemNm이 '(R)'로 끝나는 데이터(LIKE 사용)
조회 컬럼: ItemId, ItemNm, ItemCat
ItemId ItemNm ItemCat HotColdCd ------ ---------------- ------- --------- AMR Americano(R) COF HOT BGLR Bagel(R) BKR HOT CLR Cafe Latte(R) COF HOT EINR Einspanner(R) COF HOT FLTR Flat White(R) COF HOT HCHR Hot Chocolate(R) BEV HOT MACA Macaron(R) BKR HOT
SQL
복사

BOOSTER QUIZ 3-6-3

상품사이즈가 BIG 인 상품중에, 상품카테고리가 COF이거나, BEV이면서, 상품명이 'Iced'로 시작하지 않는 데이터를 보여주세요.
대상 테이블: 상품(Item)
조회 조건: ItemSizeCd가 BIG이고, ItemCat가 COF 또는 BEV 이면서, ItemNm이 'Iced'로 시작하지 않는 데이터
조회 컬럼: ItemId, ItemNm, ItemCat
추가 조건: ItemCat에 대한 조건을 IN 조건자로 해결하시오.
ItemId ItemNm ItemCat ------ ---------------- ------- AMB Americano(B) COF CLB Cafe Latte(B) COF HCHB Hot Chocolate(B) BEV
SQL
복사