[zerobase_데이터취업스쿨] SQL_CH9_10~CH12_01 [aws rds 사용하기, selfjoin문풀, CONCAT, ALIAS, DISTINCT, LIMIT]

DONGYOON KIM·2024년 1월 16일

SQL

목록 보기
4/14

SQL_CH9_10~

CH9_10: SELF JOIN 문제풀이

SNL_SHOW에 출연한 CELEB테이블의 연예인 중, 영화배우나 탤런트가 아닌 연예인의 아이디, 이름, 직업, 에피소드 정보를 검색

mysql> SELECT CELEB.ID, NAME, JOB_TITLE, SEASON, EPISODE
    -> FROM CELEB, SNL_SHOW
    -> WHERE NAME = HOST
    -> AND NOT (JOB_TITLE LIKE '%영화배우%' OR JOB_TITLE LIKE '%탤런트%');
+----+--------+------------+--------+---------+
| ID | NAME   | JOB_TITLE  | SEASON | EPISODE |
+----+--------+------------+--------+---------+
|  5 | 유재석 | MC, 개그맨 |      8 |       8 |
|  7 | 이수현 | 가수       |      8 |      10 |
+----+--------+------------+--------+---------+
2 rows in set (0.00 sec)

CH9_11: SELF JOIN 문제 풀이 2

SNL_SHOW에 출연한 CELEB 중, 작년 9월 15일 이후에 출연했거나 소속사 이름이 ‘엔터테이먼트’로 끝나지 않으면서 영화배우나 개그맨이 아닌 연예인의 CELEB 아이디, 이름, 직업, 소속사 검색

mysql> SELECT CELEB.ID, NAME, JOB_TITLE, AGENCY FROM CELEB, SNL_SHOW
    -> WHERE NAME = HOST
    -> AND (BROADCAST_DATE >= '2020-09-15' OR NOT AGENCY LIKE '%엔터테이먼트')
    -> AND NOT (JOB_TITLE LIKE '%영화배우%' OR JOB_TITLE LIKE '%개그맨%');
+----+--------+-----------+----------------+
| ID | NAME   | JOB_TITLE | AGENCY         |
+----+--------+-----------+----------------+
|  7 | 이수현 | 가수      | YG엔터테이먼트 |
+----+--------+-----------+----------------+
1 row in set (0.00 sec)

CH10_01~03: CONCAT, ALIAS, DISTINCT, LIMIT 이론

CONCAT: 여러 문자열을 하나로 합쳐줌

SELECT CONCAT('CONCAT', ' ', 'TEST');
SELECT CONCAT('이름', NAME) FROM CELEB;

ALIAS: 칼럼이나 테이블이름의 별칭을 생성

SELECT COLUMN AS ALIAS
FROM TABLENAME;

SELECT COL1, COL2,...
FROM TABLENAME AS ALIAS;

NAME 칼럼 이름을 ‘이름’, AGENCY 칼럼 이름을 ‘소속사’로 바꿔 출력하기

NAME과 JOB_TITLE을 합쳐서 PROFILE 이라는 별칭을 만들어서 조회

mysql> SELECT CONCAT(NAME, ':', JOB_TITLE) AS PROFILE FROM CELEB;
+-------------------------+
| PROFILE                 |
+-------------------------+
| 아이유:가수, 탤런트     |
| 이미주:가수             |
| 송강:탤런트             |
| 강동원:영화배우, 탤런트 |
| 유재석:MC, 개그맨       |
| 차승원:영화배우, 모델   |
| 이수현:가수             |
+-------------------------+
7 rows in set (0.00 sec)

SNL_KOREA에 출연한 CELEB을 기준으로 두 테이블을 조인하여, 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 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)

SNL_KOREA에 출연한 CELEB을 기준으로 두 테이블을 조인하여 다음과 같이 각 데이터의 별칭을 사용하여 검색

  • 방송정보: 시즌-에피소드(방송일)
  • 출연자정보: 이름(직업)
mysql> SELECT CONCAT(SEASON,'-',EPISODE,'(',BROADCAST_DATE,')') AS '방송정보',
    -> CONCAT(NAME,'(',JOB_TITLE,')') AS '출연자정보'
    -> 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) | 이수현(가수)             |
+------------------+--------------------------+
4 rows in set (0.00 sec)

ALIAS(별칭)을 정할 때 AS는 생략가능

DISTINCT: 검색된 결과의 중복을 제거해줌

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)

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

mysql> SELECT NAME, AGENCY
    -> FROM CELEB
    -> WHERE NOT AGENCY = 'YG엔터테이먼트'
    -> LIMIT 3;
+--------+------------------+
| NAME   | AGENCY           |
+--------+------------------+
| 아이유 | EDAM엔터테이먼트 |
| 이미주 | 울림엔터테이먼트 |
| 송강   | 나무엑터스       |
+--------+------------------+
3 rows in set (0.00 sec)

mysql> SELECT NAME, AGENCY
    -> FROM CELEB
    -> WHERE NOT AGENCY = 'YG엔터테이먼트'
    -> ;
+--------+------------------+
| NAME   | AGENCY           |
+--------+------------------+
| 아이유 | EDAM엔터테이먼트 |
| 이미주 | 울림엔터테이먼트 |
| 송강   | 나무엑터스       |
| 유재석 | 안테나           |
+--------+------------------+
4 rows in set (0.00 sec)

CH10_04: CONCAT, ALIAS 문제풀이

이름이 3글자인 연예인 정보를 검색하여 다음과 같이 출력하시오

mysql> SELECT CONCAT('이름 :', NAME, ', 소속사:', AGENCY) AS '연예인 정보' FROM CELEB
    -> WHERE NAME LIKE '___';
+---------------------------------------+
| 연예인 정보                           |
+---------------------------------------+
| 이름 :아이유, 소속사:EDAM엔터테이먼트 |
| 이름 :이미주, 소속사:울림엔터테이먼트 |
| 이름 :강동원, 소속사:YG엔터테이먼트   |
| 이름 :유재석, 소속사:안테나           |
| 이름 :차승원, 소속사:YG엔터테이먼트   |
| 이름 :이수현, 소속사:YG엔터테이먼트   |
+---------------------------------------+
6 rows in set (0.00 sec)

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

mysql> SELECT AGENCY '소속사 정보', CONCAT('나이 :', AGE, '(', SEX, ')') '신상정보',
    -> 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  |
+----------------+-------------+---------------------------+
3 rows in set (0.00 sec)

CH10_05: DISTINCT 문제풀이

CELEB 테이블에서 성별과 소속사별 종류를 검색하여 성별, 소속사 순으로 정렬하시오

mysql> SELECT DISTINCT SEX, AGENCY FROM CELEB
    -> ORDER BY SEX, AGENCY;
+------+------------------+
| SEX  | AGENCY           |
+------+------------------+
| F    | EDAM엔터테이먼트 |
| F    | YG엔터테이먼트   |
| F    | 울림엔터테이먼트 |
| M    | YG엔터테이먼트   |
| M    | 나무엑터스       |
| M    | 안테나           |
+------+------------------+
6 rows in set (0.00 sec)

CH10_06: LIMIT 문제풀이

CELEB 테이블에서 남자 연예인 중 나이가 가장 많은 2명 조회하기

mysql> 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엔터테이먼트 |
+----+--------+------------+------+------+----------------+----------------+
2 rows in set (0.00 sec)

SNL에 출연한 연예인의 정보를 최신 방송날짜 순으로 2개만 검색하여 다음과 같이 출력하시오

mysql> SELECT CONCAT('SNL 시즌 ',SEASON,' 에피소드 ',EPISODE,' 호스트  ', HOST) '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 |
+---------------------------------------+------+
2 rows in set (0.00 sec)

CH11_01~09: AWS RDS 설치 및 실습

database(zerobase)를 생성하고 확인하기

mysql> CREATE DATABASE ZEROBASE DEFAULT CHARACTER SET UTF8MB4;
Query OK, 1 row affected (0.01 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| ZEROBASE           |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

유저 zero를 생성하고(외부에서 접근가능하게) 확인

CREATE USER 'zero'@'%' IDENTIFIED BY '비번'
##
USE MYSQL;
SHOW TABLES;
SELECT HOST, USER FROM USER;

사용자(zero)에게 외부에서 zerobase에 접근하여 사용하기 위한 권한 부여

mysql> SHOW GRANTS FOR 'zero'@'%';
+----------------------------------+
| Grants for zero@%                |
+----------------------------------+
| GRANT USAGE ON *.* TO `zero`@`%` |
+----------------------------------+
1 row in set (0.01 sec)

mysql> GRANT ALL PRIVILEGES ON ZEROBASE.* TO 'zero'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW GRANTS FOR 'zero'@'%';
+----------------------------------------------------+
| Grants for zero@%                                  |
+----------------------------------------------------+
| GRANT USAGE ON *.* TO `zero`@`%`                   |
| GRANT ALL PRIVILEGES ON `ZEROBASE`.* TO `zero`@`%` |
+----------------------------------------------------+
2 rows in set (0.01 sec)

현재 접속을 종료하고 AWS RDS(database-1)의 ZEROBASE에 zero로 접속하기

CH12_01: SQL FILE 실습환경 만들기

vs_code로 sql 파일 만들기


0개의 댓글