MySQL学習-マルチテーブルクエリ(5)

一緒に書く習慣を身につけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して17日目です。クリックしてイベントの詳細をご覧ください

序文

前回の記事では、いくつかのマルチテーブルクエリについて学びました。興味のある友達は読むことができます(#MySQL学習-マルチテーブルクエリ(4))。
MySQLのマルチテーブルクエリについて引き続き学習しましょう。

SQL99内部結合

例1

従業員の名前、部門名を照会します。

前回の記事では、内部結合の例を記述しました。これを記述する別の方法は次のとおりです。

SELECT e.name, d.department_name
FROM employees e INNER JOIN departments d
ON e.'department_id' = d.'department_id'
复制代码

上記のステートメントを使用しても正しい結果を見つけることができます。文法には内部結合を表す追加の「INNER」があることがわかりますが、最初の書き込み方法では「INNER」を省略しています。これに対応して、外部結合の記述方法を見ていきます。

SQL99左外部結合

例2

すべての従業員の名前と部門名を照会します。

SELECT e.name, d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON e.'department_id' = d.'department_id'
复制代码

このようにして、正しい結果を見つけることができ、「LEFT OUTER」左外部結合を追加することにより、左外部結合のクエリを実行できます。
これを書く別の方法は次のとおりです。

SELECT e.name, d.department_name
FROM employees e LEFT JOIN departments d
ON e.'department_id' = d.'department_id'
复制代码

正しい結果を見つけることもできます。ここで「OUTER」を省略することもできます。

SQL99右外部結合

例3

SELECT e.name, d.department_name
FROM employees e RIGHT JOIN departments d
ON e.'department_id' = d.'department_id'
复制代码

ここでは、右外部結合クエリに「RIGHTJOIN」を使用できます。

SQL99完全外部結合

例4

SELECT e.name, d.department_name
FROM employees e FULL OUTER JOIN departments d
ON e.'department_id' = d.'department_id'
复制代码

クエリの構文で「FULLOUTERJOIN」を使用しますが、MySQLが「FULLOUTER JOIN」構文をサポートしていないため、エラーが報告されていることがわかりました。MySQLはどのようにして外部結合でいっぱいのクエリを実行できますか?最初に「UNION」キーワードの使用法を学ぶ必要があります。

UNIONの使用

クエリ結果を組み合わせる

UNIONキーワードを使用すると、複数のSELECTステートメントを指定して、それらの結果を1つの結果セットに結合できます。マージする場合、2つのテーブルに対応する列の数とデータ型は同じであり、互いに対応している必要があります。'UNION'または'UNIONALL'キーワードを使用して、各SELECTステートメントを区切ります。

構文形式:

SELECT name FROM employees
UNION [ALL]
SELECT department_id FROM departments
复制代码

UNIONオペレーター

UNION演算子は、重複レコードが削除された2つのクエリの結果セットの和集合を返します。

UNIONALLオペレーター

UNION ALL演算子は、重複排除なしで、2つのクエリの結果セットの和集合を返します。

実際の使用では、重複排除の結果、つまりUNION演算子は、完全な外部結合の場合と一致しています。ただし、UNION演算子とUNION ALL演算子の両方が状況に合っている場合は、UNION ALL演算子を使用することをお勧めします。これは、UNION演算子には重複排除のステップが1つあり、クエリの効率に影響するためです。

今日ここで学び、明日も続けてください。

おすすめ

転載: juejin.im/post/7087531620021829640