02. 비교연산자, 논리연산자 / LIKE, IN, BETWEEN, IS NULL
실제로 데이터를 가져올 때 컬럼 속의 모든 데이터를 볼 일은 자주 없다.
어느 정도 조건을 만족하는 데이터를 선택적으로 불러와야 하는 경우가 많다.
ex. 특정 조건이 nn번 만족되는 데이터를 가져오기
특정 이름을 가진 데이터를 가져오기, "특정 수치 이상"인 "특정 범주"의 데이터 등등...
!! 이 때 필요한 것이 WHERE 절이다 !! 실습링크
>SELECT *
FROM Customers
WHERE Country = 'Germany';
>> Customers 테이블에서 Country 컬럼이 'Germany'값을 가지는 데이터만 가지고 와라.
비교연산자는 주어진 좌우 값을 비교하는 연산자이다.
>> =, <>, >=, <=, >, < / ex. CustomerID < 50 을 추가할 경우, 고객번호가 50번 미만인 데이터만 불러오게 된다.
숫자뿐만 아니라 문자로도 비교가 가능한가?
>SELECT *
FROM Customers
WHERE CustomerName < "B";
>> 문자 B 이전에 오는 데이터들.
CustomerName이 A로 시작하는 모든 데이터를 가지고 와라.
조건을 결합하고 싶을 때는?
>SELECT *
FROM Customers
WHERE CustomerName "B" AND Country = 'Germany';
>> CustomerName이 A로 시작하고 + Country 컬럼이 Germany인 모든 데이터를 가지고 와라.
논리연산자는 참/거짓 두 가지를 가지고 비교하는 연산자이다.
>> AND ,OR
IN : 결과에 포함시키고자 하는 값 목록을 지정할 수 있는 논리 연산자
>SELECT *
FROM Customers
WHERE Country IN ('Germany', 'France'); = WHERE Country = 'Germany' OR Country = 'France'
>> Country라는 컬럼에 들어있는 값이 'Germany'인 행과 'France'인 행을 모두 가지고 와라.
데이터 유형에 관계없이 목록의 값은 쉼표로 구분한다.
BETWEEN : 특정 범위 내의 행만 선택할 수 있는 논리 연산자
>SELECT *
FROM Customers
WHERE CustomerID BETWEEN 3 AND 5; = WHERE CustomerID >=3 AND CustomerID <=5
>> CustomerID라는 컬럼에 들어있는 값이 3~5인 행들을 모두 가지고 와라.
AND 연산자와 쌍을 이루며 시작값과 끝값을 포함해야 한다.
숫자뿐만 아니라 BETWEEN 'A' AND 'D' 처럼 텍스트, 날짜(0000-00-00)도 가능!
-
LIKE : WHERE절 안에서 문자열의 일부분을 비교하는 '부분 검색'
>SELECT *
FROM Customers
WHERE Country LIKE 'Br%';
>> Country라는 컬럼에 들어있는 값 중 'Br'로 시작하는 행을 가지고 와라.
문자열 비교 연산자를 사용하는 것처럼 정확하게 일치하지 않아도 사용이 가능하다.
%(와일드카드) : 어떤 것이 들어가도 상관 없다는 뜻, 앞 뒤로 넣어도 가능.
_(언더바) : 어떤 것이 들어가도 상관 없지만, 위치와 문자의 수를 정해준다.
\(Escape, Backslash) : 예약어가 포함된 텍스트를 검색하도록 해준다. 예약어 탈출!!!(MySQL 기준)
ex. '__\%', '%\_' 등등.. ***Escape는 데이터베이스 종류마다 다르다! 주의!***
* LIKE 와 =비교연산자
가지고 오고 싶은 데이터가 명확하다면 = 비교연산자를 사용하는 것이 훨씬 빠르다.
큰 데이터를 다루게 되면 속도에서 차이가 난다.
실제 데이터를 다루다 보면 테이블이나 셀 안에 Null값(빈 값)이 있는 경우가 발생한다.
IS NULL : 테이블 내에 입력되지 않은 데이터를 검색
>SELECT *
FROM Customers
WHERE CustomerID IS NULL
>> CustomerID가 빈 값인 행을 가지고 온다.
NULL = NaN(Not a Number) = 숫자도 아니고 문자도 아니고 아무것도 아니다. 비어 있다. (0 아님)
반대로 NULL값이 아닌 행을 검색할 때는 IS NOT NULL을 사용한다.
Your result cannot contain duplicates = 중복되는 게 없어야 한다.
DISTINCT : 중복값을 제외해 주는 명령어. select 뒤에 붙인다.
특정 문자를 가지지 않는다는 조건을 위해서? = NOT LIKE
참고
stackoverflow.com/questions/1865353/combining-like-and-in-for-sql-server
'기초 > SQL' 카테고리의 다른 글
04. 보고 싶은 데이터 요약하기 / 집계함수, GROUP BY (0) | 2020.12.29 |
---|---|
03. ORDER BY, 문자열 자르기 + 주석 처리 (0) | 2020.12.20 |
01. SELECT/FROM/LIMIT (0) | 2020.12.15 |