MySQL マルチテーブルクエリの詳細な説明

MySQL マルチテーブルクエリの詳細な説明

よく食べて十分に休息を取るというのは簡単なことのように思えますが、実際に実行するのはそれほど簡単ではありません。

1999年のMySqlマルチテーブルクエリの構文を引き続き確認します

#2、SQL1999 構文:
 SELECT クエリ リスト FROM テーブル 1 エイリアス [接続タイプ]
 JOIN テーブル 2 エイリアス ON リンク条件 [WHERE フィルタ条件]
 グループ化
 【フィルター条件あり】
 【ORDER BY ソートリスト ASC|DESC】

カテゴリ(接続タイプ):
 内部結合(★):INNER
 左外部結合(★):LEFT【OUTER】
 右外側(★):右【外側】
 フル【アウター】
 クロスコネクション:CROSS

===============================================================================

1. 内部結合構文:
 SELECT クエリ リスト FROM テーブル 1 エイリアス INNER JOIN テーブル 2 エイリアス ON 結合条件 [WHERE フィルタ条件]
 グループ化
 【フィルターグループを持つ】
 【ORDER BY ソートリスト ASC|DESC】

分類:
 等価および非等価の自己接続の特性:
 ①並び替え、グループ化、フィルタリングを追加する ②INNERは省略可能 ③WHEREの後にフィルタリング条件、ONの後に連結条件を置くことで分離性が向上し、読みやすくなります。
 ④INNER JOIN接続の効果は、SQL1992構文の同等の接続と同じであり、どちらも交差部分を照会します。
#1. 同等の接続 #ケース 1. 従業員名と部門名を照会します。結合条件を入れ替えても結果には影響しません。
SELECT last_name AS employee_name,department_name AS department_name FROM employees_name
INNER JOIN 部門 d
オン e.department_id=d.department_id;
SELECT last_name AS employee_name,department_name AS department_name FROM employees_name
INNER JOIN部門e
オン e.department_id=d.department_id; 

#ケース 2. 「e」を含む従業員と職種名を照会する (スクリーニング)
SELECT last_name AS employee name, job_title AS job title FROM employees e
INNER JOINジョブ j
オン e.job_id=j.job_id
e.last_name が '%e%' のように記述される場所; 

#ケース 3. 部門数が 3 を超える都市名と部門番号を照会します。 (グループ化 + フィルタリング)
手順: まず各都市の部門の数を調べ、次に要件を満たす部門をフィルタリングします。
SELECT city AS city,COUNT(*) AS number FROM locations l
INNER JOIN 部門 d
オン l.location_id=d.location_id
都市別にグループ化
COUNT(*) > 3 である; 

#ケース4. 従業員数が3人以上の部門名と従業員数を照会し、降順で並べ替えます。
ステップバイステップ:
1. 各部門の従業員数を照会する
2. 上記の結果から、従業員が 3 人を超えるレコードを除外します。
3. 従業員数をソートする SELECT COUNT(*) AS 従業員数, d.department_name AS 部門名 FROM 従業員 e
INNER JOIN 部門 d
オン e.department_id=d.department_id
GROUP BY d.部門名
カウント(*) > 3
従業員番号で順序付け DESC; 

#ケース 5. 従業員名、部門名、役職名を照会し、部門名の降順で並べ替えます。 3つのテーブルを接続する際の条件に注意してください。
SELECT last_name AS 従業員名、department_name AS 部門名、
job_title AS ジョブ名 FROM 従業員 e
INNER JOIN 部門 d
オン e.department_id=d.department_id
INNER JOINジョブ j
オン e.job_id=j.job_id
ORDER BY d.department_name DESC; 

#2. 非等値接続。範囲(間接)
#ケース1. 従業員の給与レベルを照会します。
SELECT salary AS monthly salary, grade_level AS salary grade FROM employees e
内部結合 job_grades g
e.salary が g.lowest_sal と g.highest_sal の間である場合; 

#ケース 2. 20 を超える各給与レベルの数を照会し、降順で並べ替えます。
j.grade_level AS grade、COUNT(*) number FROM employees e を選択
内部結合 job_grades j
e.salary が j.lowest_sal と j.highest_sal の間
GROUP BY j.grade_level
カウント(*) > 20
ORDER BY 番号 DESC; 

#3.自己結合#ケース1.従業員の名前と上司の名前を照会します。
SELECT e.last_name AS 従業員名、m.last_name AS 上司名 FROM 従業員 e
INNER JOIN 従業員 m
e.manager_id=m.employee_id をONにします。 

#ケース 2. 文字 k を含む従業員の名前と上司の名前を照会します。
SELECT e.last_name AS 従業員名、m.last_name AS 上司名 FROM 従業員 e
INNER JOIN 従業員 m
オン e.manager_id=m.employee_id
e.last_name が '%k%' のように記述されます。 

#2. 外部結合アプリケーション シナリオ: あるテーブルに存在するが別のテーブルには存在しないレコードをクエリするために使用されます。
特徴:
1. 外部結合のクエリ結果は、メインテーブル内のすべてのレコードです。セカンダリテーブルに一致するものがある場合は、一致する値が表示されます。セカンダリテーブルに一致するものがない場合、null が表示されます。
外部結合クエリ結果 = 内部結合結果 + メイン テーブルにあるがスレーブ テーブルにはないレコード 2. 左外部結合、LEFT JOIN の左側がメイン テーブル 右外部結合、RIGHT JOIN の右側がメイン テーブル 3. 左外部と右外部の 2 つのテーブルの順序を入れ替えることで、同じ効果を実現できます。
4. 完全外部結合 = 内部結合の結果 + テーブル 1 にはあるがテーブル 2 にはないデータ + テーブル 2 にはあるがテーブル 1 にはないデータ (MySQL ではサポートされていません)
輸入:
beautyから*を選択します。
男の子から*を選択します。 

#はじめに: 男性神テーブルにボーイフレンドがいない女神の名前を照会する SELECT b.NAME,bo.*
美からb
LEFT OUTER JOIN 男の子 bo
b.boyfriend_id=bo.id をオンにします。 

#左外部結合 SELECT b.NAME,bo.*
美からb
LEFT OUTER JOIN 男の子 bo
オン b.boyfriend_id=bo.id
bo.id が NULL の場合;
#テーブルから主キー列を選択する
#右外部結合、同じ結果。
b.NAME、bo.* を選択
男の子から
右外部結合 美しさ b
オン b.boyfriend_id=bo.id
bo.id が NULL の場合; 

# beauty テーブルの行 10 の boyfriend_id を 4 から 6 に変更すると、次の結果が得られます。
b.*、bo.*を選択します。
男の子から
左外部結合の美しさb
オン b.boyfriend_id=bo.id
b.id が NULL の場合; 

#ケース1.どの部門に従業員がいませんか。
#左外部書き込みメソッド SELECT d.*,e.employee_id
部門から
LEFT OUTER JOIN 従業員 e
オン d.department_id=e.department_id
e.department_id が NULL の場合;
==============================
#右外書き方式 SELECT d.*,e.employee_id
従業員から
右外部結合部門d
オン d.department_id=e.department_id
e.employee_id が NULL の場合; 

#完全外部結合の結果は3つの部分で構成されます(たとえば、Mysqlはサポートしていません)構文構造のデモンストレーション最初に2つのテーブルの交差を見つけ、次に不足している部分を見つけ、最後に他の無関係なものを見つけます構文構造の例SELECT b.*,bo.*
美からb
FULL OUTER JOIN 男の子 bo
オン b.boyfriend_id=bo.id
#クロス結合、デカルト積は 1999 構文標準 SELECT b.*,bo.* を使用して実装されています
美からb
CROSS JOIN 男の子 bo; 

#SQL1992構文とSQL1999構文の比較機能: SQL1999はより多くの機能をサポート可読性: SQL1999は接続条件とフィルター条件を分離し、可読性を向上させます

要約:

SELECT <選択リスト>
Aから
内部結合B
A.キー=B.キーの場合; 

SELECT <選択リスト>
Aから
左結合B
A.キー=B.キーの場合; 

SELECT <選択リスト>
Aから
右結合B
A.キー=B.キーの場合; 

SELECT <選択リスト>
Aから
左結合B
A.キー=B.キー
B.KEY が NULL の場合; 

SELECT <選択リスト>
Aから
右結合B
A.キー=B.キー
A.KEY が NULL の場合; 

SELECT <選択リスト>
Aから
フルジョインB
A.キー=B.キーの場合; 

SELECT <選択リスト>
Aから
フルジョインB
A.キー=B.キー
A.KEYがNULLの場合
または B.KEY が NULL です。

簡単なマルチテーブルクエリは終了です。これを読めば、簡単なテーブル結合は簡単にできるようになると思います。わからない人は、えーっと…

ヤン先生の言葉を借りれば、20回か30回書けば感覚がつかめるようになるそうです。 o(^▽^)o.

大学入試が終わり、大学生活が始まりました。自分の世界へのカウントダウンが始まりました... どんな専攻を選ぶにせよ、自分の選択である限り、その専攻で必ず何かを残すと信じなければなりません...

これで、MySQL マルチテーブル クエリの詳細な説明は終了です。MySQL マルチテーブル クエリに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySql マルチテーブル クエリ トランザクションと DCL
  • 4種類のMySQL接続とマルチテーブルクエリの詳細な説明
  • MySQL マルチテーブルクエリの具体例
  • MySQL データベースの高度なクエリとマルチテーブルクエリ
  • MySQL マルチテーブルクエリの詳細な説明
  • デカルト積原理を使用してMySQLで複数のテーブルをクエリする方法を簡単に説明します。
  • MySQL 左結合マルチテーブルクエリの条件記述例
  • MySQL マルチテーブルクエリの実装の分析
  • MySQL マルチテーブルクエリ実装分析
  • MySQL マルチテーブルクエリの詳細な分類

<<:  Linux で PyCurl のエラーを解決する方法

>>:  Ubuntu 20.04 LTSの詳細なインストール履歴

推薦する

AWS無料サーバーアプリケーションとネットワークプロキシ設定チュートリアルの詳細な説明

目次予防必要条件AWSアカウントを申請する仮想マシンの申請と有効化仮想マシンを申請するセキュリティグ...

Docker に fastdfs イメージをインストールする際の注意事項

1. Docker環境を準備する2. fastdfsイメージを検索する 3. イメージをプルするdo...

JavaScript でオブザーバー パターンを実装する方法

目次概要オブザーバーパターンの応用シナリオオブザーバーパターンの実装要約する概要オブザーバー パター...

CSS属性のデフォルト値width: autoとwidth: 100%の違いの詳細な説明

幅: 自動子要素(コンテンツ+パディング+境界線+余白を含む)は、親要素のコンテンツ領域全体を埋めま...

vue N​​progress のプログレスバー機能を実装する際の一般的な問題

NProgress は、ページがジャンプしたときにブラウザの上部に表示される進行状況バーです。公式ウ...

Tomcatの全体構造の簡単な紹介

Tomcat は Web コンテナとして広く知られています。Java を学び始めたときから現在の仕事...

Ubuntu Linux に Git と GitHub をインストールして使用する

Git 入門Git は、Linux(R) カーネル開発の管理を支援するために 2005 年に Lin...

HTMLでは、全体的なスタイルとレイアウトを崩さずに、部分的に強制スクロールバーを使用できます。

まずはエフェクト画像を投稿します:全体的なスタイルとレイアウトが崩れないように、スクロール バーがロ...

Docker を使用して ELK ログ システムを構築する例

以下のインストールではすべて、インストール ルート ディレクトリとして ~/ ディレクトリが使用され...

MySQL エラー: ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションの解決策を再起動してください

問題を見つける最近、以前のデータを入力していたときに、プログラムが突然次のエラーを報告しました。 [...

Vue-router プログラムナビゲーションの 2 つの実装コード

ページをナビゲートする2つの方法宣言型ナビゲーション: リンクをクリックしてナビゲーションを実現する...

IDEA が docker を統合して springboot プロジェクトを展開するプロセス全体

目次1. IDEAはdockerプラグインをダウンロードします2. クラウドサーバーDocker 2...

MySQL の複合インデックスはどのように機能しますか?

目次背景複合インデックスを理解する左端一致原則フィールド順序の影響複合インデックスは単一のインデック...

ハイパーリンクを開くターゲットのテスト

リンクのターゲット属性は、リンクが開く場所を決定します。その値は通常、_blank、_self、_p...

MySQL でのトリガーとカーソルの紹介と使用

トリガーの紹介トリガーは、テーブルに関連付けられた特別なストアド プロシージャであり、テーブル内のデ...