[MySQL] CONCAT, ALIAS, DISTINCT, LIMIT

Bpius·2023년 11월 11일
0

MySQL

목록 보기
9/15
post-thumbnail

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)

CONCAT

여러 문자열을 하나로 합치거나 연결할 때 사용.

  • 문법

    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)

ALIAS

컬럼이나 테이블 이름에 별칭을 생성할 때 사용
'import pandas as pd'에서 as가 alias 줄임말이다.
MySQL에서는 alias는 생략 가능하다.

  • 문법 1

    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)
  • 문법 2

    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)

DISTINCT

조회한 결과의 중복을 제거할 때 사용

  • 문법

    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)은 사용할 수 없다.

LIMIT

정렬된 순으로 조회할 때, 주어진 숫자 만큼만 조회

  • 문법

    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)
profile
데이터 굽는 타자기

0개의 댓글