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の詳細なインストール履歴

推薦する

JSはクリックドロップ効果を実装します

jsはクリックとドロップの特殊効果を実現します。まずは効果画像を見てみましょうさっそく始めましょう。...

ローカルサーバーを構築するためのwebpack-dev-serverの実装

目次序文webpack-deb サーバーwebpack-dev-server 起動エラー解決策1解決...

Vue3.0+vite2は動的非同期コンポーネントの遅延読み込みを実装します

目次Viteプロジェクトを作成するコンポーネントの作成Viteプロジェクトを作成するパフォーマンスが...

IE8対応のボーダー半径処理方法

canisue (http://caniuse.com/#search=border-radius)...

NginxはLua+Redisを使用してIPを動的にブロックします

1. 背景日常的なウェブサイトのメンテナンスでは、このような要件に頻繁に遭遇します。特定のクローラー...

XHTML と CSS の Web ページ作成の問題に対する解決策

XHTML CSS ページ制作中に遭遇する問題の解決策は、解決策と呼ぶには少々大げさです。せいぜい、...

CSS カウンターとコンテンツの概要

コンテンツ プロパティは CSS 2.1 で導入され、:before および :after 疑似要素...

MySQLデータベースは何をするのか

MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...

MySQL タイムスタンプ比較クエリで遭遇する落とし穴と解決策

目次タイムスタンプ比較クエリで遭遇する落とし穴タイムスタンプクエリ範囲の問題タイムスタンプ比較クエリ...

Linux sftp コマンドの使用法

SFTPの概念sftp は、安全なファイル転送プロトコルである Secure File Transf...

MySQL 最適化: キャッシュ最適化 (続き)

MySQL 内部には至るところにキャッシュがあります。MySQL のソースコードを読むと、キャッシ...

3つの簡単な例を使ってハイパーリンクの下線を削除する方法

ハイパーリンクの下線を削除するには、スタイルシート CSS を使用する必要があります。当面は CSS...

要素の読み込み効果を実現するための純粋なHTML+CSS

これは Element UI の読み込みコンポーネントのエフェクトです。かっこいいですね。実装してみ...

NavicatでMySQLビッグデータをインポートする際のエラーの解決方法

Navicat がエクスポートしたデータはインポートできません。最後に、MySQLコマンドのインポー...

MySQLインスタンスが起動できない問題の分析と解決

目次序文シナリオ分析要約する序文数日前、友人がWeChatで私に連絡してきて、マシンがダウンタイムか...