[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은 일치하지 않는 값을 찾을 수 있다.


댓글

이 블로그의 인기 게시물

[엑셀 말고 스프레드시트] 03. 구글 스프레드시트 시작하기

[엑셀 말고 스프레드시트] 01. 구글 스프레드시트란?

[SQL첫걸음]181108