7つのデータクエリーのデータベース・ジョブ

クエリ参加:つ以上のテーブル、クエリを巻き込みながら

  • 接続条件:2つのテーブルを接続するための条件
[<表名1>.]<列名1>  <比较运算符>  [<表名2>.]<列名2>
如课件上的例题【例】 Student.Sno = SC.Sno
  • フィールド接続:カラム接続状態における名
    スノーフィールドは上記の例に接続されている次のような
    注:接続フィールドタイプが同等である必要があり、必ずしも必要ではないが、同じ名前

等価結合:オペレータが=あるジョイン
(比較接続同等のリレーショナル代数)

[例3.49]の状況は、各学生と選択科目を問い合わせます

         SELECT  Student.*, SC.*
         FROM     Student, SC
         WHERE  Student.Sno = SC.Sno;
  • ネストされたループ方法は、
    最初の表1、表2の最初のタプルを見つけ、次いでタプルスプライシングにおける最初のタプルを見つけるためにテーブルの後、連結部材を満たす組を見つけるために、1つによって開始一つからスキャン1結果テーブルにタプルを形成するために一緒。
    ルックアップ表2のすべての後、表1には、第二の組を見つけ、その後、タプルは、表1と第2の組に見出さ後、結合条件を満足見つけるためにテーブルを一つ2いずれかをスキャンし、再び最初からやり直しますタプルは、結果表のタプルを形成するために一緒にスプライス。
    表1のすべてのタプルが処理されるまで繰り返します

  • ソートマージ法(SORT-MERGE)
    第1選別表1および表2の接続プロパティによって
    開始スキャンテーブルからの第1の素子群1、2のテーブルを、シーケンシャルサーチタプルを表1に見出さ後、結合条件を満足しますタプルの最初のタプルは結果テーブルのタプルを形成するために一緒にスプライス。表2表に遭遇したときに1組は第一連結フィールドの値よりも大きい場合、表2のクエリが継続していない
    表1の第二組を見つけるために、及び順次ブレークポイントからわずか2テーブルをスキャン継続しますタプルが結果テーブルにタプルを形成するために一緒にスプライスされたタプルの最初の組を見つけるためにテーブルの後に、結合条件を満足見つけます。表2、表1に遭遇した直接のタプルが接続されているフィールドの値よりも大きい場合、表2のクエリはし続けない
    表1または表2組の全てがこれまでに処理されるまでの動作を繰り返します

  • 接続インデックス(INDEX -結合)
    表2のは、確立されたフィールドインデックスによって接続され
    、条件を満たすタプルを見つけるために、ルックアップテーブル2のインデックスフィールドの値に基づいて、順番に接続されている表1の各タプルに対して、表の後に見つかりましたタプルの最初のタプルはタプル結果テーブルを形成するために一緒にスプライシング

乃至[実施例3.50] [実施例3.49]天然の完全な接続。

 SELECT  Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
 FROM     Student,SC
 WHERE  Student.Sno = SC.Sno;
  • SQLステートメントは、接続を完了し、同じ時間を照会するために選択することができます。
    実行処理:
    CNO =「2」及びグレード選択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]書き換え[実施例3.49]

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= ' 刘晨 ');

相関サブクエリ:親クエリに依存クエリサブクエリ
最初のタプルが第一の外側のクエリは、その関連付けられた属性値のクエリインレイと内側問合せに応じてテーブルを取り、真を返した場合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つのステップに分けアイデア上記のコード:
    。①最初の第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]すべての年齢のクエリベースの非コンピュータサイエンスの学生は少なく、学生の名前と年齢のコンピュータサイエンス学部よります。

  • 方法の一つ:使用するすべての述語を達成するために
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