기초 실습환경
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)
=, >, <, ! 등 기호를 통해 표기
연산자 | 의미 |
---|---|
A = B | A와 B가 같은 |
A > B | A가 B보다 큰 (초과) |
A < B | A가 B보다 작은 (미만) |
A >= B | A가 B보다 크거나 같은 (이상) |
A <= B | A가 B보다 작거나 같은 (이하) |
A <> B | A가 B보다 크거나 같은 (같지 않은) |
A != B | A와 B가 같지 않은 |
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)
=, >, <, ! 등 기호를 통해 표기
연산자 | 의미 |
---|---|
AND | 조건을 모두 만족하는 경우 TRUE |
OR | 하나의 조건이라도 만족하는 경우 TRUE |
NOT | 조건을 만족하지 않는 경우 TRUE |
BETWEEN | 조건값이 범위 사이에 있으면 TRUE |
IN | 조건값이 목록에 있으면 TRUE |
LIKE | 조건값이 패턴에 맞으면 TRUE |
조건을 모두 만족하는 경우 TRUE
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 의 결과만 검색됨
여러 조건 중 하나의 조건이라도 만족하는 경우 TRUE
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)
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)
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
조건을 만족하지 않는 경우 TRUE
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)
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)
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
- 하이픈(-)은 생략 가능