SQL 기초 - Operators

Yang HyunIl·2023년 2월 6일
0

SQL

목록 보기
5/14
post-thumbnail

● Comparison Operators (비교 연산자)

연산자의미
A - BA 와 B가 같은
A > BA가 B보다 큰 (초과)
A < BA가 B보다 작은 (미만)
A >= BA가 B보다 크거나 같은 (이상)
A <= BA가 B보다 작거나 같은 (이하)
A <> BA가 B보다 크거나 작은 (같지 않은)
A != BA와 B가 같지 않은

예제 1

  • 나이가 29세인 데이터 검색
SELECT name, age FROM celeb WHERE age=29 ORDER BY age;
mysql> select name, age from celeb where age=29 order by age;
+--------+------+
| name   | age  |
+--------+------+
| 아이유 |   29 |
+--------+------+

예제 2

  • 나이가 29세가 아닌 데이터 검색
SELECT name, age FROM celeb WHERE age!=29 ORDER BY age;
mysql> select name, age from celeb where age!=29 order by age;
+--------+------+
| name   | age  |
+--------+------+
| 이수현 |   23 |
| 이미주 |   28 |
| 송강   |   28 |
| 강동원 |   41 |
| 차승원 |   48 |
| 유재석 |   50 |
+--------+------+

예제 3

  • 나이가 29세보다 큰 데이터 검색
SELECT name, age FROM celeb WHERE age>29 ORDER BY age;
mysql> select name, age from celeb where age>29 order by age;
+--------+------+
| name   | age  |
+--------+------+
| 강동원 |   41 |
| 차승원 |   48 |
| 유재석 |   50 |
+--------+------+

예제 4

  • 나이가 29세보다 작은 데이터 검색
SELECT name, age FROM celeb WHERE age<29 ORDER BY age;
mysql> select name, age from celeb where age<29 order by age;
+--------+------+
| name   | age  |
+--------+------+
| 이수현 |   23 |
| 이미주 |   28 |
| 송강   |   28 |

예제 5

  • 나이가 29세보다 크거나 같은 데이터 검색
SELECT name, age FROM celeb WHERE age>=29 ORDER BY age;
mysql> SELECT name, age FROM celeb WHERE age>=29 ORDER BY age;
+--------+------+
| name   | age  |
+--------+------+
| 아이유 |   29 |
| 강동원 |   41 |
| 차승원 |   48 |
| 유재석 |   50 |
+--------+------+

예제 6

  • 나이가 29세보다 작거나 같은 데이터 검색
SELECT name, age FROM celeb WHERE age<=29 ORDER BY age;
mysql> SELECT name, age FROM celeb WHERE age<=29 ORDER BY age;
+--------+------+
| name   | age  |
+--------+------+
| 이수현 |   23 |
| 이미주 |   28 |
| 송강   |   28 |
| 아이유 |   29 |
+--------+------+

예제 7

  • 나이가 29세보다 크거나 작은 (같지 않은) 데이터 검색
SELECT name, age FROM celeb WHERE age<>29 ORDER BY age;
mysql> SELECT name, age FROM celeb WHERE age<>29 ORDER BY age;
+--------+------+
| name   | age  |
+--------+------+
| 이수현 |   23 |
| 이미주 |   28 |
| 송강   |   28 |
| 강동원 |   41 |
| 차승원 |   48 |
| 유재석 |   50 |
+--------+------+

●Logical Operators (논리 연산자)

연산자의미
AND조건을 모두 만족하는 경우 TRUE
OR하나의 조건이라도 만족하는 경우 TRUE
NOT조건을 만족하지 않는 경우 TRUE
BETWEEN조건값이 범위 사이에 있으면 TRUE
IN조건값이 목록에 있으면 TRUE
LIKE조건값이 패턴에 맞으면 TRUE

AND 문법

  • 조건을 모두 만족하는 경우 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE condition1 AND condition2 AND condition3 ...;

예제 1

  • 나이가 29세이고 성별이 여성인 데이터 검색
mysql> select * from celeb where age=29 and sex='F';
+----+--------+------------+------+------+--------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE    | AGENCY           |
+----+--------+------------+------+------+--------------+------------------+
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트 | EDAM엔터테인먼트 |
+----+--------+------------+------+------+--------------+------------------+

예제 2

  • 성별이 남자이고 나이가 40세보다 큰 데이터를 이름의 역순으로 정렬하여 검색
mysql> select * from celeb where sex='M' and age>40 order by name;
+----+--------+------------+------+------+------------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY         |
+----+--------+------------+------+------+------------------+----------------+
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테인먼트 |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나         |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테인먼트 |
+----+--------+------------+------+------+------------------+----------------+

OR 문법

  • 하나의 조건이라도 만족하는 경우 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE condition1 OR condition2 OR condition3 ...;

예제 1

  • 나이가 25세보다 작거나 30세보다 큰 데이터 검색
mysql> select * from celeb where age<25 or age>30 order by age;
+----+--------+------------+------+------+------------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY         |
+----+--------+------------+------+------+------------------+----------------+
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테인먼트 |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테인먼트 |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테인먼트 |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나         |
+----+--------+------------+------+------+------------------+----------------+

예제 2

  • 나이가 29세보다 작고 여자이거나, 나이가 30세보다 크고 남자인 데이터를 나이와 성별 순으로 정렬하여 검색
mysql> select * from celeb where (age<29 and sex='F') or (age>30 and sex='M')
    -> order by age, sex;
+----+--------+------------+------+------+------------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY           |
+----+--------+------------+------+------+------------------+------------------+
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테인먼트   |
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수             | 울림엔터테인먼트 |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테인먼트   |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테인먼트   |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나           |
+----+--------+------------+------+------+------------------+------------------+

예제 3

  • YG엔터테인먼트 소속이거나 나무엑터스
mysql> select * from celeb where (agency='YG엔터테인먼트' or agency='나무엑터스') and age<30;
+----+--------+------------+------+------+-----------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE | AGENCY         |
+----+--------+------------+------+------+-----------+----------------+
|  3 | 송강   | 1994-04-23 |   28 | M    | 탤런트    | 나무엑터스     |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수      | YG엔터테인먼트 |
+----+--------+------------+------+------+-----------+----------------+

NOT 문법

  • 조건을 만족하지 않는 경우 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE NOT condition;

예제 1

mysql> select * from celeb where not sex='F';
+----+--------+------------+------+------+------------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY         |
+----+--------+------------+------+------+------------------+----------------+
|  3 | 송강   | 1994-04-23 |   28 | M    | 탤런트           | 나무엑터스     |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테인먼트 |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나         |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테인먼트 |
+----+--------+------------+------+------+------------------+----------------+

예제 2

  • 소속사가 YG엔터테인먼트이면서 남자가 아니거나, 직업이 가수이면서 소속사가 YG엔터테인먼트가 아닌 데이터 검색
mysql> select * from celeb where
    -> (agency='YG엔터테인먼트' and not sex='M') or
    -> (job_title='가수' and not agency='YG엔터테인먼트');
+----+--------+------------+------+------+-----------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE | AGENCY           |
+----+--------+------------+------+------+-----------+------------------+
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수      | 울림엔터테인먼트 |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수      | YG엔터테인먼트   |

예제 3

  • 생일이 1990년 이후이면서 여자가 아니거나, 생일이 1979년 이전이면서 소속사가 안테나가 아닌 데이터 검색
mysql> select * from celeb where
    -> (birthday>19891231 and not sex='F') or (birthday<19800101 and not agency='안테나');
+----+--------+------------+------+------+----------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE      | AGENCY         |
+----+--------+------------+------+------+----------------+----------------+
|  3 | 송강   | 1994-04-23 |   28 | M    | 탤런트         | 나무엑터스     |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델 | YG엔터테인먼트 |
+----+--------+------------+------+------+----------------+----------------+

BETWEEN 문법

  • 조건값이 범위 사이에 있으면 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE column1 BETWEEN value1 AND value2;

예제 1

  • 나이가 20세에서 40세 사이의 데이터 검색
mysql> select * from celeb where age between 20 and 30;
+----+--------+------------+------+------+--------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE    | AGENCY           |
+----+--------+------------+------+------+--------------+------------------+
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트 | EDAM엔터테인먼트 |
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수         | 울림엔터테인먼트 |
|  3 | 송강   | 1994-04-23 |   28 | M    | 탤런트       | 나무엑터스       |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수         | YG엔터테인먼트   |
+----+--------+------------+------+------+--------------+------------------+

예제 2

  • 생년월일이 1980년에서 1995년 사이가 아니면서 여자이거나, 소속사가 YG엔터테인먼트이면서 나이가 20세에서 45세 사이가 아닌 데이터 검색
mysql> select * from celeb where
    -> (not birthday between 19800101 and 19951231 and sex='F') or
    -> (agency='YG엔터테인먼트' and not age between 20 and 45);
+----+--------+------------+------+------+----------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE      | AGENCY         |
+----+--------+------------+------+------+----------------+----------------+
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델 | YG엔터테인먼트 |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수           | YG엔터테인먼트 |
+----+--------+------------+------+------+----------------+----------------+

IN 문법

  • 조건값이 목록에 있으면 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE column IN (value1, value2, ...);

예제 1

  • 나이가 28, 48세 중 하나인 데이터 검색
mysql> select * from celeb where age in (28, 48);
+----+--------+------------+------+------+----------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE      | AGENCY           |
+----+--------+------------+------+------+----------------+------------------+
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수           | 울림엔터테인먼트 |
|  3 | 송강   | 1994-04-23 |   28 | M    | 탤런트         | 나무엑터스       |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델 | YG엔터테인먼트   |
+----+--------+------------+------+------+----------------+------------------+

예제 2

  • 소속사가 나무엑터스, 안테나, 울림엔터테인먼트가 아니면서, 성별이 여자거나 나이가 45세 이상인 데이터 검색
mysql> select * from celeb
    -> where not agency in ('나무엑터스', '안테나', '울림엔터테인먼트')
    -> and (sex='F' or age>=45);
+----+--------+------------+------+------+----------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE      | AGENCY           |
+----+--------+------------+------+------+----------------+------------------+
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트   | EDAM엔터테인먼트 |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델 | YG엔터테인먼트   |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수           | YG엔터테인먼트   |
+----+--------+------------+------+------+----------------+------------------+

LIKE 문법

  • 조건값이 패턴에 맞으면 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE column LIKE pattern;

예제 1

  • 소속사 이름이 'YG엔터테인먼트'인 데이터를 검색
mysql> select * from celeb where agency like 'yg엔터테인먼트';
+----+--------+------------+------+------+------------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY         |
+----+--------+------------+------+------+------------------+----------------+
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테인먼트 |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테인먼트 |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테인먼트 |
+----+--------+------------+------+------+------------------+----------------+

예제 2

  • 'YG'로 시작하는 소속사 이름을 가진 데이터를 검색
mysql> select * from celeb where agency like 'yg%';
+----+--------+------------+------+------+------------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY         |
+----+--------+------------+------+------+------------------+----------------+
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테인먼트 |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테인먼트 |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테인먼트 |
+----+--------+------------+------+------+------------------+----------------+

예제 3

  • '엔터테인먼트'로 끝나는 소속사 이름을 가진 데이터를 검색
mysql> select * from celeb where agency like '%엔터테인먼트';
+----+--------+------------+------+------+------------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY           |
+----+--------+------------+------+------+------------------+------------------+
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트     | EDAM엔터테인먼트 |
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수             | 울림엔터테인먼트 |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테인먼트   |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테인먼트   |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테인먼트   |
+----+--------+------------+------+------+------------------+------------------+

예제 4

  • 직업명에 '가수'가 포함된 데이터를 검색
mysql> select * from celeb where job_title like '%가수%';
+----+--------+------------+------+------+--------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE    | AGENCY           |
+----+--------+------------+------+------+--------------+------------------+
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트 | EDAM엔터테인먼트 |
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수         | 울림엔터테인먼트 |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수         | YG엔터테인먼트   |
+----+--------+------------+------+------+--------------+------------------+

예제 5

  • 소속사 이름의 두번째 글자가 G인 데이터를 검색
mysql> select * from celeb where agency like '_g%';
+----+--------+------------+------+------+------------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY         |
+----+--------+------------+------+------+------------------+----------------+
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테인먼트 |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테인먼트 |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테인먼트 |
+----+--------+------------+------+------+------------------+----------------+

예제 6

  • 직업명이 '가'로 시작하고 최소 2글자 이상인 데이터 검색
mysql> select * from celeb where job_title like '가_%';
+----+--------+------------+------+------+--------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE    | AGENCY           |
+----+--------+------------+------+------+--------------+------------------+
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트 | EDAM엔터테인먼트 |
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수         | 울림엔터테인먼트 |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수         | YG엔터테인먼트   |
+----+--------+------------+------+------+--------------+------------------+

예제 7

  • 직업명이 '가'로 시작하고 최소 5글자 이상인 데이터 검색
mysql> select * from celeb where job_title like '가____%';
+----+--------+------------+------+------+--------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE    | AGENCY           |
+----+--------+------------+------+------+--------------+------------------+
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트 | EDAM엔터테인먼트 |
+----+--------+------------+------+------+--------------+------------------+

예제 8

  • 직업명이 '영'으로 시작하고 '모델'로 끝나는 데이터 검색
mysql> select * from celeb where job_title like '영%모델';
+----+--------+------------+------+------+----------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE      | AGENCY         |
+----+--------+------------+------+------+----------------+----------------+
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델 | YG엔터테인먼트 |
+----+--------+------------+------+------+----------------+----------------+

예제 9

  • 영화배우와 탤런트를 병행하는 연예인 검색
mysql> select * from celeb where job_title like '%영화배우%' and job_title like '%탤런트%';
+----+--------+------------+------+------+------------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY         |
+----+--------+------------+------+------+------------------+----------------+
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테인먼트 |
+----+--------+------------+------+------+------------------+----------------+

예제 10

  • 직업이 하나 이상인 연예인 중 영화배우 혹은 텔런트가 아닌 연예인 검색
mysql> select * from celeb
    -> where job_title like '%,%'
    -> and not (job_title like '%영화배우%' or job_title like '%탤런트%');
+----+--------+------------+------+------+------------+--------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE  | AGENCY |
+----+--------+------------+------+------+------------+--------+
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨 | 안테나 |
+----+--------+------------+------+------+------------+--------+
profile
ヾ(•ω•`)o

0개의 댓글