데이터베이스・SQL

[MySQL]SQL 연산자 정리(비교/논리연산자)

truezero 2023. 7. 25. 17:41

이전 포스팅에서 테이블 자료를 다루기 위한 INSERT, SELECT, UPDATE, DELETE 명령어를 살펴봤습니다.

이번 포스팅에서는 그 연속선 상에서 SQL 연산자에 대해 알아볼 예정입니다.

연산자를 사용하면 테이블 데이터를 다루는 자유도가 높아집니다.

다음 테이블은 이번 포스팅을 작성하면서 사용할 celeb 테이블입니다.

(제로베이스 데이터스쿨 강의_SQL 파트 실습 데이터를 사용했음을 사전에 밝힙니다.)

celeb 테이블

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 문에서 조건을 명시하기 위해 사용합니다.

아래 예제코드는 아이유 관련 데이터를 조회합니다.

SQL 비교연산자 예제1

 

SELECT name, job, agency
FROM celeb
WHERE agency!='YG 엔터테인먼트'
ORDER BY agency;

다음 예제코드는 소속사가 'YG 엔터테인먼트'가 아닌 연예인 데이터를 검색합니다.

SQL 비교연산자 예제2

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년 이전에 태어나고 안테나 소속이 아닌 연예인 데이터를 조회합니다.

가독성을 고려해서 조건문에 소괄호를 사용했습니다.

SQL NOT 연산자 예제

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세 이하인 남자 연예인 데이터를 검색합니다.

SQL BETWEEN 연산자 예제

2-5. IN 연산자

SELECT <컬럼명1>, <컬럼명2>, ...
FROM <테이블명>
WHERE <컬럼명> IN (<데이터1>, <데이터2>, ...);

목록에 대상 값이 존재하면 참을 리턴합니다.

 

SELECT *
FROM celeb
WHERE NOT agency IN ('나무액터스', '안테나', '울림엔터테인먼트')

위 예제코드는 '나무액터스' 또는 '안테나' 또는 '울림 엔터테인먼트' 소속이 아닌 데이터를 조회합니다.

SQL IN 연산자 예제

2-6. LIKE 연산자

SELECT <컬럼명1>, <컬럼명2>, ...
FROM <테이블명>
WHERE <컬럼명> LIKE <패턴>;

대상 값이 패턴과 일치하면 참을 리턴합니다.

✅ % 기호

SELECT  *
FROM celeb
WHERE agency LIKE 'YG%';

LIKE 연산자 패턴에서 % 기호는 임의의 문자열을 의미합니다.

공백 또는 정해지지 않은 길이의 문자열 등이 대응됩니다.

주로 특정 문자열이 데이터에 포함됐는지 여부를 알아내기 위해 사용합니다.

위 예제코드는 소속사 이름이 'YG'로 시작하는 연예인 데이터를 조회합니다.

SQL LIKE 연산자 % 패턴

 

SELECT *
FROM celeb
WHERE agency LIKE '%엔터테인먼트';

마찬가지로 특정 문자열로 끝나는 데이터를 찾을 때 사용할 수도 있습니다.

위 예제코드는 소속사 이름이 '엔터테인먼트'로 끝나는 연예인 데이터를 검색합니다.

 

SELECT *
FROM celeb
WHERE job LIKE '%가수%';

% 기호를 가장 많이 사용하는 유형은 다음과 같습니다.

특정 문자열을 포함하는지 알 수 있는 유용한 방법입니다.

위 예제코드는 직업명에 가수가 포함된 연예인 데이터를 가져옵니다.

 

SELECT *
FROM celeb
WHERE job LIKE '영%모델';

반대로 특정 문자열로 시작하고 끝나는 데이터를 조회하는 방법도 있습니다.

SQL LIKE 연산자 %패턴 예제2

✅ _ 기호

% 기호와 같이 _ 기호 또한 문자열을 의미합니다.

다만 몇 번째 문자열을 의미한다는 점에서 차이가 있습니다.

간단히 얘기해서 _ 기호를 사용하면 문자의 순서를 고려해야 합니다.

 

SELECT *
FROM celeb
WHERE agency LIKE '_G%';

위 예제코드는 소속사 이름의 2번째 문자가 'G'인 연예인 데이터를 가져옵니다.

이는 _ 기호가 'G' 앞에 한 번 명시됐기 때문입니다.

하지만 'G' 이후에는 어떠한 문자가 와도 상관이 없습니다.

% 기호가 명시돼 있기 때문입니다.

SQL LIKE 연산자 _ 패턴

 

SELECT *
FROM celeb
WHERE job LIKE '가____%';

위 코드는 직업명이 '가'로 시작하고 최소 5글자 이상인 연예인 데이터를 조회합니다.

참고로 '가' 문자 뒤에 _ 기호가 4번 입력된 상태입니다.

SQL LIKE 연산자 _ 패턴 예제2

마치며

이상으로 SQL 연산자에 대한 정리를 마치도록 하겠습니다.

다양한 연산자를 사용하면서 다음 2가지 팁을 발견했습니다.

  1. '~중에' 조건 → AND 논리연산자 사용
  2. 다른 논리연산자들에 비해 높은 LIKE 연산자의 자유도

주어진 조건이 다소 복잡하더라도 LIKE 연산자를 사용하면 문제를 쉽게 풀 수 있었습니다.

다음 포스팅에서는 서로 다른 쿼리문을 합치는 UNION에 대해 알아보도록 하겠습니다.

 

[MySQL]SQL UNION 명령어 알아보기

이번 포스팅에서는 SQL UNION 관련 명령어에 대해 알아보도록 하겠습니다. 아래 테이블은 이번 포스팅을 작성하면서 사용할 celeb 예제 테이블입니다. (제로베이스 SQL 파트 강의에서 사용한 예제 테

parix-data.tistory.com