CREATE TABLE CELEB
-> (
-> ID int NOT NULL AUTO_INCREMENT PRIMARY KEY,
#AUTO_INCREMENT는 ID가 자동으로 증가하는것
-> NAME varchar(32) NOT NULL DEFAULT '',
-> BIRTHDAY date,
-> AGE int,
-> SEX char(1),
-> JOB_TITLE varchar(32),
-> AGENCY varchar(32)
-> );
Query OK, 0 rows affected (0.05 sec)
mysql> DESC CELEBT
-> ;
+-----------+-------------+------+-----+---------+----------------+
| 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> INSERT INTO CELEB
-> VALUES(1, '아이유', '1993-05-16', 29, 'F', '가수, 탤런트', 'EDAM엔터테이먼트');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO CELEB
-> VALUES(2, '이미주', '1994-09-23', 28, 'F', '가수', '울림엔터테이먼트');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO CELEB
-> VALUES(3, '송강', '1994-04-23', 28, 'M', '탤런트', '나무엑터스');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO CELEB
-> VALUES(4, '강동원', '1981-01-18', 41, 'M', '영화배우, 탤런트', 'YG엔터테이먼트');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO CELEB
-> VALUES(5, '유재석', '1972-08-14', 50, 'M', 'MC, 개그맨', '안테나');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO CELEB
-> VALUES(6, '차승원', '1970-06-07', 48, 'M', '영화배우, 모델', 'YG엔터테이먼트');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO CELEB
-> VALUES(7, '이수현', '1999-05-04', 23, 'F', '가수','YG엔터테이먼트');
Query OK, 1 row affected (0.01 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)
특정컬럼을 기준으로 오름차순(asc) 또는 내림차순(desc)으로 정렬
🧷
ORDER BY
컬렴명 or 별명 or column순서ASC
orDESC
SELECT id, name
-> FROM celeb
-> where sex = 'F'
-> ORDER BY age desc;
+----+-----------+
| id | name |
+----+-----------+
| 1 | 아이유 |
| 2 | 이미주 |
| 3 | 송강 |
| 7 | 이수현 |
+----+-----------+
SELECT age, name
-> FROM celeb
-> ORDER BY age DESC, name ASC;
+------+-----------+
| age | name |
+------+-----------+
| 50 | 유재석 |
| 48 | 차승원 |
| 41 | 강동원 |
| 29 | 아이유 |
| 28 | 송강 |
| 28 | 이미주 |
| 23 | 이수현 |
+------+-----------+
7 rows in set (0.00 sec)
#celeb 테이블에서 소속사가 YG엔터테이먼트가 아닌 데이터의 이름, 직업, 소속사를 소속사 순으로 정렬하여 조회하세요.
select name, job_title, agency
-> from celeb
-> where agency != 'YG엔터테인먼트'
-> order by agency;
+-----------+-------------------------+--------------------------+
| name | job_title | agency |
+-----------+-------------------------+--------------------------+
| 아이유 | 가수, 탤런트 | EDAM엔터테이먼트 |
| 강동원 | 영화배우, 탤런트 | YG엔터테이먼트 |
| 차승원 | 영화배우, 모델 | YG엔터테이먼트 |
| 이수현 | 가수 | YG엔터테이먼트 |
| 송강 | 가수 | 나무엑터스 |
| 유재석 | MC, 개그맨 | 안테나 |
| 이미주 | 가수 | 울림엔터테이먼트 |
+-----------+-------------------------+--------------------------+
7 rows in set (0.00 sec)
#celeb 테이블에서 성별이 남자인 데이터의 이름, 성별, 소속사 정보를 나이의 역순으로 정렬한 뒤
# 소속사 순으로 정렬하여 조회하세요.
mysql> select name, sex, agency
-> from celeb
-> where sex = 'M'
-> order by age DESC, agency;
+-----------+------+----------------------+
| name | sex | agency |
+-----------+------+----------------------+
| 유재석 | M | 안테나 |
| 차승원 | M | YG엔터테이먼트 |
| 강동원 | M | YG엔터테이먼트 |
+-----------+------+----------------------+
3 rows in set (0.00 sec)
#celeb 테이블에서 나이가 50세 미만인 데이터의 성별, 소속사, 이름, 나이를 성별 순으로 정렬한 뒤
#소속사 역순으로 정렬하고 마지막으로 이름 순으로 정렬하여 조회하세요
mysql> select sex, agency, name, age
-> from celeb
-> where age < 50
-> order by agency desc, age;
+------+--------------------------+-----------+------+
| sex | agency | name | age |
+------+--------------------------+-----------+------+
| F | 울림엔터테이먼트 | 이미주 | 28 |
| F | 나무엑터스 | 송강 | 28 |
| F | YG엔터테이먼트 | 이수현 | 23 |
| M | YG엔터테이먼트 | 강동원 | 41 |
| M | YG엔터테이먼트 | 차승원 | 48 |
| F | EDAM엔터테이먼트 | 아이유 | 29 |
+------+--------------------------+-----------+------+
6 rows in set (0.00 sec)
🧷 and 와 or가 같이 올 때 and 먼저 처리
조건을 모두 만족할 경우 TRUE
mysql> select *
-> from celeb
-> where sex = 'M' and agency = 'YG엔터테이먼트'
-> order by agency;
+----+-----------+------------+------+------+-------------------------+----------------------+
| ID | NAME | BIRTHDAY | AGE | SEX | JOB_TITLE | AGENCY |
+----+-----------+------------+------+------+-------------------------+----------------------+
| 4 | 강동원 | 1981-01-18 | 41 | M | 영화배우, 탤런트 | YG엔터테이먼트 |
| 6 | 차승원 | 1970-06-07 | 48 | M | 영화배우, 모델 | YG엔터테이먼트 |
+----+-----------+------------+------+------+-------------------------+----------------------+
2 rows in set (0.00 sec)
select *
-> from celeb
-> where age >= 30 and sex = 'M'
-> order by age ;
+----+-----------+------------+------+------+-------------------------+----------------------+
| ID | NAME | BIRTHDAY | AGE | SEX | JOB_TITLE | AGENCY |
+----+-----------+------------+------+------+-------------------------+----------------------+
| 4 | 강동원 | 1981-01-18 | 41 | M | 영화배우, 탤런트 | YG엔터테이먼트 |
| 6 | 차승원 | 1970-06-07 | 48 | M | 영화배우, 모델 | YG엔터테이먼트 |
| 5 | 유재석 | 1972-08-14 | 50 | M | MC, 개그맨 | 안테나 |
+----+-----------+------------+------+------+-------------------------+----------------------+
3 rows in set (0.00 sec)
하나의 조건이라도 만족하는 경우 TRUE
YG엔터테이먼트 소속이거나 나무엑터스 소속인 연예인 중 나이가 30세 보다 작은 데이터를 검색
select * from celeb
-> where (agency = 'YG엔터테이먼트' or agency = '나무엑터스') and age < 30;
+----+-----------+------------+------+------+-----------+----------------------+
| ID | NAME | BIRTHDAY | AGE | SEX | JOB_TITLE | AGENCY |
+----+-----------+------------+------+------+-----------+----------------------+
| 3 | 송강 | 1994-04-23 | 28 | F | 가수 | 나무엑터스 |
| 7 | 이수현 | 1999-05-04 | 23 | F | 가수 | YG엔터테이먼트 |
+----+-----------+------------+------+------+-----------+----------------------+
2 rows in set (0.00 sec)
Celeb 테이블에서 남자이면서 YG엔터테이먼트 소속이거나, 나이가 30세 보다 작은 데이터를 나이, 소속사 순으로 정렬하여 검색
select * from celeb
-> where (agency = 'YG엔터테이먼트' and sex = 'M') or age < 30
-> order by age, agency;
+----+-----------+------------+------+------+-------------------------+--------------------------+
| ID | NAME | BIRTHDAY | AGE | SEX | JOB_TITLE | AGENCY |
+----+-----------+------------+------+------+-------------------------+--------------------------+
| 7 | 이수현 | 1999-05-04 | 23 | F | 가수 | YG엔터테이먼트 |
| 3 | 송강 | 1994-04-23 | 28 | F | 가수 | 나무엑터스 |
| 2 | 이미주 | 1994-09-23 | 28 | F | 가수 | 울림엔터테이먼트 |
| 1 | 아이유 | 1993-05-16 | 29 | F | 가수, 탤런트 | EDAM엔터테이먼트 |
| 4 | 강동원 | 1981-01-18 | 41 | M | 영화배우, 탤런트 | YG엔터테이먼트 |
| 6 | 차승원 | 1970-06-07 | 48 | M | 영화배우, 모델 | YG엔터테이먼트 |
+----+-----------+------------+------+------+-------------------------+--------------------------+
6 rows in set (0.00 sec)
Celeb 테이블에서 아이디가 홀수면서 성별이 남자거나, 아이디가 짝수면서 소속사가 YG엔터테이먼트인 데이터를 나이순으로 정렬하여 검색
mysql> select * from celeb
-> where (id % 2 = 1 and sex = 'M') or (id % 2 = 0 and agency = 'YG엔터테이먼트')
-> order by age;
+----+-----------+------------+------+------+-------------------------+----------------------+
| ID | NAME | BIRTHDAY | AGE | SEX | JOB_TITLE | AGENCY |
+----+-----------+------------+------+------+-------------------------+----------------------+
| 4 | 강동원 | 1981-01-18 | 41 | M | 영화배우, 탤런트 | YG엔터테이먼트 |
| 6 | 차승원 | 1970-06-07 | 48 | M | 영화배우, 모델 | YG엔터테이먼트 |
| 5 | 유재석 | 1972-08-14 | 50 | M | MC, 개그맨 | 안테나 |
+----+-----------+------------+------+------+-------------------------+----------------------+
3 rows in set (0.01 sec)
조건을 만족하지 않으면 True
소속사가 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)
생일이 1990년 이후이면서 여자가 아니거나, 생일이 1979년 이전이면서 소속사가 안테나가 아닌 데이터 검색
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엔터테이먼트 |
+----+-----------+------------+------+------+----------------------+----------------------+
2 rows in set (0.00 sec)
조건값이 범위 사이에 있으면 True
생년월일이 1980년에서 1995년 사이가 아니면서 여자이거나,소속사가 YG엔터테이먼트이면서 나이가 20세에서 45세 사이가 아닌 데이터 검색
select * from celeb
-> where (birthday (between 19800101 and 19951231) and sex = 'F')
-> or (agency = 'YG엔터테이먼트' and not age (between 20 and 45));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'between 19800101 and 19951231) and sex = 'F')
or (agency = 'YG엔터테이먼트' at line 2
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엔터테이먼트 |
+----+-----------+------------+------+------+----------------------+----------------------+
2 rows in set (0.00 sec)
Celeb 테이블에서 아이디가 1 에서 5사이의 값이면서 성별이 여자이거나,
아이디가 홀수이면서 성별이 남자이면서 나이가 20세에서 30세 사이인 데이터를 조회
select * from celeb
-> where (id between 1 and 5 and sex = 'F')
-> or (id%2=1 and sex = 'M' and 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 | 탤런트 | 나무엑터스 |
+----+-----------+------------+------+------+-------------------+--------------------------+
3 rows in set (0.01 sec)
조건값이 목록에 있으면 True
소속사가 나무엑터스, 안테나, 울림엔터테이먼트가 아니면서, 성별이 여자거나 나이가 45세 이상인 데이터 검색
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엔터테이먼트 |
+----+-----------+------------+------+------+----------------------+------------------------+
3 rows in set (0.00 sec)
celeb 테이블에서 아이유, 송강, 강동원, 차승원 중에 YG엔터테이먼트 소속이 아니거나 나이가 40세에서 50세 사이인 사람을 찾아보세요
mysql> select * from celeb
-> where name in ('아이유','송강','강동원','차승원') and (not agency = 'YG엔터테이먼트' or age between 40 and 50);
+----+-----------+------------+------+------+-------------------------+------------------------+
| ID | NAME | BIRTHDAY | AGE | SEX | JOB_TITLE | AGENCY |
+----+-----------+------------+------+------+-------------------------+------------------------+
| 1 | 아이유 | 1993-05-16 | 29 | F | 가수, 탤런트 | EDAM엔터테이먼트 |
| 3 | 송강 | 1994-04-23 | 28 | M | 탤런트 | 나무엑터스 |
| 4 | 강동원 | 1981-01-18 | 41 | M | 영화배우, 탤런트 | YG엔터테이먼트 |
| 6 | 차승원 | 1970-06-07 | 48 | M | 영화배우, 모델 | YG엔터테이먼트 |
+----+-----------+------------+------+------+-------------------------+------------------------+
4 rows in set (0.00 sec)
조건값이 패턴에 맞으면 True
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엔터테이먼트
|
+----+-----------+------------+------+------+-------------------------+--------------------------+
5 rows in set (0.00 sec)
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엔터테이먼트 |
+----+-----------+------------+------+------+-------------------+--------------------------+
3 rows in set (0.00 sec)
🧷 % (포함, 시작, 끝)
A로 시작하는 단어 :A%
A로 끝나는 단어 :%A
A가 들어가는 단어 :%A%
소속사 이름의 두번째 글자가 G인 데이터를 검색
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)
직업명이 '가' 로 시작하고 최소 5글자 이상인 데이터 검색
mysql> select * from celeb
-> where job_title like '가____%';
+----+-----------+------------+------+------+-------------------+------------------------+
| ID | NAME | BIRTHDAY | AGE | SEX | JOB_TITLE | AGENCY |
+----+-----------+------------+------+------+-------------------+------------------------+
| 1 | 아이유 | 1993-05-16 | 29 | F | 가수, 탤런트 | EDAM엔터테이먼트 |
+----+-----------+------------+------+------+-------------------+------------------------+
1 row in set (0.00 sec)
🧷 _ (글자수)
❗ 직업이 하나 이상인 연예인 중 영화배우 혹은 텔런트가 아닌 연예인 검색
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, 개그맨 | 안테나 |
+----+-----------+------------+------+------+---------------+-----------+
1 row in set (0.01 sec)
celeb 테이블에서 이름이 두글자인 데이터를 조회하세요
select * from celeb
-> where name like '__';
+----+--------+------------+------+------+-----------+-----------------+
| ID | NAME | BIRTHDAY | AGE | SEX | JOB_TITLE | AGENCY |
+----+--------+------------+------+------+-----------+-----------------+
| 3 | 송강 | 1994-04-23 | 28 | M | 탤런트 | 나무엑터스 |
+----+--------+------------+------+------+-----------+-----------------+
1 row in set (0.00 sec)
❗ celeb 테이블에서 아이유, 이미주, 송강, 이수현 중에 가수만 직업으로 가졌거나,가수를 병행하지 않고 텔런트를 하는 사람을 찾으세요.
mysql> select * from celeb
-> where name in ('아이유','이미주','송강','이수현')
-> and ( job_title like '가수' or ( not job_title like '%가수%' and job_title like '%탤런트%'));
+----+-----------+------------+------+------+-----------+--------------------------+
| ID | NAME | BIRTHDAY | AGE | SEX | JOB_TITLE | AGENCY |
+----+-----------+------------+------+------+-----------+--------------------------+
| 2 | 이미주 | 1994-09-23 | 28 | F | 가수 | 울림엔터테이먼트 |
| 3 | 송강 | 1994-04-23 | 28 | M | 탤런트 | 나무엑터스 |
| 7 | 이수현 | 1999-05-04 | 23 | F | 가수 | YG엔터테이먼트 |
+----+-----------+------------+------+------+-----------+--------------------------+
3 rows in set (0.00 sec)