SQL 기초 - CONCAT, ALIAS, DISTINCT, LIMIT

Yang HyunIl·2023년 2월 8일
0

SQL

목록 보기
8/14
post-thumbnail

실습 데이터 확인

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     | 옥주현 |
+----+--------+---------+----------------+--------+

🔴CONCAT

  • 여러 문자열을 하나로 합치거나 연결

문법

SELECT CONCAT('string1', 'string2', ...);

예제 1

mysql> select concat ('concat', ' ', 'test');
+--------------------------------+
| concat ('concat', ' ', 'test') |
+--------------------------------+
| concat test                    |
+--------------------------------+

예제 2

mysql> select concat('이름: ', name) from celeb;
+------------------------+
| concat('이름: ', name) |
+------------------------+
| 이름: 아이유           |
| 이름: 이미주           |
| 이름: 송강             |
| 이름: 강동원           |
| 이름: 유재석           |
| 이름: 차승원           |
| 이름: 이수현           |
+------------------------+

🔴ALIAS

  • 칼럼이나 테이블 이름에 별칭 생성

문법

Column

SELECT column as alias
FROM tablename;

Table

SELECT column1, column2, ...
FROM tablename as alias;

예제 1

  • name을 '이름'으로 별칭을 만들어서 검색
mysql> select name as '이름' from celeb;
+--------+
| 이름   |
+--------+
| 아이유 |
| 이미주 |
| 송강   |
| 강동원 |
| 유재석 |
| 차승원 |
| 이수현 |
+--------+

예제 2

  • name은 '이름'으로, agency는 '소속사'로 별칭을 만들어서 검색
mysql> select name as '이름', agency as '소속사' from celeb;
+--------+------------------+
| 이름   | 소속사           |
+--------+------------------+
| 아이유 | EDAM엔터테인먼트 |
| 이미주 | 울림엔터테인먼트 |
| 송강   | 나무엑터스       |
| 강동원 | YG엔터테인먼트   |
| 유재석 | 안테나           |
| 차승원 | YG엔터테인먼트   |
| 이수현 | YG엔터테인먼트   |
+--------+------------------+

예제 3

  • name과 job_title을 합쳐서 profile이라는 별칭을 만들어 검색
mysql> select concat(name, ' : ', job_title) as profile from celeb;
+---------------------------+
| profile                   |
+---------------------------+
| 아이유 : 가수, 탤런트     |
| 이미주 : 가수             |
| 송강 : 탤런트             |
| 강동원 : 영화배우, 탤런트 |
| 유재석 : MC, 개그맨       |
| 차승원 : 영화배우, 모델   |
| 이수현 : 가수             |
+---------------------------+

예제 4

  • snl_show에 출연한 celeb을 기준으로 두 테이블을 join하여 celeb 테이블은 c, snl_show테이블은 s라는 별칭을 만들어 출연한 시즌과 에피소드, 이름, 직업을 검색
mysql> select s.season, s.episode, c.name, c.job_title
    -> from celeb as c, snl_show as s
    -> where name=host;
+--------+---------+--------+------------------+
| season | episode | name   | job_title        |
+--------+---------+--------+------------------+
|      8 |       7 | 강동원 | 영화배우, 탤런트 |
|      8 |       8 | 유재석 | MC, 개그맨       |
|      8 |       9 | 차승원 | 영화배우, 모델   |
|      8 |      10 | 이수현 | 가수             |
+--------+---------+--------+------------------+

예제 5

  • snl_show에 출연한 celeb을 기준으로 두 테이블을 조인하여 다음과 같이 각 데이터의 별칭을 사용하여 검색
    • 시즌, 에피소드, 방송일을 합쳐서 '방송정보'
    • 이름, 직업을 합쳐서 '출연자정보'
mysql> select concat (season, '-', episode, '-', '(', broadcast_date, ')') '방송정보',
    ->        concat (name, ':', job_title) '출연자정보'
    -> from celeb, snl_show
    -> where name=host;
+-------------------+-------------------------+
| 방송정보          | 출연자정보              |
+-------------------+-------------------------+
| 8-7-(2020-09-05)  | 강동원:영화배우, 탤런트 |
| 8-8-(2020-09-12)  | 유재석:MC, 개그맨       |
| 8-9-(2020-09-19)  | 차승원:영화배우, 모델   |
| 8-10-(2020-09-26) | 이수현:가수             |
+-------------------+-------------------------+

🔺 AS 생략 가능

예제 6

  • 이름이 3글자인 연예인 정보를 검색하여 다음과 같이 출력하세요.
mysql> select concat('이름 :', name, ', ', '소속사 :', agency) as '연예인 정보' from celeb
    -> where name like '___';
+----------------------------------------+
| 연예인 정보                            |
+----------------------------------------+
| 이름 :아이유, 소속사 :EDAM엔터테인먼트 |
| 이름 :이미주, 소속사 :울림엔터테인먼트 |
| 이름 :강동원, 소속사 :YG엔터테인먼트   |
| 이름 :유재석, 소속사 :안테나           |
| 이름 :차승원, 소속사 :YG엔터테인먼트   |
| 이름 :이수현, 소속사 :YG엔터테인먼트   |
+----------------------------------------+

예제 7

  • 앞글자가 2글자이고, ‘엔터테인먼트’ 로 끝나는 소속사 연예인 중 SNL 에 출연한 연예인의 신상정보(나이, 성별)와 출연정보(시즌-에피소드, 방송날짜), 소속사 정보를 방송날짜 최신순으로 정렬하여 다음과 같이 검색하세요.
mysql> select agency as '소속사 정보', concat('나이 :', age, '(', sex, ')') as '신상정보',
    -> concat (season,'-',episode,', ','방송날짜 :',broadcast_date) '출연정보'
    -> from celeb, snl_show
    -> where name=host and agency like '__엔터테인먼트' order by broadcast_date desc;
+----------------+-------------+----------------------------+
| 소속사 정보    | 신상정보    | 출연정보                   |
+----------------+-------------+----------------------------+
| YG엔터테인먼트 | 나이 :23(F) | 8-10, 방송날짜 :2020-09-26 |
| YG엔터테인먼트 | 나이 :48(M) | 8-9, 방송날짜 :2020-09-19  |
| YG엔터테인먼트 | 나이 :41(M) | 8-7, 방송날짜 :2020-09-05  |
+----------------+-------------+----------------------------+

🔴DISTINCT

  • 검색한 결과의 중복 제거

문법

SELECT DISTINCT column1, column2, ...
FROM tablename;

예제 1

  • 연예인 소속사 종류를 검색 - 중복 제외
mysql> select distinct agency from celeb;
+------------------+
| agency           |
+------------------+
| EDAM엔터테인먼트 |
| 울림엔터테인먼트 |
| 나무엑터스       |
| YG엔터테인먼트   |
| 안테나           |
+------------------+

예제 2

  • 가수 중에서, 성별과 직업별 종류를 검색 - 중복 제외
mysql> select distinct sex, job_title from celeb where job_title like '%가수%';
+------+--------------+
| sex  | job_title    |
+------+--------------+
| F    | 가수, 탤런트 |
| F    | 가수         |
+------+--------------+

예제 3

  • celeb테이블에서 성별과 소속사 별 종류를 검색하여 성별, 소속사 순으로 정렬
mysql> select distinct sex, agency from celeb order by sex, agency;
+------+------------------+
| sex  | agency           |
+------+------------------+
| F    | EDAM엔터테인먼트 |
| F    | YG엔터테인먼트   |
| F    | 울림엔터테인먼트 |
| M    | YG엔터테인먼트   |
| M    | 나무엑터스       |
| M    | 안테나           |
+------+------------------+

🔴LIMIT

  • 검색결과를 정렬된 순으로 주어진 숫자만큼만 조회

문법

SELECT column1, column2, ...
FROM tablename
WHERE condition
LIMIT number;

예제 1

  • celeb 데이터 3개만 가져오기
mysql> select * from celeb limit 3;
+----+--------+------------+------+------+--------------+------------------+
| 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    | 탤런트       | 나무엑터스       |
+----+--------+------------+------+------+--------------+------------------+

예제 2

  • 나이가 가장 적은 연예인 4명을 검색
mysql> select * from celeb order by age limit 4;
+----+--------+------------+------+------+--------------+------------------+
| 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    | 탤런트       | 나무엑터스       |
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트 | EDAM엔터테인먼트 |
+----+--------+------------+------+------+--------------+------------------+

예제 3

  • celeb테이블에서 남자 연예인 중 나이가 가장 많은 2명 조회
mysql> select * from celeb where sex='M' order by age desc limit 2;
+----+--------+------------+------+------+----------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE      | AGENCY         |
+----+--------+------------+------+------+----------------+----------------+
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨     | 안테나         |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델 | YG엔터테인먼트 |
+----+--------+------------+------+------+----------------+----------------+

예제 4

  • SNL에 출연한 연예인의 정보를 나이순으로 2개만 검색하여 다음과 같이 출력
mysql> select concat('SNL 시즌 ', season, ' ', '에피소드 ',episode,' ','호스트 ',host) as 'SNL 방송정보', age
    -> from celeb, snl_show
    -> where name=host order by age desc limit 2;
+-------------------------------------+------+
| SNL 방송정보                        | age  |
+-------------------------------------+------+
| SNL 시즌 8 에피소드 8 호스트 유재석 |   50 |
| SNL 시즌 8 에피소드 9 호스트 차승원 |   48 |
+-------------------------------------+------+
profile
ヾ(•ω•`)o

0개의 댓글