SQL 기초 - 4. 연산자(OPERATOR) 1/2

김영빈·2022년 6월 29일
0

SQL 기초

목록 보기
5/11
post-thumbnail

기초 실습환경

mysql> desc celeb;

+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| ID        | int         | NO   | PRI | NULL    | auto_increment |
| NAME      | varchar(32) | NO   |     |         |                |
| BIRTHDAY  | date        | YES  |     | NULL    |                |
| AGE       | int         | YES  |     | NULL    |                |
| SEX       | char(1)     | YES  |     | NULL    |                |
| JOB_TITLE | varchar(32) | YES  |     | NULL    |                |
| AGENCY    | varchar(32) | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
7 rows in set (0.02 sec)
mysql> select * from celeb;

+----+--------+------------+------+------+------------------+------------------+
| 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    | 텔런트           | 나무엑터스       |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 텔런트 | YG엔터테이먼트   |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나           |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트   |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테이먼트   |
+----+--------+------------+------+------+------------------+------------------+
7 rows in set (0.02 sec)

1. 비교연산자

🎯 비교연산자의 종류

=, >, <, ! 등 기호를 통해 표기

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

🎯 SELECT 문 활용

SELECT문의 조건절(where 절)에 활용하여 특정데이터만 불러온다.

✍ 입력

SELECT name, age FROM celeb WHERE age!=29 ORDER by age asc;

💻 출력

+--------+------+
| name   | age  |
+--------+------+
| 이수현 |   23 |
| 이미주 |   28 |
| 송강   |   28 |
| 강동원 |   41 |
| 차승원 |   48 |
| 유재석 |   50 |
+--------+------+
6 rows in set (0.00 sec)

2. 논리연산자(AND, OR, NOT)

🎯 논리연산자의 종류

=, >, <, ! 등 기호를 통해 표기

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

🎯 AND 문법

조건을 모두 만족하는 경우 TRUE

  • 예제 1 : 나이가 29세이고 성별이 여성인 데이터 검색

✍ 입력

SELECT * FROM celeb WHERE age=29 AND sex='F';

💻 출력

+--------+------+
| name   | age  |
+--------+------+
| 이수현 |   23 |
| 이미주 |   28 |
| 송강   |   28 |
| 강동원 |   41 |
| 차승원 |   48 |
| 유재석 |   50 |
+--------+------+
6 rows in set (0.00 sec)

📌 부등호를 하나의 비교대상에 여러개 중첩 불가
- 25 < age AND age < 30 를 25 < age < 30으로 변경 시
25<age 의 결과만 검색됨

🎯 OR 문법

여러 조건 중 하나의 조건이라도 만족하는 경우 TRUE

  • 예제 1 : 나이가 25세보다 작거나 30세보다 큰 데이터를 나이순으로 정렬하여 검색

✍ 입력

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, 개그맨       | 안테나         |
+----+--------+------------+------+------+------------------+----------------+
4 rows in set (0.00 sec)

- 예제 2 : 나이가 29세 보다 작고 여자이거나, 나이가 30세보다 크고 남자인 데이터를 나이와 성별 순으로 정렬하여 검색

✍ 입력

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, 개그맨       | 안테나           |
+----+--------+------------+------+------+------------------+------------------+
5 rows in set (0.00 sec)

- 예제 3 : YG엔터테이먼트 소속이거나 나무엑터스 소속인 연예인 중, 나이가 30세 보다 작은 데이터를 검색

✍ 입력

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         |
+----+--------+------------+------+------+-----------+----------------+
|  3 | 송강   | 1994-04-23 |   28 | M    | 텔런트    | 나무엑터스     |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수      | YG엔터테이먼트 |
+----+--------+------------+------+------+-----------+----------------+
2 rows in set (0.00 sec)

📌 논리 연산자는 AND를 OR보다 우선적으로 처리
- AND를 먼저 처리 후 OR을 처리하기에 가독성 + 논리순서를 짚어주기 위해 괄호 사용이 필수

📌 column이 같더라도 데이터명을 검색할 때는 두번을 써줘야한다.
- ex. 나이가 25세나 30세를 검색 시
(X) WHERE age = 25, 30 (O) WHERE age = 25 OR age = 30

🎯 NOT 문법

조건을 만족하지 않는 경우 TRUE

  • 예제 1 : 성별이 여자가 아닌 데이터 검색

✍ 입력

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엔터테이먼트 |
+----+--------+------------+------+------+------------------+----------------+
4 rows in set (0.00 sec)

- 예제 2 : 소속사가 YG엔터테이먼트이면서 남자가 아니거나 직업이 가수이면서 소속사가 YG엔터테이먼트가 아닌 데이터 검색

✍ 입력

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엔터테이먼트   |
+----+--------+------------+------+------+-----------+------------------+
2 rows in set (0.00 sec)

- 예제 3 : 생일이 1990년 이후이면서 여자가 아니거나, 생일이 1979년 이전이면서 소속사가 안테나가 아닌 데이터 검색

✍ 입력

SELECT * FROM celeb
WHERE (birthday>19901231 AND NOT sex='F')
   OR (birthday<19790101 AND NOT agency='안테나');

💻 출력

+----+--------+------------+------+------+----------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE      | AGENCY         |
+----+--------+------------+------+------+----------------+----------------+
|  3 | 송강   | 1994-04-23 |   28 | M    | 텔런트         | 나무엑터스     |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델 | YG엔터테이먼트 |
+----+--------+------------+------+------+----------------+----------------+
2 rows in set (0.00 sec)

📌 date data 검색 시 주의 사항
- data값과 자리수를 같게 넣어줘야함.
ex) birthday는 YYYY-MM-DD 시 총 8자리를 입력해야함
(X) WHERE birthday<1990 (O) WHERE birthday > 19901231
- 하이픈(-)은 생략 가능

profile
개발도상인 냄비짱

0개의 댓글