Concat

Jane의 study note.·2022년 12월 2일
0

MySQL

목록 보기
10/17

실습환경 만들기

use zerobase;

1. Concat

  1. CONCAT(p6~7): 여러 문자열을 하나로합치거나 연결
  2. CONCAT 문법 (p8)
SELECT CONCAT('string1', 'string2',..); 
  1. CONCAT 예제 - 1 (p9)
SELECT CONCAT('concat', ' ', 'test'); 

+-------------------------------+
| CONCAT('concat', ' ', 'test') |
+-------------------------------+
| concat test                              |
+-------------------------------+
  1. CONCAT 예제 - 2 (p10)
SELECT CONCAT('이름:', name) FROM celeb; 
| CONCAT('이름:', name) |
+-----------------------+
| 이름:아이유           |
| 이름:이미주           |
| 이름:송강               |
| 이름:강동원           |
| 이름:유재석           |
| 이름:차승원           |
| 이름:이수현           |

2. alias

  1. ALIAS (p11~12): 칼럼이나 테이블 이름에 별칭 생성
  2. ALIAS 문법 1 - Column (p13)
칼럼이름에별칭생성
SELECT column AS ALIAS
FROM tablename;
  1. ALIAS 문법 1 - Table (p14)
테이블이름에별칭생성
SELECT column1, column2, ...
FROM tablename AS ALIAS;
  1. ALIAS 예제 - 1~5 (p15~20)
#1.
name 을이름으로별칭을만들어서검색
SELECT name as '이름' 
FROM celeb;

 이름   |
+--------+
| 아이유 |
| 이미주 |

#2.
name 은이름으로, agency 는소속사로별칭을만들어서검색

SELECT name as '이름', agency as '소속사' 
FROM celeb;
=> 이름 다음에 콤마 있어야함

 이름   | 소속사           |
+--------+------------------+
| 아이유 | EDAM엔터테이먼트 |
| 이미주 | 울림엔터테이먼트

#3. 
name 과 job_title 을합쳐서 profile 이라는별칭을만들어서검색

select CONCAT(name, ' : ', job_title) as profile FROM celeb;

 profile                   |
+---------------------------+
| 아이유 : 가수, 텔런트     |

#4. 
snl_korea 에출연한 celeb 을기준으로두테이블을조인하여,
celeb 테이블은 c, snl_show 테이블은 s 라는별칭을만들어서출연한시즌과에피소드, 이름, 직업을검색

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 | 강동원 | 영화배우, 텔런트

#5.
snl_korea 에출연한 celeb 을기준으로두테이블을조인하여다음과같이각데이터의별칭을사용하여검색
- 시즌, 에피소드, 방송일을합쳐서 ‘방송정보’
- 이름, 직업을합쳐서 ‘출연자정보’

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) | 이수현(가수)

3. concat alias

  1. 문제2개 (p23~24)
  • 이름이 3글자인연예인정보를검색하여다음과같이출력하세요.
SELECT CONCAT('이름 :', name,' , ', '소속사 :', agency )
AS '연예인 정보'
FROM celeb
WHERE name like'___';

=> 언더바3, 이름이 3글자인
- select문에서 가독성을 위해 ' , ', 추가해줌
=> 컬럼명을 AS '연예인 정보'로 명시

| 연예인 정보                             |
+-----------------------------------------+
| 이름 :아이유 , 소속사 :EDAM엔터테이먼트 |
| 이름 :이미주 , 소속사 :울림엔터테이먼트 |

- 앞글자가 2글자이고, ‘엔터테이먼트’ 로끝나는소속사연예인중
SNL 에출연한연예인의신상정보(나이, 성별)와출연정보(시즌-에피소드, 방송날짜), 소속사정보를 방송날짜최신순으로정렬하여다음과같이검색하세요. 

SELECT agency AS '소속사 정보', 
CONCAT ('나이 :',age, '(',sex,')') AS '신상정보', CONCAT(season, '-', episode, ', ','방송날짜 :', broadcast_date ) AS '출연정보'
FROM celeb as c, snl_show as s
WHERE c.name = s.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  |

4. distinct

DISTINCT
검색한결과의중복제거

DISTINCT 문법

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

DISTINCT 예제 - 1
연예인소속사종류를검색 - 중복포함

SELECT agency FROM celeb;

DISTINCT 예제 - 1
연예인소속사종류를검색 - 중복제외 (DISTINCT)

SELECT DISTINCT agency FROM celeb;

DISTINCT 예제 - 2
가수중에서, 성별과직업별종류를검색 - 중복포함

SELECT sex, job_title FROM celeb WHERE job_title like '%가수%';

가수중에서, 성별과직업별종류를검색 - 중복제외 (DISTINCT)

SELECT DISTINCT sex, job_title FROM celeb WHERE job_title like '%가수%';
=> | F    | 가수         |1번만 출력됨

p33
- celeb 테이블에서성별과소속사별종류를검색하여성별, 소속사순으로정렬하세요.

select distinct sex, agency
from celeb
order by sex, agency ASC;

| sex  | agency           |
+------+------------------+
| F    | EDAM엔터테이먼트 |
| F    | YG엔터테이먼트   |
| F    | 울림엔터테이먼트 |
| M    | YG엔터테이먼트   |
| M    | 나무엑터스       |
| M    | 안테나

5. limit

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

LIMIT 문법

LIMIT 예제 - 1
celeb 데이터 3개만가져오기

SELECT * FROM celeb 
LIMIT 3;
=> id 1~3가져옴

나이가가장적은연예인 4명을검색

SELECT * FROM celeb ORDER BY age LIMIT 4;
=> LIMITORDER BY 뒤에 써줘야 에러안뜸

문제1~2 (p42~43)

  • celeb 테이블에서남자연예인중나이가가장많은 2명을조회하세요.
select * from celeb 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엔터테이먼트 |

- SNL에출연한연예인의정보를최신방송날짜순으로 2개만검색하여다음과같이출력하세요.
SELECT CONCAT('SNL 시즌 ',season ,'에피소드',episode, ' 호스트 ', host)AS 'SNL 방송정보' ,age
FROM celeb, snl_show
WHERE name = host
ORDER BY broadcast_date DESC
LIMIT 2;

| SNL 방송정보                       | age  |
+------------------------------------+------+
| SNL 시즌 8에피소드10 호스트 이수현 |   23 |
| SNL 시즌 8에피소드9 호스트 차승원  |   48 |

※최신방송날짜 순 확인해봄
select host, broadcast_date
from celeb, snl_show
where name = host
order by broadcast_date DESC;

문제오류=> 강의자료의 출력결과는 나이순이었음

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 |

0개의 댓글