이전 포스팅에서 테이블 자료를 다루기 위한 INSERT, SELECT, UPDATE, DELETE 명령어를 살펴봤습니다.
이번 포스팅에서는 그 연속선 상에서 SQL 연산자에 대해 알아볼 예정입니다.
연산자를 사용하면 테이블 데이터를 다루는 자유도가 높아집니다.
다음 테이블은 이번 포스팅을 작성하면서 사용할 celeb 테이블입니다.
(제로베이스 데이터스쿨 강의_SQL 파트 실습 데이터를 사용했음을 사전에 밝힙니다.)
1. 비교연산자
연산자 | 의미 |
x = y | x와 y는 동일 |
x > y | x는 y 초과 |
x < y | x는 y 미만 |
x >= y | x는 y 이상 |
x <= y | x는 y 이하 |
x <> y | x는 y 초과 또는 미만 (같지 않음) |
x != y | x와 y는 같지 않음 |
SELECT name, age, sex, job, agency
FROM celeb
WHERE name='아이유';
비교연산자는 주로 WHERE 문에서 조건을 명시하기 위해 사용합니다.
아래 예제코드는 아이유 관련 데이터를 조회합니다.
SELECT name, job, agency
FROM celeb
WHERE agency!='YG 엔터테인먼트'
ORDER BY agency;
다음 예제코드는 소속사가 'YG 엔터테인먼트'가 아닌 연예인 데이터를 검색합니다.
2. 논리연산자
연산자 | 의미 |
AND | 조건을 모두 만족하면 TRUE |
OR | 최소 하나의 조건을 만족하면 TRUE |
NOT | 조건을 만족하지 않으면 TRUE |
BETWEEN | 값이 범위 사이에 존재하면 TRUE |
IN | 값이 목록에 존재하면 TRUE |
LIKE | 값이 패턴에 일치하면 TRUE |
논리연산자를 사용하면 2개 이상의 조건을 동시에 입력할 수 있습니다.
2-1. AND 연산자
SELECT <컬럼명1>, <컬럼명2>, ...
FROM <테이블명>
WHERE <조건1> AND <조건2> AND <조건3> ...;
조건을 모두 만족하는 경우에만 참을 리턴합니다.
SELECT *
FROM celeb
WHERE sex='M' AND agency='YG 엔터테인먼트'
ORDER BY agency;
위 예제코드는 'YG 엔터테인먼트' 소속인 남자 연예인 데이터를 소속사 이름 순으로 정렬합니다.
2-2. OR 연산자
SELECT <컬럼명1>, <컬럼명2>, ...
FROM <테이블명>
WHERE <조건1> OR <조건2> OR <조건3> ...;
주어진 조건들 중 최소 하나를 만족하는 경우에 참을 리턴합니다.
참고로 OR 연산자는 AND 연산자보다 우선순위가 낮다는 특징이 있습니다.
이러한 이유 때문에 조건문을 작성할 때 괄호를 명시해야 하는 경우가 있습니다.
SELECT *
FROM celeb
WHERE age<25 OR age>30
ORDER BY age;
위 예제코드는 나이가 25세 미만이거나 30세 초과인 연예인 데이터를 나이가 어린 순으로 검색합니다.
SELECT *
FROM celeb
WHERE (agency='YG 엔터테인먼트' OR agency='나무액터스') AND age<30;
위 예제코드는 'YG 엔터테인먼트' 또는 '나무액터스' 소속인 30세 미만인 연예인 데이터를 가져옵니다.
조건문에 소괄호를 사용했는데 이는 OR 연산자를 AND 연산자보다 먼저 고려하기 위함입니다.
2-3. NOT 연산자
SELECT <컬럼명1>, <컬럼명2>, ...
FROM <테이블명>
WHERE NOT <조건>;
조건을 만족하지 않는 경우에 참을 리턴합니다.
SELECT *
FROM celeb
WHERE (birthday>19891231 AND NOT sex='F')
OR (birthday<19790101 AND NOT agency='안테나');
위 예제코드는 1990년 이후에 출생한 여자 혹은 1979년 이전에 태어나고 안테나 소속이 아닌 연예인 데이터를 조회합니다.
가독성을 고려해서 조건문에 소괄호를 사용했습니다.
2-4. BETWEEN 연산자
SELECT <컬럼명1>, <컬럼명2>, ...
FROM <테이블명>
WHERE <컬럼명> BETWEEN <데이터1> AND <데이터2>;
대상 값이 범위 안에 있는 경우에만 참을 리턴합니다.
범위는 [데이터1, 데이터2]와 같으며 양 끝점을 포함합니다.
SELECT *
FROM celeb
WHERE age BETWEEN 30 AND 60 AND sex='M'
위 예제코드는 30세 이상, 60세 이하인 남자 연예인 데이터를 검색합니다.
2-5. IN 연산자
SELECT <컬럼명1>, <컬럼명2>, ...
FROM <테이블명>
WHERE <컬럼명> IN (<데이터1>, <데이터2>, ...);
목록에 대상 값이 존재하면 참을 리턴합니다.
SELECT *
FROM celeb
WHERE NOT agency IN ('나무액터스', '안테나', '울림엔터테인먼트')
위 예제코드는 '나무액터스' 또는 '안테나' 또는 '울림 엔터테인먼트' 소속이 아닌 데이터를 조회합니다.
2-6. LIKE 연산자
SELECT <컬럼명1>, <컬럼명2>, ...
FROM <테이블명>
WHERE <컬럼명> LIKE <패턴>;
대상 값이 패턴과 일치하면 참을 리턴합니다.
✅ % 기호
SELECT *
FROM celeb
WHERE agency LIKE 'YG%';
LIKE 연산자 패턴에서 % 기호는 임의의 문자열을 의미합니다.
공백 또는 정해지지 않은 길이의 문자열 등이 대응됩니다.
주로 특정 문자열이 데이터에 포함됐는지 여부를 알아내기 위해 사용합니다.
위 예제코드는 소속사 이름이 'YG'로 시작하는 연예인 데이터를 조회합니다.
SELECT *
FROM celeb
WHERE agency LIKE '%엔터테인먼트';
마찬가지로 특정 문자열로 끝나는 데이터를 찾을 때 사용할 수도 있습니다.
위 예제코드는 소속사 이름이 '엔터테인먼트'로 끝나는 연예인 데이터를 검색합니다.
SELECT *
FROM celeb
WHERE job LIKE '%가수%';
% 기호를 가장 많이 사용하는 유형은 다음과 같습니다.
특정 문자열을 포함하는지 알 수 있는 유용한 방법입니다.
위 예제코드는 직업명에 가수가 포함된 연예인 데이터를 가져옵니다.
SELECT *
FROM celeb
WHERE job LIKE '영%모델';
반대로 특정 문자열로 시작하고 끝나는 데이터를 조회하는 방법도 있습니다.
✅ _ 기호
% 기호와 같이 _ 기호 또한 문자열을 의미합니다.
다만 몇 번째 문자열을 의미한다는 점에서 차이가 있습니다.
간단히 얘기해서 _ 기호를 사용하면 문자의 순서를 고려해야 합니다.
SELECT *
FROM celeb
WHERE agency LIKE '_G%';
위 예제코드는 소속사 이름의 2번째 문자가 'G'인 연예인 데이터를 가져옵니다.
이는 _ 기호가 'G' 앞에 한 번 명시됐기 때문입니다.
하지만 'G' 이후에는 어떠한 문자가 와도 상관이 없습니다.
% 기호가 명시돼 있기 때문입니다.
SELECT *
FROM celeb
WHERE job LIKE '가____%';
위 코드는 직업명이 '가'로 시작하고 최소 5글자 이상인 연예인 데이터를 조회합니다.
참고로 '가' 문자 뒤에 _ 기호가 4번 입력된 상태입니다.
마치며
이상으로 SQL 연산자에 대한 정리를 마치도록 하겠습니다.
다양한 연산자를 사용하면서 다음 2가지 팁을 발견했습니다.
- '~중에' 조건 → AND 논리연산자 사용
- 다른 논리연산자들에 비해 높은 LIKE 연산자의 자유도
주어진 조건이 다소 복잡하더라도 LIKE 연산자를 사용하면 문제를 쉽게 풀 수 있었습니다.
다음 포스팅에서는 서로 다른 쿼리문을 합치는 UNION에 대해 알아보도록 하겠습니다.
[MySQL]SQL UNION 명령어 알아보기
이번 포스팅에서는 SQL UNION 관련 명령어에 대해 알아보도록 하겠습니다. 아래 테이블은 이번 포스팅을 작성하면서 사용할 celeb 예제 테이블입니다. (제로베이스 SQL 파트 강의에서 사용한 예제 테
parix-data.tistory.com
'데이터베이스・SQL' 카테고리의 다른 글
[MySQL]SQL UNION 명령어 알아보기 (0) | 2023.07.26 |
---|---|
[MySQL]스칼라 함수(Scalar Function) 정리 (0) | 2023.07.26 |
[MySQL]DB 테이블 데이터 다루기(INSERT/SELECT/UPDATE/DELETE) (0) | 2023.07.25 |
[MySQL]기본키와 외래키 알아보기 (0) | 2023.07.25 |
[MySQL]파이썬으로 MySQL 사용하기 (0) | 2023.07.25 |