쿼리 가입 : 두 개 이상의 테이블 쿼리를 포함하는 동안
- 두 테이블을 연결하기위한 조건 : 연결 상태
[<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2>
如课件上的例题【例】 Student.Sno = SC.Sno
- 필드 연결 : 연결된 상태에서 열 이름
스노 필드는 상기 실시 예에 연결되어 같은
반드시 동일한 이름 접속 유형 필드가 비교해야하지만 참고
결 합은 : 연산자 = 조인
(비교 접속 동등한 관계 대수)
[예제 3.49]는 상황이 각 학생 및 선택 과목을 조회
SELECT Student.*, SC.*
FROM Student, SC
WHERE Student.Sno = SC.Sno;
-
중첩 루프 방법은
튜플 접합 1의 첫 번째 튜플을 찾아 테이블 후 제 표 1, 표 2에서 첫 번째 튜플을 발견하고, 연결 부재를 만족하는 튜플을 찾아 의해 시작 하나에서 스캔 함께 결과표 튜플을 형성한다.
룩업 테이블 (2)의 모든 후, 표 1 번째 튜플을 찾아 다시 시작하기 표 1 및 제 튜플 검색된 후 튜플은 만족 조인 조건 찾을 테이블을 하나씩 2를 스캔 튜플 결과표 튜플을 형성하기 위하여 함께 접합.
표 1의 모든 투플이 처리 될 때까지 반복 -
정렬 병합 방법 (SORT-MERGE)
제 정렬 표 1 및 표 2의 연결 특성에 의해
처음 주사 테이블에서 제 1 엘리먼트 군 (1), (2)의 테이블을 순차 검색 튜플은 표 1에서 발견 된 후에는, 결합 조건을 만족 튜플 제 튜플 결과 테이블의 튜플을 형성하기 위하여 함께 접합. 표 2 표 발생한 경우 1 튜플은 표 2의 쿼리는 계속되지 않고, 제 1 접속 필드 값보다 크면
순차적 중단 점에서 테이블을 스캔을 계속 한 다음, 표 1의 두 번째 튜플을 찾기 위해, 단지 2 만족 찾을 튜플은 결과 테이블의 튜플을 형성하기 위하여 함께 접합 튜플의 제 튜플을 찾아 테이블 후, 결합 조건. 표에서 발생하는 직접 튜플 연결 2. 표 1은 필드의 값보다 큰 경우, 표 2의 쿼리가 계속되지 않습니다
표 1, 표 2 튜플의 모든 때까지 작업을 반복 지금까지 처리 된 -
연결 인덱스 (INDEX가 조인)
표 2의 설립 필드 인덱스에 의해 접속되어
룩업 테이블 (2) 플이 조건을 만족 찾을 인덱스 필드의 값에 기초하여 차례대로 연결되어 표 1에서 각 튜플 들어, 테이블 후 발견 튜플 제 튜플 튜플 결과 테이블을 형성하도록 함께 접합
행 [3.50 실시 예] [실시 예 349] 천연 완전한 연결.
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student,SC
WHERE Student.Sno = SC.Sno;
- SQL 문은 연결을 완료하고 같은 시간을 조회 할 수 있습니다.
실행 과정은 :
= '2'를 선택 CNO SC를 시작 그레이드> 90의 관계에서 형성되는 중간 튜플
튜플을 다음 조건을 만족하는 학생 접속 최종 결과의 관계에 참여
[예제 3.51] 모든 학생을위한 쿼리 제 2 선택 과목 및 성적 번호 90 점 이상의 이름을 배울 수 있습니다.
SELECT Student.Sno, Sname
FROM Student, SC
WHERE Student.Sno=SC.Sno AND
SC.Cno=' 2 ' AND SC.Grade>90;
- 자체가 연결 : 자체에 연결된 테이블
테이블 별칭 요구를 구별하기 위해
당신은 "별칭"을 사용해야합니다, 모든 속성 이름은 같은 이름의 재산입니다
[실시 예 3.52] 필수 간접 질의 각 과정 (즉, 필수 전제 조건)
SELECT FIRST.Cno, SECOND.Cpno
FROM Course FIRST, Course SECOND
WHERE FIRST.Cpno = SECOND.Cno;
-
공통의 외부 접속 구별 연결된
일반 연결 출력 동작하는 경우에만 조건부 튜플 가입 만족
외부 테이블 커넥터 본체를 지정하는 조작을 조인 커넥터 본체는 조건 테이블 출력 함께 튜플을 만족하지 -
외부 조인 왼쪽
목록은 모든 튜플 왼쪽 관계 -
오른쪽 외부 조인
권리와 관련하여 목록의 모든 튜플
[실시 예 3.53] 재기록 [실시 예 349]
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student LEFT OUT JOIN SC ON (Student.Sno=SC.Sno);
[예제 3.54]는 각 학생 번호, 이름, 선택 과목과 학년 이름을 조회하기
SELECT Student.Sno, Sname, Cname, Grade
FROM Student, SC, Course
WHERE Student.Sno = SC.Sno
AND SC.Cno = Course.Cno;
중첩 된 쿼리는 SELECT-FROM-WHERE 쿼리 문은 블록이라는
중첩 된 쿼리라고 더 HAVING 또는 구문 쿼리 블록의 WHERE 절에서 쿼리 블록 중첩 된 상태 쿼리
SELECT Sname /*外层查询/父查询*/
FROM Student
WHERE Sno IN
( SELECT Sno /*内层查询/子查询*/
FROM SC
WHERE Cno= ' 2 ');
아니 상관 서브 쿼리 : 쿼리 서브 쿼리가 밖으로 안쪽에서 부모 쿼리에 의존하지 않는
층으로 층. 즉, 질의 처리 전의 각 서브 쿼리 상위 쿼리를 확립하기 위해 사용되는 서브 쿼리 검색 조건의 결과를 해결한다.
SELECT Sno, Sname, Sdept
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname= ' 刘晨 ');
상관 서브 쿼리 : 부모 쿼리에 따라 쿼리 하위 쿼리
첫번째 튜플 먼저 외부 쿼리는 관련 속성 값 쿼리 속지 및 내부 쿼리에 따라 테이블을 소요, true를 돌려주는 경우 WHERE 절 상기 튜플 결과 테이블이 점을 고려
하고 모든 검사가 소진 외부 테이블 때까지이 프로세스가 반복되어 다음 튜플 외부 테이블을
SELECT Sno, Cno
FROM SC x
WHERE Grade >=(SELECT AVG(Grade)
FROM SC y
WHERE y.Sno=x.Sno);
[예제 3.55] 라인과 학생들의 학습 쿼리 "리우 첸."
SELECT Sdept
FROM Student
WHERE Sname= ' 刘晨 ';
SELECT Sno, Sname, Sdept
FROM Student
WHERE Sdept= ' CS ';
또는
SELECT Sno, Sname, Sdept
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname= ' 刘晨 ');
또는
SELECT S1.Sno, S1.Sname,S1.Sdept
FROM Student S1,Student S2
WHERE S1.Sdept = S2.Sdept AND
S2.Sname = '刘晨';
[예제 3.56] 쿼리 선택 과목 소위 "정보 시스템"학생 번호와 이름
SELECT Sno,Sname
FROM Student
WHERE Sno IN
(SELECT Sno
FROM SC
WHERE Cno IN
(SELECT Cno
FROM Course
WHERE Cname= '信息系统'
)
):
- 아이디어 위의 코드는 세 단계로 나누어 :
. ① 먼저 3 번으로, 코스 코스 관계의 수 "정보 시스템"을 확인
후, SC ②의 관계를 알아 3 번 과정 학생 수를 복구하는 선택
마지막으로 ③, 학생 스노 관계 선출 SNAME
연결 쿼리 실행 [예제 3.56]
SELECT Sno,Sname
FROM Student,SC,Course
WHERE Student.Sno = SC.Sno AND
SC.Cno = Course.Cno AND
Course.Cname='信息系统';
[예제 3.57]는 과정의 자신의 선택 과목의 학점 평균을 통해 각 학생을 식별합니다.
SELECT Sno, Cno
FROM SC x
WHERE Grade >=(SELECT AVG(Grade)
FROM SC y
WHERE y.Sno=x.Sno);
[예제 3.58] 학생 학생들의 이름과 나이의 작은 임의의 기간보다 컴퓨터 과학의 비 컴퓨터 과학 부서에 문의 부서
SELECT Sname,Sage
FROM Student
WHERE Sage < ANY (SELECT Sage
FROM Student
WHERE Sdept= ' CS ')
AND Sdept <> ‘CS ' ;
[예제 3.59] 모든 연령대의 쿼리 기반이 아닌 컴퓨터 과학 학생들이 적은 학생의 이름과 나이의 컴퓨터 과학학과보다.
- 방법 1 : 사용 달성하기 위해 모든 술어
SELECT Sname,Sage
FROM Student
WHERE Sage < ALL
(SELECT Sage
FROM Student
WHERE Sdept= ' CS ')
AND Sdept <> ' CS ’;
- 방법 2 : 골재의 형태로 구현되는 기능
SELECT Sname,Sage
FROM Student
WHERE Sage <
(SELECT MIN(Sage)
FROM Student
WHERE Sdept= ' CS ')
AND Sdept <>' CS ';
점차 다양 화의 구현에 문제가 다중 테이블 쿼리 데이터를
필요로 다른 방법으로 더 많은 연습 생각