ORDER BY문법

데이터 정렬

실습환경 구축

create table celeb
(
    ID int not null auto_increment primary key,
    NAME varchar(32) not null default '',
    BIRTHDAY date,
    AGE int,
    SEX char,
    JOB_TITLE varchar(32),
    AGENCY varchar(32)
);
insert into celeb values (1, '아이유', '1993-05-16', 29, 'F', '가수, 텔런트', 'EDAM엔터테이먼트');
insert into celeb values (2, '이미주', '1994-09-23', 28, 'F', '가수', '울림엔터테이먼트');
insert into celeb values (3, '송강', '1994-04-23', 28, 'M', '텔런트', '나무엑터스');
insert into celeb values (4, '강동원', '1981-01-18', 41, 'M', '영화배우, 텔런트', 'YG엔터테이먼트');
insert into celeb values (5, '유재석', '1972-08-14', 50, 'M', 'MC, 개그맨', '안테나');
insert into celeb values (6, '차승원', '1970-06-07', 48, 'M', '영화배우, 모델', 'YG엔터테이먼트');
insert into celeb values (7, '이수현', '1999-05-04', 23, 'F', '가수', 'YG엔터테이먼트');
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)

🔍ORDER BY문법 : 데이터 정렬해서 가져오기

  • 특정 열을 기준으로 오름차순 or 내림차순으로 정렬
SELECT column1, column2, ...
FROM tablename
ORDER BY column1, column2, ... ASC | DESC;
mysql> select age, name from celeb order by age, name;
+------+--------+
| age  | name   |
+------+--------+
|   23 | 이수현 |
|   28 | 송강   |
|   28 | 이미주 |
|   29 | 아이유 |
|   41 | 강동원 |
|   48 | 차승원 |
|   50 | 유재석 |
+------+--------+
7 rows in set (0.00 sec)

mysql> 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)

연산자

  • 연산자는 where문의 조건으로 사용된다

🔍비교연산자

연산자의미
A = BA와 B가 같음
A > BA가 B보다 큼
A < BA가 B보다 작음
A >= BA가 B보다 크거나 같음
A <= BA가 B보다 작거나 같음
A <> BA가 B보다 크거나 작지 않음(=같지않음)
A != BA와 B는 같지 않음
mysql> select name, age from celeb
    -> where age>29
    -> order by age desc;
+--------+------+
| name   | age  |
+--------+------+
| 유재석 |   50 |
| 차승원 |   48 |
| 강동원 |   41 |
+--------+------+
3 rows in set (0.00 sec)

🔍논리연산자

연산자의미
AND조건을 모두 만족하면 TRUE
OR하나의 조건을 만족하면 TRUE
NOT조건을 만족하지 않으면 TRUE
BETWEEN조건값이 범위에 있으면 TRUE
IN조건값이 목록에 있으면 TRUE
LIKE조건값이 패턴에 맞으면 TRUE
# 전체 데이터 목록
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 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)

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         |
+----+--------+------------+------+------+------------------+----------------+
|  3 | 송강   | 1994-04-23 |   28 | M    | 텔런트           | 나무엑터스     |
|  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)

mysql> select * from celeb
    -> where not agency='YG엔터테이먼트';
+----+--------+------------+------+------+--------------+------------------+
| 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    | 텔런트       | 나무엑터스       |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨   | 안테나           |
+----+--------+------------+------+------+--------------+------------------+
4 rows in set (0.00 sec)

mysql> select * from celeb
    -> where age between 20 and 40
    -> order by age desc;
+----+--------+------------+------+------+--------------+------------------+
| 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    | 텔런트       | 나무엑터스       |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수         | YG엔터테이먼트   |
+----+--------+------------+------+------+--------------+------------------+
4 rows in set (0.00 sec)

mysql> select * from celeb
    -> where not (birthday between 19800101 and 19951231) and sex='F';
+----+--------+------------+------+------+-----------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE | AGENCY         |
+----+--------+------------+------+------+-----------+----------------+
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수      | YG엔터테이먼트 |
+----+--------+------------+------+------+-----------+----------------+
1 row in set (0.00 sec)

mysql> select * from celeb
    -> where agency like 'YG%';
+----+--------+------------+------+------+------------------+----------------+
| 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)

🔍like문법

  • '_' : 글자의 갯수
  • '%' : 임의의 글자
mysql> select * from celeb
    -> where agency like 'YG%';
+----+--------+------------+------+------+------------------+----------------+
| 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)

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)

mysql> select * from celeb
    -> where agency like '__엔터테이%';
+----+--------+------------+------+------+------------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY           |
+----+--------+------------+------+------+------------------+------------------+
|  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엔터테이먼트   |
+----+--------+------------+------+------+------------------+------------------+
4 rows in set (0.00 sec)

데이터 통합문법

UNION, JOIN

🔍UNION 문법 : SQL문 통합해서 하나로 만들기

  • 컬럼 갯수가 동일해야 함
SELECT column1, column2, ... FROM table1
UNION ALL | UNION
SELECT column1, column2, ... FROM table2

UNION ALL : 중복값 포함

mysql> select * from celeb where sex='F'
    -> union all
    -> select * from celeb where agency like 'YG%';
+----+--------+------------+------+------+------------------+------------------+
| 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엔터테이먼트   |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 텔런트 | YG엔터테이먼트   |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트   |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테이먼트   |
+----+--------+------------+------+------+------------------+------------------+
6 rows in set (0.00 sec)

UNION : 중복값 제거

mysql> select * from celeb where sex='F'
    -> union
    -> select * from celeb where agency like 'YG%';
+----+--------+------------+------+------+------------------+------------------+
| 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엔터테이먼트   |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 텔런트 | YG엔터테이먼트   |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트   |
+----+--------+------------+------+------+------------------+------------------+
5 rows in set (0.00 sec)

🔍JOIN 문법 : 집합사용

실습환경 구축

use zerobase;
create table snl_show
(
    ID int not null auto_increment primary key,
    SEASON int not null,
    EPISODE int not null,
    BROADCAST_DATE date,
    HOST varchar(32) not null
);
insert into snl_show values (1, 8, 7, '2020-09-05', '강동원');
insert into snl_show values (2, 8, 8, '2020-09-12', '유재석');
insert into snl_show values (3, 8, 9, '2020-09-19', '차승원');
insert into snl_show values (4, 8, 10, '2020-09-26', '이수현');
insert into snl_show values (5, 9, 1, '2021-09-04', '이병헌');
insert into snl_show values (6, 9, 2, '2021-09-11', '하지원');
insert into snl_show values (7, 9, 3, '2021-09-18', '제시');
insert into snl_show values (8, 9, 4, '2021-09-25', '조정석');
insert into snl_show values (9, 9, 5, '2021-10-02', '조여정');
insert into snl_show values (10, 9, 6, '2021-10-09', '옥주현');
mysql> desc snl_show;
+----------------+-------------+------+-----+---------+----------------+
| Field          | Type        | Null | Key | Default | Extra          |
+----------------+-------------+------+-----+---------+----------------+
| ID             | int         | NO   | PRI | NULL    | auto_increment |
| SEASON         | int         | NO   |     | NULL    |                |
| EPISODE        | int         | NO   |     | NULL    |                |
| BROADCAST_DATE | date        | YES  |     | NULL    |                |
| HOST           | varchar(32) | NO   |     | NULL    |                |
+----------------+-------------+------+-----+---------+----------------+
5 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)

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)

INNER JOIN

  • 두 개의 테이블에서 공통된 요소들을 통해 결합하는 조인방식
SELECT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.column = table2.column
WHERE condition;
mysql> select celeb.id, celeb.name, snl_show.id, snl_show.host
    -> from celeb
    -> inner join snl_show
    -> on celeb.name = snl_show.host;
+----+--------+----+--------+
| id | name   | id | host   |
+----+--------+----+--------+
|  4 | 강동원 |  1 | 강동원 |
|  5 | 유재석 |  2 | 유재석 |
|  6 | 차승원 |  3 | 차승원 |
|  7 | 이수현 |  4 | 이수현 |
+----+--------+----+--------+
4 rows in set (0.00 sec)

LEFT JOIN

  • 두개의 테이블에서 공통영역을 포함해 왼쪽 테이블의 다른 데이터를 포함하는 조인방식
SELECT column1, column2, ...
FROM table1
LEFT JOIN table2
ON table1.column = table2.column
WHERE condition;
mysql> select celeb.id, celeb.name, snl_show.id, snl_show.host
    -> from celeb
    -> left join snl_show
    -> on celeb.name = snl_show.host;
+----+--------+------+--------+
| id | name   | id   | host   |
+----+--------+------+--------+
|  1 | 아이유 | NULL | NULL   |
|  2 | 이미주 | NULL | NULL   |
|  3 | 송강   | NULL | NULL   |
|  4 | 강동원 |    1 | 강동원 |
|  5 | 유재석 |    2 | 유재석 |
|  6 | 차승원 |    3 | 차승원 |
|  7 | 이수현 |    4 | 이수현 |
+----+--------+------+--------+
7 rows in set (0.00 sec)

RIGHT JOIN

  • 두개의 테이블에서 공통영역을 포함해 오른쪽 테이블의 다른 데이터를 포함하는 조인방식
SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2
ON table1.column = table2.column
WHERE condition;
mysql> select celeb.id, celeb.name, snl_show.id, snl_show.host
    -> from celeb
    -> right join snl_show
    -> on celeb.name = snl_show.host;
+------+--------+----+--------+
| id   | name   | id | host   |
+------+--------+----+--------+
|    4 | 강동원 |  1 | 강동원 |
|    5 | 유재석 |  2 | 유재석 |
|    6 | 차승원 |  3 | 차승원 |
|    7 | 이수현 |  4 | 이수현 |
| NULL | NULL   |  5 | 이병헌 |
| NULL | NULL   |  6 | 하지원 |
| NULL | NULL   |  7 | 제시   |
| NULL | NULL   |  8 | 조정석 |
| NULL | NULL   |  9 | 조여정 |
| NULL | NULL   | 10 | 옥주현 |
+------+--------+----+--------+
10 rows in set (0.00 sec)

FULL OUTER JOIN

  • 두개의 테이블에서 공통영역을 포함하여 양쪽 테이블의 다른영역을 모두 포함하는 조인방식
    MySQL에서는 FULL OUTER JOIN를 지원하지 않는다
SELECT column1, column2, ...
FROM table1
LEFT JOIN table2
ON table1.column = table2.column
UNION
SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2
ON table1.column = table2.column
mysql> select celeb.id, celeb.name, snl_show.id, snl_show.host
    -> from celeb
    -> left join snl_show
    -> on celeb.name = snl_show.host
    -> union
    -> select celeb.id, celeb.name, snl_show.id, snl_show.host
    -> from celeb
    -> right join snl_show
    -> on celeb.name = snl_show.host;
+------+--------+------+--------+
| id   | name   | id   | host   |
+------+--------+------+--------+
|    1 | 아이유 | NULL | NULL   |
|    2 | 이미주 | NULL | NULL   |
|    3 | 송강   | NULL | NULL   |
|    4 | 강동원 |    1 | 강동원 |
|    5 | 유재석 |    2 | 유재석 |
|    6 | 차승원 |    3 | 차승원 |
|    7 | 이수현 |    4 | 이수현 |
| NULL | NULL   |    5 | 이병헌 |
| NULL | NULL   |    6 | 하지원 |
| NULL | NULL   |    7 | 제시   |
| NULL | NULL   |    8 | 조정석 |
| NULL | NULL   |    9 | 조여정 |
| NULL | NULL   |   10 | 옥주현 |
+------+--------+------+--------+
13 rows in set (0.00 sec)

SELF JOIN

  • INNER JOIN과 같은 기능을 한다
SELECT column1, column2, ...
FROM table1, table2, ...
WHERE condition;
mysql> select celeb.id, celeb.name, snl_show.id, snl_show.host
    -> from celeb, snl_show
    -> where celeb.name = snl_show.host;
+----+--------+----+--------+
| id | name   | id | host   |
+----+--------+----+--------+
|  4 | 강동원 |  1 | 강동원 |
|  5 | 유재석 |  2 | 유재석 |
|  6 | 차승원 |  3 | 차승원 |
|  7 | 이수현 |  4 | 이수현 |
+----+--------+----+--------+
4 rows in set (0.00 sec)
# 컬럼명이 고유한 경우 테이블을 명시하지 않아도 된다
mysql> select name, season, episode, broadcast_date, agency
    -> from celeb, snl_show
    -> where name = host
    -> and (episode in (7, 9, 10) or agency like 'YG______')
    -> and broadcast_date > '2020-09-15';
+--------+--------+---------+----------------+----------------+
| name   | season | episode | broadcast_date | agency         |
+--------+--------+---------+----------------+----------------+
| 차승원 |      8 |       9 | 2020-09-19     | YG엔터테이먼트 |
| 이수현 |      8 |      10 | 2020-09-26     | YG엔터테이먼트 |
+--------+--------+---------+----------------+----------------+
2 rows in set (0.00 sec)

출력물 커스텀하기

CONCAT ALIAS DISTINCT LIMIT문법

🔍CONCAT : 여러 문자열을 하나로 합치거나 연결

SELECT CONCAT(column1, column2, ...)
FROM tablename
mysql> select concat('이름 :', name,', 소속사 :', agency) as '연예인 정보'
    -> from celeb
    -> where name like '___';
+----------------------------------------+
| 연예인 정보                            |
+----------------------------------------+
| 이름 :아이유, 소속사 :EDAM엔터테이먼트    |
| 이름 :이미주, 소속사 :울림엔터테이먼트     |
| 이름 :강동원, 소속사 :YG엔터테이먼트      |
| 이름 :유재석, 소속사 :안테나             |
| 이름 :차승원, 소속사 :YG엔터테이먼트      |
| 이름 :이수현, 소속사 :YG엔터테이먼트      |
+----------------------------------------+
6 rows in set (0.00 sec)

🔍ALIAS : 칼럼이나 테이블 이름에 별칭 생성

  • as는 생략가능
SELECT column as alias
FROM tablename
>
SELECT A.column
FROM tablename as A
mysql> select c.id, c.name, s.id, s.host
    -> from celeb c, snl_show s
    -> where c.name = s.host;
+----+--------+----+--------+
| id | name   | id | host   |
+----+--------+----+--------+
|  4 | 강동원 |  1 | 강동원 |
|  5 | 유재석 |  2 | 유재석 |
|  6 | 차승원 |  3 | 차승원 |
|  7 | 이수현 |  4 | 이수현 |
+----+--------+----+--------+
4 rows in set (0.00 sec)

CONACAT + ALIAS

mysql> select concat(s.season, '-', s.episode, '(', s.broadcast_date, ')') as '방송정보',
    ->        concat(c.name, '(', c.job_title, ')') as '출연자정보'
    -> from celeb as c, snl_show as 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)

🔍DISTINCT : 중복제거

SELECT DISTINCT column1, column2, ...
FROM tablename
mysql> select distinct agency from celeb;
+------------------+
| agency           |
+------------------+
| EDAM엔터테이먼트 |
| 울림엔터테이먼트 |
| 나무엑터스       |
| YG엔터테이먼트   |
| 안테나           |
+------------------+
5 rows in set (0.00 sec)

🔍LIMIT : 출력갯수제한

SELECT column1, column2 ...
FROM tablename
WHERE condition
LIMIT number;
mysql> select concat('SNL 시즌', s.season, ' 에피소드', s.episode, ' 호스트  ', s.host) as 'SNL 방송정보',
    -> c.age from celeb c, snl_show s
    -> where c.name = s.host
    -> order by age desc
    -> limit 2;
+--------------------------------+------+
| SNL 방송정보                    | age  |
+--------------------------------+------+
| SNL 시즌8 에피소드8 호스트  유재석 |   50 |
| SNL 시즌8 에피소드9 호스트  차승원 |   48 |
+--------------------------------+------+
2 rows in set (0.00 sec)

0개의 댓글