2019.01.17 서브쿼리,IN

2019. 1. 17. 14:31SQL

#1 서브쿼리 

>> SELECT 명령


<table's sample54>

<table's sample5 a열에 최소값을 가진 행을 삭제 >>기존 방식 SELECT MIN(a) FROM sample54; 
                  ↓
DELETE FROM sample54 WHERE a=20;

>> 서브쿼리를 이용

②  스칼라 (단일 값) - 서브쿼리의 패턴 패턴

- 하나의 값을 반환하는 패턴 (스칼라 서브쿼리) 

>>SELECT MIN(a) FROM sample54; 패턴


- 복수의 행이 반환되지만 열은 하나인 패턴 

>>SELECT no FROM sample54; 패턴


- 하나의 행이 반환되지만 열이 복수인 패턴

 >>SELECT MIN(a), MAX(no) FROM sample54; 패턴


- 복수의 행, 복수의 열이 반환되는 패턴 

>>SELECT no, a FROM sample54; 


* SELECT 명령이 하나의 값만 반환하는 것을 '스칼라 값을 반환한다'고 한다! 

* = 연산자를 사용하여 비교할 경우에는 스칼라 값끼리 비교할 필요가 있다.



SELECT 구에서 서브쿼리 사용하기


MySQL - 

SELECT 

(SELECT COUNT(*) FROM sample51) AS sq1, 

(SELECT COUNT(*) FROM sample54) AS sq2;


 

Oracle -



SET 구에서 서브쿼리 사용하기

>> a의 최대값을 구한 후 sample54의 a값을 전부 최대값으로 변경



** 3단계 중첩구조으로도 사용가능

SELECT * FROM (SELECT * FROM (SELECT * FROM sample54) sq1) sq2;


⑤ FROM구에서 서브쿼리 사용하기

>>sample54를 가져와서 sq라는 가상쿼리에 저장



Cf) MySQL의 사용법
SELECT * FROM 
(SELECT * FROM sample54)
 AS sq;


Oracle에서 정렬 이후 상위 몇건 가져오기

<table's sample54>




>> sample54의 a열을 내림차순으로 정렬 이후 , sq가상 테이블 생성

    가상쿼리 ROWNUM 2행이하로 설정

- ROWNUM이란 '행번호'란 뜻으로 INSERT된 순서로 가상열 (Oracle만의 규칙)

>> 

위 내용의의 서브쿼리만 실행




INSERT명령과 서브쿼리

#2 IN - 집합 안의  값이 존재하는지 조사

---열명 IN (집합)

<Table's sample551>


>> OR 사용할 때


▼▼▼▼IN 사용할 경우 -> 사용빈도가 높음, 가독성이 높음



- INNULL
 
IN= 으로 동작함. NULL = NULL 로 계산 안됨.
 
NULLIS NULL을 사용해서 비교해야 함.