6高度:結合問合せ2、SQL99文法

#二つは、SQL99構文
/ *
構文:
クエリのSELECTリスト
表1エイリアスから[接続タイプ]
表2エイリアスを加入
接続条件に
[]フィルタ
によって[基]基
[有する]フィルタ
[リストをソートすることによって注文]

分類:
コネクタ(★):内側
、外側、接続
(★)は、外側左:左の[外]
右外側(★):右の[外]
フルアウター:フル] [外
クロスコネクト:断面

* /


エン#1 A)
/ *
構文:

クエリのリストを選択し
、表1エイリアスから
内側エイリアステーブル2を接合
接続状態に。

カテゴリー:
等価
非同等の
自己結合

特徴:
①、ソート、グループ化を追加するスクリーニング
②innerを省略することができる
分離を改善するために、上のバック接続条件に、③どこ背面のフィルターを、読みやすい
④inner接続と同等の接続を結合構文のSQL92効果は同じである、されていますこれは、マルチテーブルクエリの交点であります

 

 

* /


#1、同等の接続
#ケース1.クエリの従業員名、部署名

SELECT LAST_NAMEは、DEPARTMENT_NAME
部門のは、D
の従業員を登録しよ電子
ON e.`department_id` = d.`department_id`。

 

電子名に含まれるクエリ名のケース#2従業員の名前とタイプ(フィルタの追加)
SELECT LAST_NAME、JOB_TITLE
従業員から電子
INNER求人Jを登録しよう
e.`job_id` = j.`job_id` ON
WHEREはLIKE「%をe.`last_name` E%「;

 

#3。お問い合わせの数部門>市と部門番号3(+パケットフィルタリングを追加します)

#1①クエリ各都市部門番号
#②①の結果に条件満たすためにスクリーニング
SELECT都市、COUNT(*)セクタの数
カテゴリー由来のD
インナー位置LをJOIN
l.`location_id` d.`location_id` = ON
GROUP BY市
HAVING COUNT(*)> 3。

 


4.ケース#クエリ数が降順部門>部署名と従業員番号3、プレス従業員の数(ソートを追加)

各部門の従業員の#1①クエリ数
SELECT COUNT(*)、DEPARTMENT_NAME
社員FROM E
D部門内部結合を
ON e.`department_id` = d.`department_id`
DEPARTMENT_NAMEてグループを

#②①ソート> 3のレコードとの結果に従業員の数をスクリーニング

SELECT COUNT(*)个数、DEPARTMENT_NAME
従業員から電子
インナー部門は、D JOIN
ON e.`department_id` = d.`department_id`
DEPARTMENT_NAME BY GROUP
COUNT(*)を有する> 3
COUNT(*)DESC BY ORDER。

降順での部門名に応じて#5。クエリのスタッフ名、部署名、ジョブの名前は、(3つのテーブルの接続を追加します)

LAST_NAME、DEPARTMENT_NAME、のjob_titleを選択
従業員Eから
INNERが部門はD上のe.`department_id` = d.`department_id`、JOIN
INNER JOINのジョブをJ ON e.`job_id` = j.`job_id`を

DEPARTMENT_NAMEのDESC BY ORDER。

#1 B)非等価接続

#クエリの賃金水準の従業員

給与SELECT、grade_level
Eの従業員を
GをJOINはjob_grades
; ONがg.`lowest_sal` AND g.`highest_sal` BETWEEN e.`salary`


#有料レベル問い合わせ番号20の>数とに従って降順に賃金レベル
SELECT COUNTを( *)、grade_level
従業Eから
JOIN G job_grades
ONがAND g.`highest_sal` g.`lowest_sal` BETWEEN e.`salary`
grade_levelてグループを
20> HAVING COUNT(*)は
grade_level DESC BY ORDER;


のC)から接続

#クエリ従業員の名前、上位の名前
SELECT e.LAST_NAMEは、m.last_name
従業員Eから
は、参加は従業員をmは
、ON e.`manager_id` = m.`employee_id`

#クエリ文字名は従業員kの名前が含まれ、高い名前は
SELECT e.LAST_NAMEは、m.last_name
Eの従業員が
従業員MをJOIN
E.`manager_id` = m.`employee_id` ON
WHEREはLIKE「%のKの%」e.`last_name`;


#2は、外部接続

/ *
シナリオは:テーブルのクエリは、別のテーブルのレコードが存在しなかった

特性は:
1、表外側コネクタメインクエリ結果のすべてのレコード
が一致した場合、ディスプレイは、テーブルからの値に一致する
テーブル場合、それが一致しない場合、ヌル表示
外側の接続は、クエリ結果を結合= +プライマリ・テーブルからの結果は、テーブルのレコードが存在しない
2左外側に接続され、左ジョイン、左メインテーブルで
右右に参加する、参加外側右メインテーブルであり
、左右の外側の2つの外側の切替順序テーブル、3、あなたは、同じ効果を達成することができます
4、すべての+ =表1表2内の外側の接続結果に接続しますが、表2には+が存在しない、ではなく、テーブルに1
* /
#が導入さ:クエリテーブルのボーイフレンドではない神の女神名前

SELECT * FROM美容;
SELECT * FROMボーイズ;

#は接続する外左
SELECT B *、BO * ..
BOボーイズFROM
LEFT OUTER JOINの美容B
ON b.`boyfriend_id` = bo.`id`
IS b.`id` WHEREをNULL;


ケース1:クエリの部門の従業員がいない
#外に残さ
dはSELECT *、e.employee_id。
部署FROM日間
の従業員を左外部結合を電子
ON d.`department_id` = e.`department_id`
e.`employee_id`がNULL IS WHERE。


#右外

。dはSELECT *、e.employee_id
従業員FROMは、電子
RIGHT OUTER JOINを部門は、D
ON d.`department_id` = e.`department_id`
e.`employee_id`はNULL IS WHERE。


#全外


使用の女の子。
SELECT * B、BO *。。
美しさに由来するB
FULL OUTERは、男の子はボーJOINの
ON b.`boyfriend_id` = bo.id。

#クロスコネクト

SELECTのb *、BO * ..
beautyからB
CROSSはボーイズBOを登録しよう;



#のSQL92とsql99pk
/ *
機能:SQL99のサポートがより
読みやすい:読みやすさよりもSQL99分離接続条件やフィルタ条件、高
* /

おすすめ

転載: www.cnblogs.com/Diyo/p/11358952.html