Oracleデータベースの研究ノート(5)

第V章マルチテーブルクエリ

マルチテーブルクエリが1とは何ですか?
同時にクエリに複数のテーブルで。
異なるテーブルからクエリデータへ。

単一テーブルのクエリは:クエリのすべての内容が同じテーブルから来る
上記ID、姓、給与上に選択
s_empから
DEPT_ID = 41及び給与> 1400
;給与DESC順は、上記のID ASC上に
単一テーブルのクエリがコンテンツに見出すことができる限定され。

マルチテーブルクエリ構文:
利用照会する複数のテーブルの後ろに縛らから句にカンマ
選択フィールド1、フィールド2、フィールドを.... 3
表1と表2から
WHERE条件...
注文フィールドの順序によって、ルール;

?クエリID、LAST_NAMEのすべての従業員
SELECT ID、LAST_NAME
フォームs_emp。

すべてのセクターでのクエリID、名前は?
ID SELECT、名前
s_deptから。

要件:クエリのすべての従業員のID、LAST_NAMEと
IDの部門、名前は?
ID SELECT、LAST_NAME、ID、名前
s_empから、s_dept。

フィールド名の競合は、ときに
テーブル名を使用する必要があります。フィールドは、クエリに列名を宣言して
から来て、特定のテーブル。
SELECT、LAST_NAME、s_dept.id、名前s_emp.id
s_empから、s_deptを、

また始まるエイリアステーブルを与えることができます。
選択フィールド
表1から別名、エイリアステーブル2 ..... 2;
選択s1.id、姓、s2.id、名前
s_emp S1、S2 s_deptから。

デカルト積の2除去
デカルト積が生成された演算乗算セットの結果です。

A = {1、2、3}
B = {B、C}

A X B = {(1、A)、(1、B)、(1、C)、
(2、A)、(2、B)、(2、C)、
(3、A)、(3、 B)、(3、C)}
3×3 = 9が得られます。

データベース内のマルチテーブルクエリはデカルト積を生成します。

表1:表学生の名前
学生ID名
1ジョー・スミス
2ジョン・ドウ
3趙6

表2:表生徒の学力
の学校の学力第
1 90
2 80
3 59

問い合わせ:各学生の名前と達成?

学生ID名学校番号は得点
1ジョー・スミス190
2ジョン・ドウ190
3 190趙6を

張1 2 80
2ジョン・ドウ280
。3趙6 280

張1 359
2ジョン・ドウ359
。3趙6 359

アイデア:
句は、クエリの制限を追加する場所の条件によって
無効、有意な結果を排除します。

1)等価結合
フィールドを連結関連する2つのテーブルの等号。
関係:DEPT_IDフィールドは、従業員テーブルID部門テーブルの列と同じである
SELECTはs1.id、LAST_NAME、s2.id、名前
s_emp S1、S2 s_deptから
WHERE s1.dept_id = s2.id;

2)等価でない接続
クエリ:すべてIDの従業員、給与や所得水準?
s_emp、s_gender相関的クエリ

SELECTはe.id、e.salary、g.name
s_empのE、Gのs_genderから
WHERE g.minSalとg.maxSal BETWEEN e.salary。

表の従業員
ID給与
。1 1200
2 2400
3 1700

所得水準テーブル
最小最大級名
01000ブルー・カラー
1000年1500ホワイトカラー
15002500金陵

ブルー1120001000
2240001000青
3170001000青

1120010001500カラー
2240010001500襟
3170010001500襟

1120015002000金陵
2240015002000金陵
317001500200金陵

3)外部結合
)左外部結合は
、すべての従業員のためのクエリID、LAST_NAMEと
IDの部門、名前を?
SELECT、e.LAST_NAME、d.id、d.name e.id
s_emp Eから、D s_dept
WHERE e.dept_id = d.id。

クエリID、LAST_NAMEなどの全従業員
の彼女の部門ID、名前は?私たちは何の部門の従業員がいることを要求さ
もチェックしてくださいませんか?
アイデア:スタッフの必要性は、Departmentテーブルに接続された外側シートを残しました。
あなたは見つけることができます何の部門の従業員がありません。
e.id SELECT、e.LAST_NAMEは、d.name、d.id
参加s_deptからはs_emp E D左
; ON = e.dept_id d.id

A B-シート状に接続された左、見つけることができないB Aを

構文:
標準のSQL:規格や仕様のセット、任意のリレーショナルデータベースでの
SQLコマンドを実行することができます。
.... SELECT
[外]左表1エイリアス1から別名2表2に加わる
接続条件に、

B)右外側は、接続
の等価に接続されている外側の表A、表Bを左
から右へ接続された外表B表A。
構文:
標準SQL:
SELECT ....
表1エイリアス1右から[外]はエイリアス2表2加入
接続条件に、

e.id、e.last_name、d.idを選択し、d.name
s_emp eからはs_dept Dに参加左
e.dept_id = d.id上;
等同于:
選択e.id、e.last_name、d.id、dは。名前
s_dept Dからは右s_emp Eに参加
e.dept_id = d.idに。


Xianxiangデータベース内のデータの挿入:
INSERT INTOのs_dept(ID、名前)
の値(1000年、 '教育');
COMMIT;

演習:ID、LAST_NAMEと、すべての従業員のためのクエリ
IDの部門、名前は?すべての要求事項はありません
また、チェックアウトの部門の従業員は?
関係:左外従業員テーブルに接続された部門テーブルと、
外側の従業員テーブルは右部門テーブルに接続され、
SELECT e.id、e.LAST_NAME、d.id、d.name
からはD E s_dept左s_emp参加
ONがe.dept_id = D. ID;

SELECT e.id、e.LAST_NAME、d.id、d.name
参加s_dept右s_emp E Dから
ON = e.dept_id d.id。

Oracleは、構文の特長:
左外部結合:
使用している二つのテーブルの接続関係を宣言するキーワード、
少ないデータ側にして、(+)。
クエリは.....まったく部門の従業員が現れないことを要求されましたか?
SELECT、e.LAST_NAME、d.id、d.name e.id
s_emp Eからの、D s_dept
WHERE e.dept_id d.id =(+)。

クエリ.....すべての部署が表示されていることを要求されましたか?
SELECT、e.LAST_NAME、d.id、d.name e.id
s_emp E、Dのs_deptから
、e.dept_id(+)= d.idを

C)完全に接続
完全な接続は、左右外側の外部接続の両方を使用することと等価です。
注:Oracleは、完全に機能の構文は接続されていません。
あなたは、標準SQLを使用する必要があります(完全に...参加...) 。

たとえば、次のようにすべての従業員、LAST_NAME、およびのためのクエリID
ID対応部署、名前は?
私たちは何の部門の従業員と部門の従業員ではないが表示されていないことを要求されましたか?
SELECT、e.LAST_NAME、d.id、d.name e.id
フルs_emp E D s_dept参加から
、= e.dept_id d.idオン

e.id、e.last_name、d.id、d.nameを選択
s_dept Dからフルs_emp電子に参加
e.dept_id = d.idに。

構文:
SELECT ...
表1エイリアス1フル[外]の参加エイリアス2表2から
接続状態に;

完全にBに接続され、あなたはありませんBとA、AのBをチェックアウトすることはできません

4)接続するので
、表自身と関連付けます。
それはテーブルですが、二つのテーブルとしてクエリを使用してますが。

たとえば、次のように
すべての従業員のためのクエリID、LAST_NAME
IDのとマネージャー、LAST_NAME?

s1.id SELECT、s1.last_name、s2.id、s2.last_name
s_emp S1からS2 s_emp
WHERE s1.manager_id = s2.id。

質問:どのように私は、管理者がすべての従業員ではありません見つけるのですか?
どのように私はすべてのスタッフ何のマネージャーを見つけませんか?

5)のセットに接続されました

3.Oracleデータベース疑似列
Oracleデータベースで、疑似列と呼ばれる特別なフィールドが、そこにあります。
フィールドのない本当の意味。
これは、いずれかのテーブルに含まれていますが、クエリを選択した任意の時点で表示されていない
結果に。

1)ROWID
現在のデータの物理的な記憶場所を識別するために使用されます。
たとえば:
SELECT ID、姓、ROWID
s_empから;
2)ROWNUMは、
現在のテーブル内のデータの数を識別するために使用されます。
注:ROWNUMフィールドが1で開始する必要があります。
まず、結果セット、ラベルのみ。
ID SELECT、LAST_NAME、ROWNUM
s_empから。

使用?
クエリページング
次のような
最初の10従業員データに照会テーブルを?
上述ID上記SELECT、LAST_NAME
s_empから
ROWNUM <= 10、

問い合わせデータの11-20個?
サブクエリを使用して、(ネストされたクエリ)
の書き込みエラー:
SELECT ID、姓
s_empから
WHERE ROWNUM> = 11とROWNUM <= 20です。


Webアプリケーションの実装プロセスでのページ:
1)のフロントページの
背後にあるコードのデータベースからすべてのデータを見つけるためには、
すべてのフロントページに戻ります。
JS技術によるフロントページでは、ディスプレイや隠されたデータを制御します。
ページングの効果を達成するために。
お勧めできません。
2)
3)


 

 

 

おすすめ

転載: www.cnblogs.com/DennySmith/p/12189191.html