표준 SQL 구문 (5) - 표 조회 (3)

5285 단어 SQL
성명: 본 고 에서 사용 한 데이터 시트 는 본 블 로그 의 다른 글 을 참조 하 시기 바 랍 니 다: 표준 SQL 문장 (2) - 표 의 첨삭 수정 
머리말
where 자구 에는 select - from - where 와 같은 쿼 리 블록 이 포함 되 어 있 습 니 다. 이 쿼 리 블록 은 하위 쿼 리 나 내장 쿼 리 라 고 합 니 다. 하위 쿼 리 를 포함 한 문 구 는 부모 쿼 리 나 외부 쿼 리 라 고 합 니 다.
내장 조 회 는 일련의 간단 한 조 회 를 복잡 한 조회 로 구성 하여 조회 능력 을 강화 할 수 있다.하위 조회 의 내장 층 차 는 최대 255 층 에 달 할 수 있 고 층 층 이 포 함 된 방식 으로 구조 조 회 는 SQL 의 '구조 화' 특징 을 충분히 나 타 냈 다.
내장 조 회 는 실 행 될 때 안에서 밖으로 처리 되 며, 모든 하위 조 회 는 이전 단계 외부 조회 처리 전에 이 루어 집 니 다. 부모 조 회 는 하위 조회 결 과 를 사용 해 야 합 니 다.
1. 값 의 하위 검색 을 되 돌려 줍 니 다.
하위 조회 의 반환 값 이 하나 일 때 비교 연산 자 (=, >, =, < =,! =) 를 사용 하여 부모 조회 와 하위 조 회 를 연결 할 수 있 습 니 다.
예: '류 웨 이' 선생님 의 직명 과 같은 교사 번호, 이름 을 조회 합 니 다.
select TNo, TN from T where Prof=(select Prof from T where TN='  ')

2. 값 의 하위 검색 을 되 돌려 줍 니 다.
하위 조회 의 반환 값 이 하나 가 아니 라 집합 일 경우 비교 연산 자 를 직접 사용 할 수 없 으 며, 비교 연산 자 와 하위 조회 사이 에 any 또는 all 을 삽입 할 수 있 습 니 다.그 구체 적 인 의 미 는 아래 의 예 를 상세 하 게 설명 한다.
1) any 사용
예 1: 강의 번호 가 C5 인 교사 의 이름 을 조회 합 니 다.
select TN from T where T.TNo = any( select TC.TNo from TC where CNo='C5' )

주: TNo 앞의 시계 이름 은 추가 하지 않 아 도 됩 니 다. 여 기 는 구분 만 합 니 다.
예 2: 다른 학과 에서 컴퓨터 학과 의 한 교사 보다 월급 이 많은 교사 의 이름과 월급 을 조회 합 니 다.
select TN, Sal from T where Dept <> '   ' and Sal > any( select Sal from T where Dept='   ')

주: < > 와! =같은 효 과 를 가 집 니 다. < > 는 SQL 최초의 표준 이 라 고 합 니 다. 그리고! =나중에 도 입 된 거 야.
2) 에서 사용
"= any" 대신 in 사용 가능
예: 강의 번호 가 C5 인 교사 의 이름 (in 사용) 을 조회 합 니 다.
select TN from T where TNo in (select TNo from TC where CNo='C5')

3) all 사용
all 의 의 미 는 전부 입 니 다.
예 1: 다른 학과 에서 컴퓨터 학과 의 모든 교사 보다 월급 이 높 은 교사 의 이름과 월급 을 조회 합 니 다.
select TN,Sal from T where Dept<>'   ' and Sal > all( select Sal from T where Dept='   ')

이렇게 쓸 수도 있다.
select TN,Sal from T where Dept<>'   ' and Sal > (select max(Sal) from T where Dept='   ')

예 2: 강의 하지 않 는 과정 번호 가 C5 인 교사 의 이름 을 조회 합 니 다.
select TN from T where TNo <> all(select TNo from TC where CNo='C5') 

이렇게 쓸 수도 있다.
select TN from T where 'C5'<> all(select CNo from TC where TNo=T.TNo)

주: < > all 의 의 미 는 하위 조회 결과 의 모든 값 과 같 지 않 으 며, < > all 대신 not in 을 사용 할 수 있 습 니 다.
관련 하위 조회
하위 조 회 는 일반 하위 조회 와 관련 하위 조 회 를 포함한다.앞에서 말 한 하위 조 회 는 모두 일반 하위 조회 이다.
하위 조회 의 조회 조건 에서 부모 조회 표 의 속성 값 을 인용 하여 이 조 회 를 관련 하위 조회 라 고 합 니 다.
우선 일반 하위 조회 와 관련 하위 조회 가 어떻게 다른 지 살 펴 보 자.
1) 수행 순서 가 다르다
일반 하위 조회 의 실행 순 서 는 먼저 하위 조 회 를 실행 한 다음 에 하위 조회 결 과 를 부모 조회 의 조회 조건 의 값 으로 하 는 것 이다.일반 하위 조 회 는 한 번 만 실 행 됩 니 다. 부모 조회 와 관련 된 모든 기록 줄 은 조회 결과 와 비교 하여 조회 결과 집합 을 확인 합 니 다.
관련 하위 조회 의 실행 순 서 는 먼저 부모 조회 표 의 첫 번 째 기록 을 선택 하고 내부 의 하위 조 회 는 이 줄 의 관련 속성 값 을 이용 하여 조회 한 다음 에 부모 조 회 는 하위 조회 가 돌아 온 결과 에 따라 이 줄 이 조회 조건 을 만족 시 키 는 지 판단 하 는 것 이다.조건 이 충족 되면 이 줄 을 부모 조회 결과 에 집중 합 니 다.부모 조회 표 의 모든 줄 데 이 터 를 처리 할 때 까지 이 과정 을 반복 합 니 다.
다음은 관련 하위 조회 의 예 를 몇 개 들 겠 습 니 다.
4) exists 사용
exists 는 존 재 를 나타 내 는 양사 로 exists 를 가 진 하위 조 회 는 실제 데 이 터 를 되 돌려 주지 않 고 논리 값 인 '진짜' 나 '가짜' 만 얻 을 수 있 습 니 다.하위 조회 결과 집합 이 비어 있 지 않 을 때, 바깥쪽 의 where 자 구 는 진짜 값 을 되 돌려 줍 니 다. 그렇지 않 으 면 가짜 값 을 되 돌려 줍 니 다.not exists 는 정반 대 입 니 다.
in 을 포함 하 는 조 회 는 보통 exists 로 표시 할 수 있 지만 반대로 꼭 그렇지 는 않다.
예 1: (exists 문 구 를 사용 하여 완성) 강의 번호 가 C5 인 교사 의 이름 을 조회 합 니 다.
select TN from T where exists (select * from TC where TNo=T.TNo and CNo='C5')

예 2: 강의 번호 가 C5 인 교사 의 이름 을 조회 합 니 다.
select TN from T where not exists (select * from TC where TNo=T.TNo and CNo='C5')

예 3: 모든 과정 을 선택 과목 으로 이수 한 학생 의 이름 을 조회 합 니 다.
select SN from S where not exists (select * from C where not exists (select * from SC where SNo=S.SNo and CNo=C.CNo ))

해석: 이 예 는 이러한 일부 학생 명단 을 선정 하고 SC 표 에 선택 과목 이 없 는 기록 이 없다 는 것 으로 이해 할 수 있다.
기타 조회
1. 병합 조회
통합 조 회 는 유 니 온 조작 자 를 사용 하여 서로 다른 조회 에서 온 데 이 터 를 조합 하여 종합 적 인 정 보 를 가 진 조회 결 과 를 형성 하 는 것 이다.유 니 온 작업 은 중 복 된 데이터 줄 을 자동 으로 제거 합 니 다.
반드시 주의해 야 할 것 은 합병 조회 에 참가 하 는 각 하위 조회 에 사용 되 는 표 구 조 는 같 아야 한 다 는 것 이다. 즉, 각 하위 조회 중의 데이터 수량 과 대응 하 는 데이터 유형 이 모두 같 아야 한 다 는 것 이다.
예: SC 데이터 시트 에서 학 번 이 'S1' 인 학생 의 학 번 과 총 점 을 조회 한 다음 에 SC 데이터 시트 에서 학 번 이 'S5' 인 학생 의 학 번 과 총 점 을 조회 한 다음 에 두 개의 조회 결 과 를 하나의 결과 집 으로 합 친다.
select SNo as '  ', sum(Score) as '  ' from SC where SNo='S1' group by SNo  
union 
select SNo as '  ', sum(Score) as '  ' from SC where SNo='S5' group by SNo 

2. 조회 결 과 를 표 에 저장
select... into 문 구 를 사용 하면 검색 결 과 를 새 데이터베이스 시트 나 임시 표 에 저장 할 수 있 습 니 다.
예: SC 데이터 시트 에서 모든 학우 의 학 번 과 총 점 을 조회 하고 조회 결 과 를 새로운 데이터 시트 Cal 에 저장 합 니 다.테이블 중.
select SNo as '  ', sum(Score) as '  ' into Cal_Table from SC group by SNo

이 예 에서 into Cal 을Table 을 into \ # Cal 로 변경Table 은 조회 결 과 를 임시 표 에 저장 합 니 다. 임시 표 는 메모리 에 만 저장 되 고 데이터베이스 에 저장 되 지 않 기 때문에 존재 하 는 시간 이 매우 짧 습 니 다.

좋은 웹페이지 즐겨찾기