celeb table과 snl_show table 두 개의 table을 사용하여 실습을 진행해보자.
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)
mysql> select * from snl_show;
+----+--------+---------+----------------+-----------+
| ID | SEASON | EPISODE | BROADCAST_DATE | HOST |
+----+--------+---------+----------------+-----------+
| 1 | 8 | 7 | 2020-09-05 | 강동원 |
| 2 | 8 | 8 | 2020-09-12 | 유재석 |
| 3 | 8 | 9 | 2020-09-19 | 차승원 |
| 4 | 8 | 10 | 2020-09-26 | 이수현 |
| 5 | 9 | 1 | 2021-09-04 | 이병헌 |
| 6 | 9 | 2 | 2021-09-11 | 하지원 |
| 7 | 9 | 3 | 2021-09-18 | 제시 |
| 8 | 9 | 4 | 2021-09-25 | 조정석 |
| 9 | 9 | 5 | 2021-10-02 | 조여정 |
| 10 | 9 | 6 | 2021-10-09 | 옥주현 |
+----+--------+---------+----------------+-----------+
10 rows in set (0.00 sec)
여러 문자열을 하나로 합치거나 연결할 때 사용.
select concat('string1', 'string2', ...);
ex) 일반 문자열 합치기(공백도 문자)
mysql> select concat('concat', ' ', 'test');
+-------------------------------+
| concat('concat', ' ', 'test') |
+-------------------------------+
| concat test |
+-------------------------------+
1 row in set (0.00 sec)
ex) celeb table의 이름 앞에 '이름 : ***'으로 표시하여 조회
mysql> select concat('이름 : ', name) from celeb;
+---------------------------+
| concat('이름 : ', name) |
+---------------------------+
| 이름 : 아이유 |
| 이름 : 이미주 |
| 이름 : 송강 |
| 이름 : 강동원 |
| 이름 : 유재석 |
| 이름 : 차승원 |
| 이름 : 이수현 |
+---------------------------+
7 rows in set (0.00 sec)
컬럼이나 테이블 이름에 별칭을 생성할 때 사용
'import pandas as pd'에서 as가 alias 줄임말이다.
MySQL에서는 alias는 생략 가능하다.
select column as alias_name from table_name;
column 기존 조회
mysql> select name from celeb;
+-----------+
| name |
+-----------+
| 아이유 |
| 이미주 |
| 송강 |
| 강동원 |
| 유재석 |
| 차승원 |
| 이수현 |
+-----------+
7 rows in set (0.00 sec)
alias 적용
# 1
mysql> select name as '이름' from celeb;
+-----------+
| 이름 |
+-----------+
| 아이유 |
| 이미주 |
| 송강 |
| 강동원 |
| 유재석 |
| 차승원 |
| 이수현 |
+-----------+
7 rows in set (0.00 sec)
# 2 : 'as'를 생략해도 된다.
mysql> select name '이름' from celeb;
+-----------+
| 이름 |
+-----------+
| 아이유 |
| 이미주 |
| 송강 |
| 강동원 |
| 유재석 |
| 차승원 |
| 이수현 |
+-----------+
7 rows in set (0.00 sec)
concat와 함께 사용해보자.
mysql> select concat(name, ' : ', job_title) as profile from celeb;
+-------------------------------------+
| profile |
+-------------------------------------+
| 아이유 : 가수, 텔런트 |
| 이미주 : 가수 |
| 송강 : 텔런트 |
| 강동원 : 영화배우, 텔런트 |
| 유재석 : MC, 개그맨 |
| 차승원 : 영화배우, 모델 |
| 이수현 : 가수 |
+-------------------------------------+
7 rows in set (0.00 sec)
select column1, column2, ... from tableA as alias_name1, tableB as alias_name2, ...
table 두 개 이상일 때, 해당 column을 불러올 시 어느 table의 column인지 명시하여야 한다. 그 때 table 이름을 모두 적기엔 번거로우니 alias를 사용하여 table 이름을 줄여서 사용한다.
ex) celeb의 셀럽 데이터에 있으면서, snl_show에 출연한 셀럽의 데이터의 snl_show의 시즌과 에피소드, celeb의 이름과 직업을 조회
mysql> select s.season, s.episode, c.name, c.job_title
-> from celeb as c, snl_show as s
-> where c.name = s.host;
+--------+---------+-----------+-------------------------+
| season | episode | name | job_title |
+--------+---------+-----------+-------------------------+
| 8 | 7 | 강동원 | 영화배우, 텔런트 |
| 8 | 8 | 유재석 | MC, 개그맨 |
| 8 | 9 | 차승원 | 영화배우, 모델 |
| 8 | 10 | 이수현 | 가수 |
+--------+---------+-----------+-------------------------+
4 rows in set (0.00 sec)
ex) snl_show에 출연한 celeb을 기준으로, 다음과 같이 통합하여 조회하자.
mysql> select concat(s.season, '-', s.episode, '(', s.broadcast_date, ')') as '방송 정보',
-> concat(c.name, '(', c.job_title, ')') as '출연자 정보'
-> from celeb c, snl_show s
-> where c.name = s.host;
+------------------+------------------------------------+
| 방송 정보 | 출연자 정보 |
+------------------+------------------------------------+
| 8-7(2020-09-05) | 강동원(영화배우, 텔런트) |
| 8-8(2020-09-12) | 유재석(MC, 개그맨) |
| 8-9(2020-09-19) | 차승원(영화배우, 모델) |
| 8-10(2020-09-26) | 이수현(가수) |
+------------------+------------------------------------+
4 rows in set (0.00 sec)
조회한 결과의 중복을 제거할 때 사용
select distinct column1, column2, ... from table_name;
중복 제거 전
mysql> select agency from celeb;
+--------------------------+
| agency |
+--------------------------+
| EDAM엔터테이먼트 |
| 울림엔터테이먼트 |
| 나무엑터스 |
| YG엔터테이먼트 |
| 안테나 |
| YG엔터테이먼트 |
| YG엔터테이먼트 |
+--------------------------+
7 rows in set (0.00 sec)
중복 제거 후
mysql> select distinct agency from celeb;
+--------------------------+
| agency |
+--------------------------+
| EDAM엔터테이먼트 |
| 울림엔터테이먼트 |
| 나무엑터스 |
| YG엔터테이먼트 |
| 안테나 |
+--------------------------+
5 rows in set (0.00 sec)
ex) celeb table의 가수 중에서 성별과 직업을 조회
# 중복 제거 전
mysql> select sex, job_title
-> from celeb
-> where job_title like '%가수%';
+------+-------------------+
| sex | job_title |
+------+-------------------+
| F | 가수, 텔런트 |
| F | 가수 |
| F | 가수 |
+------+-------------------+
3 rows in set (0.00 sec)
# 중복 제거 후
mysql> select distinct sex, job_title
-> from celeb
-> where job_title like '%가수%';
+------+-------------------+
| sex | job_title |
+------+-------------------+
| F | 가수, 텔런트 |
| F | 가수 |
+------+-------------------+
2 rows in set (0.00 sec)
distinct를 사용하는 경우 정렬(order by)은 사용할 수 없다.
정렬된 순으로 조회할 때, 주어진 숫자 만큼만 조회
select column1, column2, ...
from table_name
where condition
limit number;
ex) celeb table에서 나이 순으로 정렬하여 조회할 때 3행까지만 조회
mysql> select *
-> from celeb
-> order by age
-> limit 3;
+----+-----------+------------+------+------+-----------+--------------------------+
| ID | NAME | BIRTHDAY | AGE | SEX | JOB_TITLE | AGENCY |
+----+-----------+------------+------+------+-----------+--------------------------+
| 7 | 이수현 | 1999-05-04 | 23 | F | 가수 | YG엔터테이먼트 |
| 2 | 이미주 | 1994-09-23 | 28 | F | 가수 | 울림엔터테이먼트 |
| 3 | 송강 | 1994-04-23 | 28 | M | 텔런트 | 나무엑터스 |
+----+-----------+------------+------+------+-----------+--------------------------+
3 rows in set (0.00 sec)