[혼공학습단, 혼공SQL] 3주차 Chap 04. SQL 고급 문법

Jihun Kim·2023년 7월 21일
0
post-thumbnail

혼자 공부하는 SQL - 3주차

  • 3주차의 분량은 다음과 같습니다.
  • 이번 장에서는 SQL 고급 문법에 대해 공부했습니다.

4.1 MySQL의 데이터 형식

데이터 형식

  • MySQL에서 제공하는 데이터 형식의 종류는 수십 개 정도, 각 데이터 형식마다 크기, 표현 범위가 다릅니다.
  • 데이터 형식은 다음과 같습니다.
  • 정수형 : 소수점이 없는 숫자로, tinyint, smallint, int, bigint가 있으며, int를 가장 많이 사용합니다.
  • 문자형 : 문자형은 글자를 저장하기 위해 사용하며 입력 최대 글자수를 지정해야 합니다. char, varchar 가 있는데 char은 자릿수가 고정되고 varchar은 가변길이 문자형입니다. 데이터 글자수가 같을 경우 char, 다를 경우 varchar을 사용합니다.
  • 실수형 : 실수형은 소수점이 있는 숫자로, float, double이 존재합니다. 거의 비슷하며 과학 기술용 데이터가 아닌 이상 float으로 충분합니다.

형 변환

  • 날짜형 : 날짜, 시간을 저장할 때 사용하며, date, time, datetime이 있습니다.
  • 문자형 -> 정수형 또는 그 반대로 바꾸는 것을 데이터의 형 변환이라고 합니다. 명시적인 변환과 암시적인 변환이 있습니다.
  • 함수를 이용한 명시적인 변환은 cast(), convert() 함수 두 가지가 있습니다.
cast (값 as 데이터_형식 [(길이)]
convert (값, 데이터 형식 [(길이)]
  • 암시적인 변환은 자연스럽게 형이 변환되는 것을 말합니다.
select '100' + '200';
+---------------+
| '100' + '200' |
+---------------+
|           300 |
+---------------+
1 row in set (0.00 sec)

4.2 두 테이블을 묶는 조인

  • 조인은 두 개의 테이블을 서로 묶어 하나의 결과를 만들어 내는 것으로 두 테이블을 엮어야 원하는 형태가 나오는 것을 말합니다.

내부 조인

  • 내부조인은 두 테이블을 연결할 때 가장 많이 사용하며, 그냥 조인이라 부르면 대부분 내부 조인입니다.
  • 형식은 다음과 같습니다.
select <열 목록>
from <첫 번째 테이블>
    inner join <두 번째 테이블>
    on <조인될 조건>
[where 검색 조건]
  • 두 개의 테이블을 조인하는 경우 동일한 열 이름이 존재한다면 꼭 테이블이름.열이름으로 표기해야 합니다.

외부 조인

  • 외부 조인은 두 테이블을 조인할 때 필요한 내용이 한쪽 테이블에만 있어도 결과 추출이 가능합니다.
select <열 목록>
from <첫 번째 테이블(left 테이블)>
    <left | right | full> outer join <두 번째 테이블(right 테이블)>
    on <조인될 조건>
[where 검색 조건];
  • 내부 조인과는 달리 한쪽에만 있는 데이터도 가져올 수 있으며, 없는 경우 NULL 로 표시됩니다.

4.3 SQL 프로그래밍

  • 스토어드 프로시저는 MySQL에서 프로그래밍 기능이 필요할 때 사용하는 데이터베이스 객체입니다.
delimiter $$
create procedure 스토어드_프로시저_이름()
begin
    (sql 프로그래밍 코딩)
end $$
delimiter ;
call 스토어드_프로시저_이름();

if 문 / if ~ else 문

if <조건식> then
    SQL 문장들
else
	SQL 문장들
end if;
  • 조건식이 참이라면 if문 아래 문장, 아니라면 else 아래 문장을 실행합니다.

case 문

CASE
    WHEN 조건 1 THEN
        SQL 문장들1
    WHEN 조건 2 THEN
        SQL 문장들2
    WHEN 조건 3 THEN
        SQL 문장들3
    ELSE
        SQL 문장들4
END CASE;

WHILE 문

WHILE <조건식> DO
    SQL 문장들
END WHILE;

동적 SQL

  • SQL문은 내용이 고정되어 있는 경우가 대부분인데, 동적 SQL문을 사용해 변경되는 내용을 실시간으로 적용시켜 사용이 가능합니다.
create table gate_table(id int auto_increment primary key, entry_time datetime);
set @curDate = current_timestamp();
prepare myQuery from 'insert into gate_table values(null, ?)';
execute myQuery using @curDate;
deallocate prepare myQuery;
select * from gate_table;
+----+---------------------+
| id | entry_time          |
+----+---------------------+
|  1 | 2023-07-21 17:54:15 |
+----+---------------------+

기본 미션

  • 다음 SQL은 회원으로 가입만 하고, 한 번도 구매한 적이 없는 회원의 목록입니다. 빈칸을 채우세요.
select distinct M.mem_id, B.prod_name, M.mem_name, M.addr
	from membber M
    	left outer join buy B
        on M.mem_id = B.mem_id
	빈칸
order by M.mem_id;
  • 빈칸에 들어갈 답은 where B.prod_name is NULL 입니다.
  • having 의 경우는 group by 절에서 조건을 추가할 때 사용합니다.

선택 미션

  • 중복된 결과 1개만 출력하기 손코딩 실행 및 결과화면 인증.
  • DISTINCT를 사용해 중복된 결과를 제거할 수 있습니다.

mysql> select distinct M.mem_id, M.mem_name, M.addr
    -> from buy B
    -> inner join member M
    -> on B.mem_id = M.mem_id
    -> order by M.mem_id;
+--------+--------------+--------+
| mem_id | mem_name     | addr   |
+--------+--------------+--------+
| APN    | 에이핑크     | 경기   |
| BLK    | 블랙핑크     | 경남   |
| GRL    | 소녀시대     | 서울   |
| MMU    | 마마무       | 전남   |
+--------+--------------+--------+
4 rows in set (0.01 sec)
profile
backend studying

0개의 댓글