논리 연산자
일단 종류에 대해서..
- ~ 정규표현식에 의한 패턴매칭
- ALL
- AND
- ANY
- BETWEEN
- EXISTS
- ILIKE
- LIKE
- IN
- NOT
- OR
- REGEXP
- REGEXP_LIKE
- SOME
이중에서 실무에서 본 애들위주로 정리
BETWEEN
SELECT name, age
FROM employees
WHERE age BETWEEN 20 AND 30
EXISTS
EXISTS(서브쿼리) 식으로 사용한다
서브쿼리의 결과가 존재한다면 true 존재하지 않는다면 false
SELECT name, age
FROM employees
WHERE EXISTS
(SELECT * FROM salaries WHERE employees.emp_no = salaries.emp_no)
NOT EXISTS(서브쿼리) 식으로 사용한다. EXISTS의 반대라고 생각하면 된다.
SELECT name, age
FROM employees
WHERE NOT EXISTS
(SELECT * FROM salaries WHERE employees.emp_no = salaries.emp_no)
IN
들어있는가? 를 확인한다. 들어있으면 true반환
SELECT * FROM foo WHERE number = 10 OR number = 20 OR number = 30
위의 SQL을 이렇게 쓰는 것이다.
SELECT * FROM foo WHERE number IN (10,20,30)
IN은 서브쿼리 에서도 사용이 가능하다.
SELECT * FROM foo WHERE number IN (SELECT id_number FROM bar)
IN의 반대로 NOT IN을 쓰기도 한다. 주의점은 NOT IN일경우
괄호안이 NULL이면 UNKNOWN을 반환한다. 될수있음 NULL이 포함되지 않을경우 쓰도록 하자
LIKE
패턴 매칭 결과 출력
SQL식 LIKE 문자열식 으로 사용한다.
- % 임의의 문자열
- _ 임의의 한문자
SELECT name FROM members WHERE LIKE '%아'
name
-------
이민아
정수아
김윤아
LIKE함수는 기본적으로 문자열에서만 쓰이지만, 정수형을 형변환 하여 정수형에 사용하기도 한다.
SELECT name, age FROM member WHERE CAST(age AS varchar) LIKE '2_'
name age
이민아 21
정수아 23
김윤아 29
NOT
NOT연산자는 우변이 true일때 false를 반환한다.
foo | not foo |
---|---|
true | false |
false | true |
SELECT name, address FROM member WHERE NOT address = '서울'
-- 어드레스가 서울이 아닌사람만 추출
name address
------------------
이미자 대구
김미영 울산
이진아 마포