[KT AIVLE] 22. SQL(2)

onlyJoon·2023년 5월 14일
0

KT AIVLE

목록 보기
16/31
post-thumbnail

요약

  • MySQL 맛보기

MySQL

  • 오픈소스 RDBMS

실습

  • MySQL의 관리/개발 도구인 'MySQL Workbench'에서 진행

구문 실행 순서

SELECT gender, COUNT(*) AS emp_count --- (1)
	FROM employee					 --- (2)
    WHERE retire_date IS NULL		 --- (3)
    GROUP BY gender					 --- (4)
    ORDER BY gender DESC;			 --- (5)
  • (2)-(3)-(4)-(1)-(5)
  • 'ORDER BY'가 가장 마지막으로 실행: 'SELECT'에서 지정한 별칭(emp_count)을 사용 가능

집계 과정에서 NULL 처리

  • IFNULL, COALESCE 함수 활용

HAVING 절

  • 'GROUP BY'한 결과에 대한 조건
  • 논리적 DB에 대해 동작
  • 성능에 영향을 줄 수 있으므로 되도록 쓰지 않는 것을 권장
  • 'WHERE': 'GROUP BY'이전에 대한 조건 지정 -> 물리적 DB에 대해 동작
  • 'SELECT'에서 지정한 별칭 사용 불가(SELECT보다 먼저 실행됨)
SELECT emp_id, COUNT(duration) AS cnt --- (1)
	FROM vacation					  --- (2)
    WHERE begin_date = '20171231'	  --- (3)
    GROUP BY emp_id					  --- (4)
    HAVING COUNT(duration) >= 3;	  --- (5)
    ORDER BY gender DESC;			  --- (6)
    
-- 'HAVING'절에서는 COUNT(duration)의 별칭인 cnt를 사용 불가
  • (2)-(3)-(4)-(5)-(1)-(6)

순위함수

  • 강사 왈 '순위함수는 끝이 아닌 시작...'
함수순위 결과문법
RANK()1, 2, 2, 4RANK() OVER(순위기준) AS 새 컬럼명
DENSE_RANK()1, 2, 2, 3DENSE_RANK() OVER(순위기준) AS 새 컬럼명
ROW_NUMBER()1, 2, 3, 4ROW_NUMBER() OVER(순위기준) AS 새 컬럼명
nTILE(num)1, 1, 2, 2, 3, 3NTILE(num: 그룹으로 나눌 정수) OVER (순위기준) AS 새 컬럼명
  • 순위기준 예시:
PARTITION BY [컬럼1] ORDER BY [컬럼2]

0과 NULL의 순위

  • 음수의 존재를 생각하면 쉬움
  • 순위: 0 > 음수 > NULL

ELT 함수

  • 숫자에 맞게 값을 지정하는 함수
ELT(숫자, '값1', '값2', '값3')
-- if 숫자 1 then '값1'
-- if 숫자 2 then '값2'
-- if 숫자 3 then '값3'

DML - INSERT

  • 모든 열의 정보가 순서대로 나열될 경우 열 이름을 생략 가능
  • 하지만, 가독성을 위해 열 정보 지정을 권장
INSERT INTO 테이블명(1,2, ...)
	VALUES (1,2, ...), (), (), ...
-- 한 번에 여러 행 추가 가능

DML - UPDATE

  • 테이블에 존재하는 값을 변경
UPDATE 테이블명
	SET 변경 내용
    WHERE 행 조건
  • 여러 번의 UPDATE는 'SAFE UPDATE' 기능에 의해 막힐 수 있음 -> 설정 변경 필요

테이블 복사하기

CREATE TABLE 테이블명
	SELECT * FROM 원본 테이블

DML - DELETE

  • 테이블에 존재하는 값 삭제
DELETE FROM 테이블명
	WHERE 삭제 조건 -- WHERE이 없으면 모든 행(테이블)이 지워짐
  • 모든 행(테이블)을 지워야하는 경우 'TRUNCATE'가 더 빠름

JOIN

종류JOIN 기준기타
(INNER) JOIN양쪽 모두(교집합)디폴트 JOIN
LEFT OUTER JOIN왼쪽 기준
RIGHT OUTER JOIN오른쪽 기준
FULL OUTER JOIN양쪽 모두(합집합)MySQL에는 없음
CROSS JOIN양쪽 모두 (교차가능한 모든 경우의 수)구문에 'ON'이 없음

하위 쿼리

  • 괄호 안에 또 다른 쿼리문이 있는 것
  • 'JOIN'문보다 작성이 쉬운 장점

EXISTS 함수

  • 서브쿼리의 내용이 있는지 없는지만 확인하는 함수
EXISTS(서브 쿼리)

'NOT'과 함께 쓰이는 경우

NOT LIKE
NOT IN
NOT BETWEEN
IS NOT NULL
NOT EXISTS

마무리

  • JOIN과 서브쿼리를 잘 사용하는 것이 SQL에서 중요한 것 같음
profile
A smooth sea never made a skilled sailor

0개의 댓글