高度な#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`。