7 개 데이터 쿼리 데이터베이스 작업

쿼리 가입 : 두 개 이상의 테이블 쿼리를 포함하는 동안

  • 두 테이블을 연결하기위한 조건 : 연결 상태
[<表名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 ';

점차 다양 화의 구현에 문제가 다중 테이블 쿼리 데이터를
필요로 다른 방법으로 더 많은 연습 생각

게시 11 개 원래 기사 · 원 찬양 6 · 전망 2709

추천

출처blog.csdn.net/lrx359641708/article/details/105027349