공부이야기

SQL공부하기 4일차: WHERE (IN, ANY), FROM, CTE, UNION

해피밀:D 2023. 7. 25. 21:00

1. WHERE 서브쿼리 이용하기

 

INSERT INTO TABLE NAME (COL1, COL2)

SELECT COL1, COL2 FROM TABLE NAME2

 

INSERT INTO TABLE NAME (COL1, COL2)

VALUES (SELECT COL1 FROM TABLE NAME2 WHERE COL1=1), (SELECT COL2FROM TABLE NAME2 WHERE COL1=1)

 

--INSERT INTO 함수에 SELECT를 넣어 서브쿼리이용가능

 

SELECT * FROM TABLE NAME

WHERE COL 1 = (SELECT COL 1 = FROM TABLE NAME WHERE COL NAME = '123')

 

SELECT * FROM TABLE NAME

WHERE COL 1 IN (SELECT COL 1 = FROM TABLE NAME WHERE COL NAME IN( '123', '234') )

 

-- WHERE IN으로 여러개 찾기

 

<3개의 테이블 조인>

 

SELECT 

  A. NAME

  A. NUM

  C.SYMBOL

  C. COMPANY

  C. YEAR

 FROM TABLE NAME AS A

INNER JOIN TABLE NAME2 AS B ON A. NUM  = B. NUM

INNER JOIN TABLE NAME3 AS C ON B.SYMBOL = C. SYOMBOL

WHERE A. COMPANY = 'CAR'

ORDER BY SYMBOL

 

 

----위의 함수를 IN으로 바꾸면 아래가 됨

SELECT 

FROM TABLE NAME

WHERE SYMBOL IN ( -- 위의 상위 쿼리가 조회가 됨

 

SELECT SYMBOL 

FROM TABLE NAME AS A

INNERJOIN TABLE NAME AS B ON A.NUM = B. NUM --- 1) 이 두개가 조인이 되어서

WHERE A. COMPANY NAME = 'CAR'

)

 

-- ANY의 서브쿼리

SELECT 

FROM TABLE NAME

WHERE SYMBOL = ANY ( -- A,B,C중 하나라도 만족하면 골라서 테이블 조회됨

SELECT SYMBOL 

FROM TABLE NAME AS A

WHERE SYMBOL IN ('A','B','C')

)

 

SELECT

FROM TABLE NAME

WHERE SYMBOL < ANY ( -- A,B,C보다 더 작은 것들이 나오게 됨

SELECT SYMBOL 

FROM TABLE NAME AS A

WHERE SYMBOL IN ('A','B','C')

)

 

2. FROM 서브쿼리 이용하기

 

SELECT

A*, B*, C*

FROM TABLE NAME AS A

INNER JOIN TABLE NAME1 AS B ON A.NAME = B. NAME

INNER JOIN TABLE NAME2 AS C ON A.NAME = C.NAME

INNER JOIN TABLE NAME3 AS D ON C.NUM = D. NUM

WHERE A.NAME = '123'

AND B. DATE >= '2022-10-01'

AND B.DATE < '2023-01-01'

 

3. CTE : COMMON TABLE EXPRESSION 데이터베이스에 없는 테이블이 필요할 때 사용

 

WITH CTE TABLE NAME COL1

AS

(SELECT COL1

FROM TABLE NAME2 -- CTE바로 다음에 나오는 SELECT에서만 사용가능 (동일한 열의 개수를 가져야함)

)

SELECT COL1 FROM CTETABLE NAME

 

4. UNION 은 중복을 제거한 결과 / UNION ALL 은 중복을 포함한 결과 사용

 

WITH CTE_TABLE_1 (DATE, COL1, COL2)

AS

SELECT DATE, COL1, [CLOSE] FROM TABLE_2

WHERE DATE >= '2022-01-01' AND DATE <= '2022-02-01'

UNION ALL--UNTON ALL을 사용해서 모두 조회하는 쿼리

SELECT DATE, COL1,[CLOSE] FROM TABLE_2

WHERE DATE >= '2022-02-03' AND DATE <= '2022-03-02'

)

SELECT * FROM CTE_TABLE_1 WHERE COL1 = '123'

 

 

 

반응형