6高度:クエリに参加

高度な#6:クエリに参加
/ *
意味:また、マルチテーブルクエリ、複数のテーブルからフィールドクエリとして知られているが、接続が使用されます照会します

直積現象:表1のm行、n個の行が行= M×n個の結果を、表2にあります

その理由が発生しました:有効な接続条件はありません
有効な接続条件を追加します。回避する方法

カテゴリー:

年によって:
SQL92標準:だけ内側接続
エン+支援外部結合(外側及び外側左右)+クロスコネクト:標準[推奨] SQL99

機能によって:
EN:
    等価結合
    非等価接続
    接続から
外部接続:
    外側の左
    と右の外部結合
    完全外部結合を
クロス接続します


* /

美しSELECT * FROM。

男の子SELECT * FROM。


SELECT NAME、男の子FROM boyName、美しさ
WHERE beauty.boyfriend_id = boys.id。

#A、SQL92標準
#1、同等の接続
/ *

表①マルチにおける結果交差点テーブルの同等の接続がマルチの一部である
少なくとも②n接続テーブル、n-1個の接続状態
③ポリエピトープ順序ではない
④一般エイリアステーブルを開始する必要
⑤前述のすべての句で使用することができ例えば、ソート、グループ化、フィルタリングなど


* /

 

ケース#1:クエリの女神の名と神の対応する男性の名前は
SELECT NAMEは、boyName
ボーイズ、beautyから
WHERE beauty.boyfriend_id = boys.id。

ケース#2:クエリの従業員名と対応する部署名

SELECT LAST_NAME、DEPARTMENT_NAME
従業員からの、部署
WHERE employees.`department_id` = departments.`department_id`。

 

#2、表の別名は
/ *
①の簡潔な声明増加
倍数を区別するために、同じ名前のフィールドを②

注意:エイリアスのテーブルには、フィールドのクエリを定義するために、テーブルの元の名前を使用できない場合

* /
#クエリの従業員の名前、ジョブ番号、名称取引

SELECT e.last_name、e.job_id、j.job_title
従業員Eから、ジョブJ
WHERE e.`job_id` = j.`job_id`。


#3、順序を逆にしてもよい二つのテーブルなら

#クエリの従業員の名前、ジョブ番号、名称取引

SELECT e.last_name、e.job_id、j.job_title
ジョブjから、従業員の電子
WHERE e.`job_id` = j.`job_id`。


#4、あなたはフィルタを追加することができます


ケース#:クエリあった職員のボーナス、部署名

SELECT LAST_NAME、DEPARTMENT_NAME、COMMISSION_PCT

従業員のeから、各部門は、D
e.`department_id` = d.`department_id` WHERE
AND e.`commission_pct`がNULLではありません。

ケース#2:部門名や都市名0のための二番目の文字でクエリ都市名

DEPARTMENT_NAMEを選択して、都市
部門FROMは場所L、D
d.`location_id` = l.`location_id`
AND都市'_o%' LIKE。

#5、あなたはグループを追加することができます


ケース#1:クエリの数各都市部門

SELECT COUNT(*)个数、都市
部門のは、場所のL dは
d.`location_id` = l.`location_id`
市基;


ケース#2:いいえお問い合わせは最低賃金を主導していないと、部門の部門名やボーナスの各部門の部門
SELECT DEPARTMENT_NAME、d.`manager_id`、MIN(給与)
部門Dからの、従業員E
WHERE d.`department_id` = e.`department_id`
とNULLでないCOMMISSION_PCT
GROUP BY DEPARTMENT_NAMEを、d.`manager_id`;
。#6、ソートするために追加することができます


ケース#:クエリ名と各取引における従業員のジョブの数、および従業員の数に応じて降順に

job_title、COUNT(*)を選択し
、従業員のeから、ジョブがJ
WHERE e.`job_id` = j.`job_id`
GROUP BYのjob_title
COUNT(*)DESC BY ORDER。

 


#7は、3-テーブルのジョイン達成することができますか?

ケース#:問い合わせスタッフ名、部署名、および都市の場所

SELECT LAST_NAME、DEPARTMENT_NAME、市
従業員のeから、開発部門、場所のL
WHERE e.`department_id` = d.`department_id`
AND d.`location_id` = l.`location_id`
、市LIKE 'sの%'

DEPARTMENT_NAMEのDESC BY ORDER。

 

#2、非同等の接続


ケース#1:クエリ賃金や賃金水準


SELECT給与、grade_level
従業eから、job_grades G
WHERE g.`lowest_sal` AND g.`highest_sal` BETWEEN給与
AND g.`grade_level` = 'A'を、

/ *
給与、従業員からのEMPLOYEE_IDを選択します。
job_gradesから*を選択します。
表job_gradesをCREATE
(grade_level VARCHAR(3)、
lowest_sal INT、
highest_sal INT)。

job_gradesのINSERT INTO
VALUES( 'A'、1000年、2999年);

job_gradesする。INSERT INTO
VALUES( 'B'、3000、5999)。

job_gradesする。INSERT INTO
VALUES( 'C'、6000、9999)。

job_gradesする。INSERT INTO
VALUES( 'D'、10000、14999)。

job_gradesのINSERT INTO
VALUES( 'E'、15000、24999);

INSERT INTO job_grades
VALUES( 'F'、25000、40000);

* /

 


接続以来、#3、

 

ケース#:従業員名のクエリ名と上司

SELECT e.employee_id、e.last_name、m.employee_id、m.last_name
従業eから、従業員M
e.`manager_id` = m.`employee_id`。

 

おすすめ

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