[SQL첫걸음]181112
서브쿼리
- SQL문장의 하부절에 쿼리를 사용하는 것
- 괄호로 묶어서 지정한다.
- 서브쿼리의 패턴
- 하나의 값을 반환하는 패턴 >> '스칼라 서브쿼리'라고 부른다.
- 복수의 행이 반환되지만 열은 하나인 패턴
- 하나의 행이 반환되지만 열이 복수인 패턴
- 복수의 행, 복수의 열이 반환되는 패턴
- 스칼라 값을 반환하는 SELECT명령을 특별 취급하는 이유는 서브쿼리로서 사용하기 쉽기 때문이다.
- 스칼라 서브쿼리는 WHERE 구에서 '=' 연산자로 비교할 수 있다.
- SELECT, SET, FROM, INSERT 등 다양한 구에서 서브쿼리를 사용할 수 있다.
EXISTS
- 두 개의 테이블에서 같은 값을 가진 컬럼끼리 활용하여 한 테이블 내에서 조건을 걸 수 있다.
- EXISTS (SELECT 명령)
- UPDATE sample511 SET a = '있음' WHERE
EXISTS (SELECT * FROM sample 552 WHERE no2 = no); - sample552이 no2열을 가지고 있고 열값은 숫자이다.
- no2의 각행의 값과 sample511 no열에 값을 비교해 같은 경우 a열의 값을 '있음'으로 변경(UPDATE)한다.
- NOT EXISTS을 이용해 참이 아닌 경우에 대한 조건을 줄 수 있다.
- EXISTS는 UPDATE(부모)와 관계가 있는 상관 서브쿼리이다. 일반 서브쿼리와 다르게 독립해서 쓸 수 없다.
- SELECT * FROM sample552 WHERE no2 = no; 는 오류 발생 >> 따로쓰면 no가 불명확
- 열명이 동일한 경우 앞에 테이블 이름을 붙여 구분할 수 있다.
- sample511, sample522에 no라는 동일한 열이 있다면 그냥 no = no으로 쓰면 오류가 난다.
- 이런 경우 sample511.no = sample522.no 이와 같이 작성해야 한다.
IN
- 조건의 범위를 지정하는 데 사용된다. 값은 콤마( , )로 구분하여 괄호 내에 묶으며, 이 값 중에서 하나 이상과 일치하면 조건에 맞는 것으로 평가된다.
- OR랑 비슷한데 더 간단하게 작성할 수 있다.
- 둘다 동일
WHERE no = 3 OR no = 5;
WHERE no IN (3, 5); - 서브쿼리로도 사용할 수 있다.
- SELECT * FROM sample551 WHERE no IN (SELECT no2 FROM sample 522);
- NOT IN은 일치하지 않는 값을 찾을 수 있다.
댓글
댓글 쓰기