본문 바로가기

스터디

[8주차] SQL 입문2

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