-
mySQL Ver.11 (SUBQUERY)DB 2023. 12. 4. 16:05728x90반응형SMALL
SELECT 문법 안에 또 다른 SELECT 쓰기
이것은 마치 for문 안에 for문 쓰기!?
서브쿼리라 다른 쿼리문 내부에 포함되어있는 SELECT 문을 말한다.
서브쿼리를 포함하고 있는 쿼리를 워부커리(outer query)라고 하며
서브커리 는 내부커리(inner curry)라고도 부른다.
서브쿼라는 괄호로 () 감싸져서 표현된다.
SELECT [column] FROM [table] WEHRE [column] IN ( SELECT [column] FROM [table] WHERE [condition] );
서브쿼리는 메인쿼리 컬럼 사용 가능
메인쿼리는 서브쿼리 컬럼 사용 불가
서브쿼리 사용이 가능 한 곳
서브쿼리를 포함할 수 있는 워부쿼리(Outer query)
- SELECT
- INSERT
- UPDATE
- DELETE
- SET
- DO
서브쿼리와 같이 사용 가능한 연산자
- IN
- NOT
- IN
- EXISTS
- ANY
- ALL
IN은 특정 값이 서브쿼리에 있는지 확인이 가능하다.
NOT IN도 있으며 이는 반대의 값을 조회
EXISTS 는 존재여부 를 boolean 값으로 리턴한다.
이것은 마치 INCLUDES?
NOT EXISTS도 있다.
ANY 여러 개의 비교 값 중에 하나라도 만족하면 true를 반환
IN과 다른 점은 비교 연산자를 사용한다는 것.
greater than lesser than 등등
SELECT * FROM TEST WHERE SCORE > ANY ( SELECT AGE FROM TEST WHERE ADDR = 'Honolulu' );
ALL
전체 값을 비교해서 모두 만족해서 TRUE를 반환.
서브쿼리의 위치에 따른 이름
SELECT [컬럼], (SELECT ...) -- 스칼라 서브쿼리(Scalar Sub Query): SELECT 문에 나타나는 서브쿼리, 컬럼처럼 사용 FROM (SELECT ...) -- 인라인 뷰(Inline View): FROM 문에 나타나는 서브쿼리, 테이블처럼 사용 WHERE [컬럼] = (SELECT ...) -- 중첩 서브 쿼리(Nested Sub Query): WHERE문에 나타나는 서브쿼리, 변수처럼 사용
스칼라 서브쿼리:
- 하나의 레코드만 리턴 가능하며, 두개 이상의 레코드는 리턴할 수 없다.
- 일치하는 데이터가 없더라도 NULL값을 리턴할 수 있다.
인라인 뷰:
- 서브쿼리가 FROM절에 사용되는 경우 무조건 AS 별칭을 지정해주어야 한다.(테이블처럼 사용해야 하니까!)
- 동적으로 생성된 테이블로 사용가능하다. 임시적이기 때문에 저장되지는 않는다
중접 서브 쿼리:
- 단일행, 복수(다중)행, 다중 컬럼 이와 같이 종류가 3가지로 나눠져있다.
- 단일 행: 말그대로 단일 레코드를 리턴한다.
- 복수(다중)행: IN, ANY, ALL, EXISTS등의 연사자로 얻은 서브쿼리 결과를 여러개의 행으로 리턴한다.
- 다중 컬럼: 서브쿼리의 실행 결과로 여러 컬럼을 반환한다. 서브쿼리와 메인쿼리에서 비교하고자 하는 컬럼 개수와 컬럼의 위치가 동일해야 한다.
JOIN과 그 쓰임이 같고 JOIN을 쓰라하니 JOIN을 쓸 것.
728x90반응형LIST'DB' 카테고리의 다른 글
mySQL Ver.10 (recap) (0) 2023.12.04 mySQL Ver.09 (GROUP BY) (0) 2023.12.04 MYSQL Ver.08 ( GREATEST, LEAST, FLOOR, CEIL, ROUND, TRUNCATE, POWER, ABS) (2) 2023.12.04 MYSQL Ver.07 (aggregate function MIN, MAX, AVG, SUM and DISTINCT, LIMIT) (0) 2023.12.04 MYSQL Ver.06 (LIKE, %, _ ) (1) 2023.12.04