DAY1 현직자가 이야기하는 업계와 데이터 분석가
업계 인재상
데이터 분석가
: 문과적 분석, 이해, 표현, 자기주도 역량에 이과적 기술 역량을 합친 복합적인 포지션
: 자기주도적 역량 필요
: SQL 현장 강의 목표 - 자기주도적 사고 하에 문제를 해결하는 역량 기르기
: HOW? - SQL을 배우고 코딩테스트, 실무 분석 연습을 통해 확고한 기본 기술 역량 구축
진짜 전문가가 되기 위한 과정
: 스스로 이슈 해결하기 - 구글 검색, 챗GPT 적극 활용.
: 스스로 문제 정의하고 해결하기
RDBMS(Relational Database Management System)
데이터베이스
: 체계화된 데이터의 모임으로, 여러 응용 시스템들의 정보를 저장하고 운영할 수 있는 공용 데이터 묶음
: 논리적으로 연관된 하나 이상의 자료 모음
: 데이터를 고도로 구조화해 효율적으로 데이터를 관리함
: DBMS - 데이터베이스를 관리하는 시스템
데이터베이스의 장점
: 데이터 중복 최소화
: 데이터 공유
: 일관성, 무결성, 보안성 유지
: 최신의 데이터 유지
: 데이터의 표준화 가능
: 데이터의 논리적, 물리적 독립성
: 데이터 접근이 용이
: 데이터 저장 공간 절약
데이터베이스의 단점
: 전문가 필요
: 비용 부담
: 복잡한 시스템
관계형 데이터베이스(RDBMS)
: 데이터베이스의 한 종류로, 가장 많이 사용된 데이터베이스
: 역사가 오래되어 신뢰성이 높고 데이터 분류, 정렬, 탐색 속도가 빠름
: 관계형 데이터베이스는 일종의 테이블
: 2차원 테이블(Table) 형식을 사용해 데이터를 정의하고 설명
: 관계형 데이터베이스는 데이터를 속성(Attribute)과 데이터 값(Attribute Value)으로 구조화함
: 데이터의 구조화
- 속성(Attribute)과 데이터 값(Attribute Value) 사이에서 관계(Relation)를 찾아내 테이블 모양의 구조로 도식화
: 테이블=관계
: 컬럼=필드=속성
: 로우=레코드=튜플
Why using MySQL?
: ORACLE은 주로 은행에서 많이 사용함
: 다만 ORACLE은 안정성이 뛰어난 대신 비쌈
: 이로 인해 금융권을 제외한 대부분의 필드는 MySQL 사용
기본키와 외래키
: Primary Key(기본키)
- Primary Key는 한 테이블의 각 로우를 유일하게 식별하게 도와주는 컬럼
- 각 테이블마다 Primary Key가 존재해야 한
- NULL 값을 허용하지 않고, 중복값이 있으면 안 됨(Unique)
: Foreign Key(외래키 또는 외부키)
- Foreign Key는 한 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 키
스키마
: 데이터베이스의 테이블 구조 및 형식, 관계 등의 정보를 형식 언어(formal language)로 기술한 것
: 관계형 데이터베이스를 사용해 데이터를 저장시 가장 먼저 할 일은 컬럼과 테이블을 만드는 것
: 대부분 여러 개의 테이블로 만들고, 각 테이블의 구조, 형식, 관계를 정의함
→ 이를 스키마라고 하며, 일종의 데이터베이스 설계도
: 데이터베이스마다 스키마를 만드는 언어가 존재
: 해당 스키마만 있으면 동일한 구조의 데이터베이스를 만들 수 있음 (데이터 구조 only)
SQL(Structured Query Language)
: RDBMS에서 데이터를 관리하기 위해 사용하는 언어
: 데이터베이스와 관련된 거의 모든 작업에서 사용함
: 데이터베이스마다 문법에 차이가 있으나 기본적으로 표준 SQL을 기본으로 함
: SQL의 종류
- 데이터 정의 언어(DDL, Data Definition Language) : CREATE, ALTER, DROP 등
- 데이터 처리 언어(DML, Data Manipulation Language) : INSERT, UPDATE, DELETE, SELECT 등
- 데이터 제어 언어(DCL, Data Control Language) : GRANT, BEGIN, COMMIT, ROLLBACK 등
SQL 테이블 생성 실습
테이블 생성 및 컬럼 정의
: 숫자 타입
- 컬럼명 타입 UNSIGNED(옵션) NOT NULL(옵션) AUTO_INCREMENT(옵션)
- UNSIGNED : 데이터의 표시 범위를 양수로 고정
- AUTO_INCREMENT : 명시하면 해당 컬럼의 값은 자동으로 숫자가 1씩 증가하여 저장
: 문자 타입 - 컬럼명 타입
: 시간 타입 - 컬럼명 타입
: PRIMARY KEY가 될 컬럼 지정
- PRIMARY KEY(컬럼명)
- PRIMARY KEY로 지정할 컬럼은 널값과 중복이 없어야 함
- 때문에 보통 NOT NULL과 AUTO_INCREMENT가 설정된 경우가 많음
: SHOW TABLE, DESC 테이블명
- 테이블과 테이블 내 컬럼 정보 조회
테이블 내 정보 수정
: 컬럼 추가
- ALTER TABLE 테이블명 ADD COLUMN 추가할 컬럼명 컬럼 타입;
: 타입 변경
- ALTER TABLE 테이블명 MODIFY COLUMN 변경할 컬럼명 변경할 컬럼 타입;
: 이름 변경
- ALTER TABLE 테이블명 CHANGE COLUMN 기존 컬럼명 새 컬럼명 변경할 컬럼 타입;
: 컬럼 삭제
- ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
데이터 CRUD
: 생성(CREATE)
- INSERT INTO 테이블명 VALUES (값1, 값2, ...)
- INSERT INTO 테이블명 (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...)
: 읽기(READ)★
- SELECT * FROM 테이블명
- WHERE 조건
: 수정(UPDATE)
- WHERE와 함께 쓰는 게 일반적
- UPDATE 테이블명 SET 수정하고 싶은 컬럼명='수정하고 싶은 값' WHERE 특정 컬럼='값';
- 다수도 수정 가능 : 수정컬럼1=값1, 수정컬럼2=값2 ... WHERE 특정 컬럼<'값'
: 삭제(DELETE)
- WHERE와 함께 쓰는 게 일반적
- WHERE 없이 쓰면 테이블의 모든 값을 제거함
- DELETE FROM 테이블명 WHERE 컬럼='값';
실습
: lowest_price 라는 컬럼을 추가한 후 값을 넣어라
- ALTER TABLE mytable ADD COLUMN lowest_price INT UNSIGNED;
- UPDATE mytable SET lowest_price=310090 WHERE id=1;
UPDATE mytable SET lowest_price=717190 WHERE id=2;
UPDATE mytable SET lowest_price=256680 WHERE id=3;
UPDATE mytable SET lowest_price=498820 WHERE id=4;
UPDATE mytable SET lowest_price=122480 WHERE id=5;
Day2
SELECT 문법 익히기
SELECT 보조 문법
: LIMIT, COUNT, DISTINCT
: SUM, AVG, MAX, MIN
: GROUP BY, HAVING
: ORDER BY
: AS
SAKILA 데이터 기반 실습
중급 SQL 문법 익히기
외래키(Foreign Key)
: 데이터 무결성을 위한 키(쌍방향)
- 두 테이블간 관계에 있어서, 데이터의 정확성을 보장하는 제약 조건을 넣는 것
- 현업에서는 대개 꼭 필요한 경우에만 넣음
JOIN
: FROM 테이블1 INNER JOIN 테이블2 ON 테이블1과 테이블2의 매칭조건
: FROM 테이블1 JOIN 테이블2 USING (매칭조건)도 가능함
연습문제
: 전체 베스트상품(ALL 메인 카테고리)에서 판매자별 베스트상품 갯수 출력해보기
- SELECT provider, COUNT(*) FROM items JOIN ranking USING (item_code)
WHERE main_category='ALL' GROUP BY provider;
Day3
규칙 만들기
조건 만들기(IF)
: IF(조건식, 참일 때 값, 거짓일 때 값)
- 주로 SELECT 절에서 사용, 결과 값을 새로운 컬럼으로 반환
: IFNULL([컬럼 이름], NULL일 때 값)
- 해당 컬럼의 값이 NULL인 로우에서 NULL일 때의 값을 반환
- 주로 SELECT 절에 사용, 결과 값을 새로운 컬럼으로 반환
여러 조건 한 번에 만들기(CASE)
: 조건을 여러 개 만들 때 사용하는 문법
: CASE
WHEN 조건식1 THEN 결과값1
...
ELSE 결과값n
END
: CASE [컬럼 이름]
WHEN 조건값1 THEN 결과값1
...
ELSE 결과값n
END
: 주로 SELECT 절에서 사용, 결과 값을 새로운 컬럼으로 반환
: ELSE 생략 시 NULL 값 반환
함수 만들기(CREATE FUNCTION)
: CREATE FUNCTION [함수 이름] ([입력값 이름] [데이터 타입], ... )
RETURNS [결과값 데이터 타입]
BEGIN
DECLARE [임시값 이름] [데이터 타입];
SET [임시값 이름]=[입력값 이름];
쿼리;
RETURN 결과값
END
: 주의점
- 사용자 계정에 function create 권한 생성 필요
- SET GLOBAL log_bin_trust_function_creators=1;
: 함수의 시작을 지정하기 위해 쿼리문 윗줄에 DELIMITER // 입력 (띄어쓰기 필수)
: 또한 이를 끝낼 때도 // DELIMITER ; 사용 (띄어쓰기 필수)
실습
: DELIMITER //
CREATE FUNCTION isStrong (attack INT, defense INT)
RETURNS VARCHAR(20)
BEGIN
DECLARE a INT;
DECLARE b INT;
DECLARE isStrong VARCHAR(20);
SET a=attack;
SET b=defense;
SELECT CASE
WHEN a+b>120 THEN 'very strong'
WHEN a+b>90 THEN 'strong'
ELSE 'not strong'
END INTO isStrong;
RETURN isStrong;
END
// DELIMITER ;
테이블 합치기
INNER JOIN
: 기본 JOIN으로 JOIN만 적을 시, 자동으로 INNER JOIN으로 인식
: 두 테이블 모두에 있는 값만 합치기
: SELECT * FROM 테이블1 JOIN 테이블2 ON 1.공통컬럼=2.공통컬럼
LEFT/RIGHT JOIN
: SELECT * FROM 테이블1 LEFT/RIGHT JOIN 테이블2 ON 1.공통컬럼=2.공통컬럼
OUTER/CROSS/SELF JOIN
: OUTER JOIN
- 두 테이블에 있는 모든 값 합치기. MySQL에는 없기 때문에 UNION과 LEFT/RIGHT JOIN 응용
- SELECT * FROM 테이블1 LEFT JOIN 테이블2 ON 1.공통컬럼=2.공통컬럼
UNION ( → 두 쿼리의 결과를 중복 제외 후 합쳐 보여주는 집합 연산자)
SELECT * FROM 테이블1 RIGHT JOIN 테이블2 ON 1.공통컬럼=2.공통컬럼
: CROSS JOIN
- 두 테이블에 있는 모든 값을 각각 합치기
- SELECT * FROM 테이블1 CROSS JOIN 테이블2
- ON 키워드가 필요없음
: SELF JOIN
- 같은 테이블에 있는 값 합치기
- SELECT * FROM 테이블1 AS 1 SELF JOIN 테이블1 AS 2 ON 1.공통컬럼=2.공통컬럼
여러 테이블 한 번에 다루기
데이터에 데이터 더하기
: UNION/UNION ALL
- 쿼리1 UNION/UNION ALL 쿼리2
- 두 쿼리의 결과 값을 합쳐 보여줌
- UNION은 동일한 값을 제외, UNION ALL은 동일한 값도 포함해 보여줌
- 두 쿼리의 결과 값의 개수가 같아야 사용 가능. 만약 다르다면 에러 발생
- ORDER BY는 쿼리의 가장 마지막에서 쿼리1의 컬럼 기준으로만 사용 가능
: SELECT * FROM 테이블1 UNION/UNION ALL SEELCT * FROM 테이블2
데이터에서 데이터 빼기
: MySQL에서는 아래의 표현이 존재하지 않아 JOIN응용
: 교집합 (INTERSECT)
- SELECT * FROM 테이블1 AS 1 INNER JOIN 테이블2 AS 2
ON 1.컬럼1=2.컬럼1 AND ...;
- 교집합을 확인하고 싶은 컬럼은 모두 다 기준으로 두고 합쳐줘야 함
- 같은 이름을 가지는 컬럼이 있다면 SELECT 할 때 어떤 테이블에서 컬럼을 가져올지 명시 필요
- 모든 컬럼의 교집합을 알고 싶다면 ON에 모든 컬럼 기입
: 차집합 (MINUS)
- SELECT * FROM 테이블1 AS 1 LEFT JOIN 테이블2 AS 2
ON 1.컬럼1=2.컬럼2 AND...
WHERE 2.컬럼명 IS NULL;
- 차집합을 확인하고 싶은 컬럼은 모두 다 기준으로 두고 합쳐야 함
실습
: SELECT number, name, 'my' AS whose FROM mypokemon WHERE type='grass'
UNION ALL SELECT number, name, 'friend' AS whose FROM friendpokemon WHERE type='grass';
조건에 조건 더하기
서브쿼리
: 하나의 쿼리 내 포함된 또 하나의 쿼리
: 반드시 괄호 안에 있어야 함
: GROUP BY를 제외한 모든 키워드에서 서브쿼리를 활용 가능
: INSERT, UPDATE, DELETE에서도 사용 가능
: 세미콜론(;)을 붙일 필요가 없음
SELECT 절의 서브 쿼리
: 스칼라 서브쿼리라고도 부름
: SELECT 절의 서브쿼리는 반드시 결과값이 하나의 값이어야 함
: SELECT 컬럼명, (SELECT 컬럼명 FROM 테이블 WHERE 조건식)
FROM 테이블 WHERE 조건식;
FROM 절의 서브 쿼리
: 인라인 뷰 서브쿼리라고도 부름
: FROM절의 서브 쿼리는 반드시 결과값이 하나의 테이블이어야 함
: 서브 쿼리로 만든 테이블은 반드시 별명을 가져야 함
: SELECT 컬럼명
FROM ( SELECT 컬럼명 FROM 테이블 WHERE 조건식) AS 테이블 별명
WHERE 조건식;
WHERE 절의 서브 쿼리
: 중첩 서브쿼리라고도 부름
: WHERE 절의 서브 쿼리는 반드시 결과값이 하나의 컬럼이어야 함 (EXISTS 제외)
- 하나의 컬럼에는 여러 개의 값이 존재 가능
: 연산자와 함께 사용
- 보통 WHERE 컬럼명 연산자 서브쿼리 형식으로 사용
: SELECT 컬럼명 FROM 테이블명
WHERE 컬럼이름 연산자 ( SELECT 컬럼명 FROM 테이블 WHERE 조건식 );
: 서브쿼리에 비교연산자만 사용시, 결과값이 반드시 하나의 값이어야 함
: 주요 연산자 사용 시, WHERE 절의 서브쿼리는 반드시 결과값이 하나의 컬러밍어야 함
: 단 EXISTS는 단독으로 사용 가능하며(예외) 결과값이 여러 컬럼인 것도 가능
알아두면 좋은 고급 기능
데이터 삭제, 수정하기
: 데이터 삭제 - DELETE FROM 테이블 WHERE 조건식;
: 데이터 수정 - UPDATE 테이블 SET 컬럼이름=새 값 WHERE 조건식;
제약 조건
: 데이터를 입력할 때 실행되는 데이터 입력 규칙
: 테이블을 만들거나 변경하면서 설정
: CREATE TABLE 및 ALTER TABLE 구문
: 종류
- NOT NULL (NULL 값 지정 불가능)
- UNIQUE (서로 다른 값을 가져야 함)
- DEFAULT (입력값이 없을 시 기본값을 설정됨)
- PRIMARY KEY (기본 키, NOT NULL과 UNIQUE의 특징을 모두 가짐)
- FOREIGN KEY (외래 키, 다른 테이블의 특정 컬럼 참조)
- FOREIGN KEY는 REFERENCES 테이블의 PRIMARY KEY여야 함
Day 4
MySQL INDEX
OUTER JOIN
: OUTER JOIN은 조인하는 테이블의 ON 절의 조건 중 한쪽의 데이터를 모두 가져옴
: LEFT OUTER JOIN과 RIGHT OUTER JOIN이 있음
SUBQUERY
: SQL문 안에 포함되어 있는 SQL문으로, SQL문 안에 괄호()를 사용해 서브쿼리문을 추가할 수 있음
: 필요한 부분만 먼저 가져와 검색 범위를 좁히는 데 주로 사용
: JOIN과 어느 정도 역할이 겹치는 감이 있음
인덱스
: 데이터베이스에서 동작의 속도를 높여주는 자료 구조
: 어떤 데이터를 인덱스로 만드느냐에 따라 데이터가 큰 경우 성능에 영향을 끼침
: 종류
- 클러스터형 : 사전과 같은 형태로 데이터를 재정렬하여 저장
- 테이블의 데이터를 실제로 재정렬해 디스크에 저장
- 테이블에 PRIMARY KEY가 있을 경우 자동으로 생성됨
- 한 테이블당 하나의 클러스터형 인덱스만 가질 수 있음
- 보조 : 데이터는 그대로 두고, 일반 책 뒤에 있는 <찾아보기> 와 같은 형태를 만듦
- 데이터를 디스크에 재정렬하지 않고, 각 데이터의 위치만 빠르게 찾을 수 있는 구조
- 보조 인덱스의 용량은 보통 테이블보다 작아 저장하는 데 필요한 디스크 공간이 적음
→ 인덱스는 키-필드만 갖고 있고, 나머지 세부 테이블 컬럼 정보는 가지고 있지 않기 때문에
- FOREIGN KEY로 선언한 컬럼이 인덱스가 없다면 보조 인덱스를 자동으로 생성함
- 수정이 많은 데이터의 불필요하게 많은 보조 인덱스는 데이터베이스의 성능을 떨어트릴 수 있음
→ 적당껏 하자
테이블에 제약 추가하기
: ALERT TABLE 테이블이름 ADD [CONSTRAINT 제약조건명] UNIQUE(컬럼명)
- 테이블의 특정 컬럼에 duplicate 값이 나오지 않도록 제약조건을 추가
- UNIQUE 제약을 넣으면 보조 테이블이 만들어짐+중복값 허용하지 않 조건 추가됨
인덱스 생성 및 삭제
: 생성된 테이블에 인덱스 추가
- CREATE INDEX 인덱스명 ON 테이블명 ( column 1, column 2, ... );
- ALTER TABLE 테이블명 ADD INDEX 인덱스명 ( column 1, column 2, ... );
: 인덱스가 필요한 이유 - 데이터베이스의 처리속도를 높이기 위해
테이블 생성하며 인덱스도 함께 만들기
: INDEX <인덱스명> ( 컬럼명1, 컬럼명2 )
: UNIQUE INDEX <인덱스명> ( 컬럼명 )
- UNIQUE INDEX 의 경우 컬럼명은 항상 유일해야함
: 인덱스 삭제
- ALTER TABLE 테이블명 DROP INDEX 인덱스명
ADDITIONAL SQL
문자열 함수
: LENGTH, UPPER, LOWER
: CONCAT(문자열1, 문자열2)
: SUBSTRING(문자열, 시작위치, 길이)
숫자열 함수
: NOW, CURDATE, CURTIME
: DATE_ADD(날짜, INTERVAL 간격)
- 날짜에 간격 추가
- 간격 예시: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
: DATE_SUB(날짜, INTERVAL 간격)
- 날짜에서 간격 빼기
: EXTRACT(추출할 날짜 FROM 날짜값 컬럼 혹은 리터럴)
- 추출할 날짜: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 등
: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
: DAYOFWEEK - 요일을 숫자로 반환(1=일요일 ~ 7=토요일)
: TIMESTAFFDIFF(반환할 시간 단위, 시간1, 시간2)
- 반환할 시간 단위: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
: DATE_FORMAT(날짜, 변환할 포맷)
- 변환할 포맷 지시자
- %Y : 4자리 연도
- %y : 2자리 연도
- %M : 월 이름
- %m : 2자리 월
- %D : 일 (영문 접미사 포함, 예: 2nd, 3rd, ...)
- %d : 2자리 일
- %H : 24시간 형식의 2자리 시간
- %h : 12시간 형식의 2자리 시간
- %i : 2자리 분
- %s : 2자리 초
숫자 함수
: ABS - 절댓값 반환
: CEIL/FLOOR - 올림, 내림
: ROUND(숫자, 소수점 자리수)
: SQRT - 제곱근 반환
Day5
ADDITIONAL SQL2
서브쿼리
: 서브쿼리는 한 쿼리문에서 여러 번 사용 가능
: 상관 서브쿼리 - 외부 쿼리의 변수를 참조하는 서브쿼리
추가 참조사항
: 여러 번의 JOIN을 통해 다양한 변수 활용 가능
- SELECT * FROM A
JOIN B ON A.~=B.~
JOIN C ON B.~=C.~
JOIN D ON C.~=D.~
....
서브쿼리_실습
: rental 테이블에서 고객별 평균 대여 횟수보다 많은 대여를 한 고객들의 이름( first_name , last_name )을 찾아
주세요
- SELECT first_name, last_name FROM customer
WHERE customer_id IN (
SELECT customer_id FROM rental
GROUP BY customer_id
HAVING COUNT(*) > (
SELECT AVG(rental_count) FROM (
SELECT COUNT(*) AS rental_count FROM rental
GROUP BY customer_id ) AS rental_counts )
);
UNION
: 두 개 이상의 SELECT 문의 결과를 결합하거나 비교하게 돕는 집합 연산
: UNION - 합집합(중복 제외)
: UNION ALL - 합집합(중복 포함)
: INTERSECT - 교집합
: EXCEPT - 차집합. A테이블에만 있고 B테이블에는 없는 값 반환
트랜잭션
: 하나 이상의 SQL 문을 포함하는 작업의 논리적 단위
: 트랜잭션은 단일 논리적 작업 단위로 수행되는 연산의 순서
: 특성
1. 원자성(Atomicity)
: 트랜잭션은 불가분의 단위로 처리되어야 함
: 트랜잭션의 모든 연산이 실행되거나 아무것도 실행되지 않아야 함
: 트랜잭션의 일부가 실패하면 전체 트랜잭션이 실패
2. 일관성(Consistency)
: 데이터베이스를 하나의 유효한 상태에서 다른 유효한 상태로 유지하도록 보장
: 트랜잭션이 유효한 결과를 가져야 함을 의미
3. 고립성(Isolation)
: 트랜잭션의 동시 실행이 데이터베이스를 마치 트랜잭션이 순차적으로 실행된 것과 같은 상태로 남기도록 보장
4. 지속성(Durability)
: 트랜잭션이 일단 커밋되면 시스템 실패가 발생하더라도 커밋 상태가 유지되도록 보장
: 특히 여러 트랜잭션이 동시에 실행되는 데이터베이스 시스템에서 데이터 무결성을 유지하는 데 중요
COMMIT, ROLLBACK
: 트랜잭션을 제어하는 SQL 명령
: 일종의 영구 변
- COMMIT
: 현재 트랜잭션에서 만든 모든 변경 사항을 저장
: COMMIT 문 바로 다음에 새 트랜잭션이 시작
- ROLLBACK
: 현재 트랜잭션에서 만든 일부 또는 모든 변경 사항을 취소
: 현재 트랜잭션을 종료하고 새로운 트랜잭션을 시작
문법
: START TRANSACTION;
쿼리문~~~
COMMIT; 혹은 ROLLBACK;
SQL VIEW
: VIEW
- 실제 테이블을 기반으로 한 가상 테이블
- 복잡한 쿼리를 단순화하고, 데이터의 특정 부분에만 접근 허용 가능
: 생성 - CREATE VIEW 가상 테이블명 AS
SELECT 컬럼명, ...
FROM 테이블명
WHERE 조건;
: 수정 - CREATE OR REPLACE VIEW 가상 테이블명 AS
SELECT 컬럼들, ...
FROM 테이블명
WHERE 조건;
: 삭제 - DROP VIEW 가상 테이블명;
WITH 절
: Common Table Expressions (CTEs)
: 일시적인 결과 세트를 만들어 SELECT, INSERT, UPDATE, DELETE 문에서 참조할 수 있게 도와줌
: 단일 SQL 쿼리 내에서만 사용 가능
(SQL 쿼리가 종료되면 자동 삭제)
: 복잡한 쿼리를 쉽게 분해 가능
: WITH cte_name AS (쿼리문)
CTE를 사용하는 메인 쿼리
CASE WHEN
: CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
...
ELSE 결과n
END
'스터디' 카테고리의 다른 글
[10-11주차] SQL 프로젝트 (0) | 2024.07.04 |
---|---|
[9주차] SQL 입문2 (0) | 2024.06.21 |
[7주차]SQL 입문 (0) | 2024.06.07 |
[5주차] 파이썬 실습2 및 1차 미니 프로젝트 (0) | 2024.05.24 |
[4주차] 파이썬 기초2 및 실습 (0) | 2024.05.17 |