일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 백준 2352 반도체 설계 파이썬
- SQL SERVER MIGRATION
- 순위 파이썬
- 프로그래머스 가장 긴 팰린드롬
- 백준 1238 파티 파이썬
- 프로그래머스 여행경로
- 프로그래머스 순위 파이썬
- 백준 2146 다리 만들기
- 백준 1516 게임 개발
- SQL SERVER 장비교체
- 가장 긴 바이토닉 부분 수열 파이썬
- 프로그래머스 베스트앨범
- 역사 파이썬
- 다리 만들기 파이썬
- 게임 개발 파이썬
- 프로그래머스 순위
- 다중 컬럼 NOT IN
- 백준 1043 거짓말 파이썬
- 등굣길 파이썬
- 백준 11054.가장 긴 바이토닉 부분 수열
- 램프 파이썬
- 베스트앨범 파이썬
- 프로그래머스 등굣길
- 백준 1613 역사
- 백준 1034 램프 파이썬
- SWEA
- 반도체 설계 파이썬
- 가장 긴 팰린드롬 파이썬
- 백준 1167 트리의 지름 파이썬
- 트리의 지름 파이썬
Archives
- Today
- Total
공부, 기록
[MSSQL/SQL SERVER] 서브쿼리 본문
서브쿼리란
메인쿼리안의 또 하나의 쿼리가 있는경우를 서브쿼리라 칭함
TABLE1 : COL1 INT, COL2 INT (약 3만건)
TABLE2 : COL1 INT COL2 INT, COL3 DATETIME (약 10만건)
1. SELECT
1-1 SELECT 스칼라 서브쿼리라고도 칭하며 한건의 조회수만 출력되어야 함.
1-2 FROM 일종의 임시 테이블. 메인쿼리의 SELECT는 서브쿼리의 SELECT에 있는 값만 사용 가능.
EX)
SELECT T1.COL1, SUB.T2C3 --T2.COL2 는 서브쿼리안에서 조회되지 않았기에 사용 불가
FROM (
SELECT T2.COL1 AS T2C1 ,T2.COL3 AS T2C3
FROM TABLE2 AS T2
) AS SUB
JOIN TABLE1 AS T1
ON T1.COL1 = SUB.T2C1
1-3 WHERE 일반적인 서브쿼리 대부분 JOIN으로 처리가능하며 JOIN으로 처리하는 경우가 성능이 좋은 경우가 많음.
SELECT T1.*
FROM dbo.table1 AS T1 LEFT JOIN dbo.TABLE2 as T2
ON T1.col2 = T2.col1
WHERE T2.COL1 IS NULL
SELECT T1.*
FROM dbo.table1 AS T1
WHERE T1.col2 NOT IN (SELECT col1 FROM dbo.table2 AS T2
-> 동일한 결과의 쿼리의 방식에 따른 성능 차이 (OUTER JOIN으로 처리한 경우가 더 효율적)
2. INSERT
INSERT INTO TABLE1
SELECT COL1, COL2
FROM TABLE2
WHERE TABLE2.COL2 > 900000
3. UPDATE
UPDATE T1 SET T1.COL1 = T1.COL2
FROM TABLE1 AS T1
WHERE COL1 IN (
SELECT T2.COL1
FROM TABLE2 AS T2)
UPDATE T1 SET T1.COL1 = T1.COL2
FROM TABLE1 AS T1
JOIN TABLE2 AS T2
ON T1.COL1 = T2.COL1
※UPDATE ~~ FROM 을 사용하면 AS로 약칭을 정하여 간편하게 사용 가능
4. DELETE
DELETE FROM TABLE1
FROM TABLE1 AS T1
WHERE T1.COL1 IN (
SELECT T2.COL1
FROM TABLE2 AS T2)
DELETE FROM TABLE1
FROM TABLE1 AS T1
JOIN TABLE2 AS T2
ON T1.COL1 = T2.COL1
※최근 DBMS의 버전이 높아지면서 서브쿼리들도 옵티마이저가 JOIN으로 처리하여 실행하는 듯 하다.
'공부 > DATABASE' 카테고리의 다른 글
[MSSQL/SQL SERVER] 격리수준, 락(lock) (0) | 2021.04.04 |
---|---|
[MSSQL/SQL SERVER] 실행계획 (0) | 2021.03.23 |
[MSSQL/SQL SERVER] JOIN의 물리적 구조 (0) | 2021.02.21 |
[MSSQL/SQL SERVER] 인덱스 (0) | 2021.02.21 |
[MSSQL/SQL SERVER] 다중 컬럼 NOT IN (0) | 2021.01.23 |