아래의 가상의 celeb table로 실습을 진행해보자.
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.00 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.00 sec)
아래와 같이 논리 연산자로 데이터를 조회할 수 있다.
비교 연산자는 where 구문에서 사용된다.
실습을 통해 확인해보자.
조건을 모두 만족하는 경우인 데이터를 조회.
ex) 나이가 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엔터테이먼트 |
+----+-----------+------------+------+------+-------------------+------------------------+
1 row in set (0.00 sec)
ex) 나이가 40세 보다 크고 성별이 남성인 데이터를 나이 역순으로 조회.
mysql> select *
-> from celeb
-> where age>40 and sex='M'
-> order by age desc;
+----+-----------+------------+------+------+-------------------------+----------------------+
| ID | NAME | BIRTHDAY | AGE | SEX | JOB_TITLE | AGENCY |
+----+-----------+------------+------+------+-------------------------+----------------------+
| 5 | 유재석 | 1972-08-14 | 50 | M | MC, 개그맨 | 안테나 |
| 6 | 차승원 | 1970-06-07 | 48 | M | 영화배우, 모델 | YG엔터테이먼트 |
| 4 | 강동원 | 1981-01-18 | 41 | M | 영화배우, 텔런트 | YG엔터테이먼트 |
+----+-----------+------------+------+------+-------------------------+----------------------+
3 rows in set (0.00 sec)
조건들 중 하나라도 만족하는 경우의 데이터 조회
ex) 나이가 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, 개그맨 | 안테나 |
+----+-----------+------------+------+------+-------------------------+----------------------+
4 rows in set (0.00 sec)
논리 연산자 2개 이상을 한 구문 안에서 섞어서 쓸 수 있다.
시스템은 AND, OR 연산자가 있을 때 AND 연산자부터 연산을 한다.
하지만 가독성 및 쿼리가 길어질 시 혼동할 수가 있으니 괄호'()'를 사용하자.
연산자를 사용할 때, 산술 연산할 때와 같이 괄호'()'를 사용하면 괄호 안이 먼저 연산이 된다.
'순서'를 고려하여 괄호를 잘 활용하도록 한다.
ex) 나이가 29세보다 작고 여자이거나, 나이가 30세 보다 크고 남자인 데이터를 나이와 성별 순으로 정렬하여 조회.
(29 and 여자) or (30 and 남자)인 조건을 조회하면 된다.
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, 개그맨 | 안테나 |
+----+-----------+------------+------+------+-------------------------+--------------------------+
5 rows in set (0.00 sec)
해당하는 조건이 '아닌'(만족하지 않는) 경우의 데이터를 조회.
ex) 성별이 여성이 '아닌' 데이터 조회.
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엔터테이먼트 |
+----+-----------+------------+------+------+-------------------------+----------------------+
4 rows in set (0.00 sec)
해당하는 조건 값이 범위 사이에 있는 경우의 데이터를 조회.
and 혹은 or을 섞어쓰면 같은 조회가 가능하지만, 좀더 간편하게 쓸 수 있다는 장점이 있다.
ex) 생년월일이 1980년에서 1995년 사이가 아닌 데이터 조회.
# 1
mysql> select *
-> from celeb
-> where birthday not between 19800101 and 19951231;
+----+-----------+------------+------+------+----------------------+----------------------+
| ID | NAME | BIRTHDAY | AGE | SEX | JOB_TITLE | AGENCY |
+----+-----------+------------+------+------+----------------------+----------------------+
| 5 | 유재석 | 1972-08-14 | 50 | M | MC, 개그맨 | 안테나 |
| 6 | 차승원 | 1970-06-07 | 48 | M | 영화배우, 모델 | YG엔터테이먼트 |
| 7 | 이수현 | 1999-05-04 | 23 | F | 가수 | YG엔터테이먼트 |
+----+-----------+------------+------+------+----------------------+----------------------+
3 rows in set (0.00 sec)
# 2
mysql> select *
-> from celeb
-> where birthday<19800101 or birthday>19951231;
+----+-----------+------------+------+------+----------------------+----------------------+
| ID | NAME | BIRTHDAY | AGE | SEX | JOB_TITLE | AGENCY |
+----+-----------+------------+------+------+----------------------+----------------------+
| 5 | 유재석 | 1972-08-14 | 50 | M | MC, 개그맨 | 안테나 |
| 6 | 차승원 | 1970-06-07 | 48 | M | 영화배우, 모델 | YG엔터테이먼트 |
| 7 | 이수현 | 1999-05-04 | 23 | F | 가수 | YG엔터테이먼트 |
+----+-----------+------------+------+------+----------------------+----------------------+
3 rows in set (0.00 sec)
해당 조건이 목록 안에 존재하는 경우의 데이터를 조회
or 연산자를 사용하면 같은 조회가 가능하지만, 좀 더 간편하게 쓸 수 있다는 장점이 있다.
ex) 나이가 28세, 28세 중 하나인 데이터 조회
# 1
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엔터테이먼트 |
+----+-----------+------------+------+------+----------------------+--------------------------+
3 rows in set (0.00 sec)
# 2
mysql> select *
-> from celeb
-> where age=28 or age=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엔터테이먼트 |
+----+-----------+------------+------+------+----------------------+--------------------------+
3 rows in set (0.00 sec)
해당 조건이 '패턴'에 맞는 데이터 조회
패턴값
ex) 두번째 글자가 '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엔터테이먼트 |
+----+-----------+------------+------+------+-------------------------+----------------------+
3 rows in set (0.00 sec)
ex) 직업을 2개 가지는 데이터 조회
mysql> select *
-> from celeb
-> where job_title like '%, %';
+----+-----------+------------+------+------+-------------------------+------------------------+
| ID | NAME | BIRTHDAY | AGE | SEX | JOB_TITLE | AGENCY |
+----+-----------+------------+------+------+-------------------------+------------------------+
| 1 | 아이유 | 1993-05-16 | 29 | F | 가수, 텔런트 | EDAM엔터테이먼트 |
| 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)