DaehunGwak / study-real-mysql-2

4 stars 0 forks source link

2. 11_쿼리 작성 및 최적화 (11.4.10 서브쿼리 ~ 11.6 UPDATE와 DELETE) #6

Open DaehunGwak opened 2 years ago

DaehunGwak commented 2 years ago

진도

  1. 쿼리 작성 및 최적화 (11.4.10 서브쿼리 ~ 11.6 UPDATE와 DELETE)

일시

2022.07.24.(일) 21:00

Edwin222 commented 2 years ago

서브쿼리

CTE

윈도우 함수

잠금을 활용하는 SELECT

INSERT

UPDATE와 DELETE

minkukjo commented 2 years ago

서브쿼리

SELECT

FROM

WHERE

WHERE 동등 비교

WHERE IN 비교

WHERE NOT IN 비교

CTE ( Common Table Expression )

Non Recursive CTE

Resursive CTE

Window Function

Window functions operate on a range of rows, defined by the OVER clause. It is like you are looking through the window, you see sky, star, moon. You are not seeing the whole sky, you see part of the sky.

윈도우 함수는 OVER절에 의해 정의된 레코드의 범위에서 동작한다. 
그것은 마치 당신이 창을 통해 하늘, 달, 별을 보는 것과 같다.
당신은 그저 하늘의 한 부분을 보는 것이며 하늘의 전체를 보고 있는 것은 아니다.

잠금을 사용하는 SELECT

INSERT

INSERT IGNORE

INSERT .. ON DUPLICATE KEY UPDATE

LOAD DATA

성능을 위한 테이블 구조

UPDATE와 DELETE

UPDATE ... ORDER BY ... LIMI n

JOIN UPDATE

update test a t1, user b u
   set t1.first_name=u.first_name
   where t1.user_id=u.user_id;

여러 레코드 UPDATE

JOIN DELETE

DELETE e
FROM employee e, dept_emp de, departments d
WHERE e.~~~~~
DaehunGwak commented 2 years ago

11.4 SELECT

11.4.10 서브쿼리

11.4.11 CTE(Common Table Expression)

11.4.12 윈도우 함수 (Window Function) (8.0+)

11.4.13 잠금을 사용하는 SELECT

SELECT *
FROM employees e
    INNER JOIN dept_emp de ON de.emp_no=e.emp_no
    INNER JOIN departments d ON d.dept_no=de.dept_no
WHERE e.emp_no=10001
FOR UPDATE OF e; // employees 테이블만 쓰기 잠금 획득

11.5 INSERT

11.5.1 고급 옵션

INSERT IGNORE

INSERT … ON DUPLICATE KEY UPDATE

11.5.2 LOAD DATA 명령 주의 사항

11.5.3 성능을 위한 테이블 구조

11.6. UPDATE, DELETE

UPDATE … ORDER BY … LIMIT n

JOIN UPDATE

UPDATE tb_test1 t1, employees e
    SET t1.first_name=e.first_name
WHERE e.emp_no=t1.emp_no;

여러 레코드 UPDATE

UPDATE user_level ul
    INNER JOIN (VALUES ROW(1, 1), ROW(2, 4)) new_user_level (user_id, user_lv) # 임시 테이블 생성
        ON new_user_level.user_id=ul.user_id
SET ul.user_lv=ul.user_lv + new_user_level.user_lv;

JOIN DELETE

DELETE e, de
FROM employees e, dept_emp de, departments d
WHERE e.emp_no=de.emp_no AND de.dept_no=d.dept_no AND d.dept_no='d001';