この記事では、INNER JOINの概念と、それをSQLでWHERE句を使用して使用する方法について学習します。
SQLの内部結合とは何ですか?
内部結合は、SQLの結合の一種です。 SQLの内部結合は、広く使用されている結合です。この結合は、両方のテーブルに共通する行のみを返します。内部結合は、2つのテーブルを結合するために使用されます。
SQLの内部結合の構文:
SELECT table1.columname1, table1.columnname2, table2.columnname1, table2.columnname2 FROM TABLE1 INNER JOIN TABLE2 ON table1.column = table2.column;
Table1.column =table2.columnは、これら2つのテーブル間の親子関係を維持する共通の列です。
SQLクエリの内部結合で使用する必要のある手順がいくつかあります。
1. USEキーワードに続けてデータベース名を使用してデータベースを選択することにより、新しいデータベースを作成するか、既存のデータベースを使用します。
2.選択したデータベース内に新しいテーブルを作成するか、作成済みのテーブルを使用できます。
3.テーブルが新しく作成された場合は、INSERTクエリを使用して新しく作成されたデータベースにレコードを挿入します。
4.内部結合クエリを使用せずにSELECTクエリを使用して、挿入されたデータを表示します。
5これで、SQLクエリで内部結合を使用する準備が整いました。
ステップ1:新しいデータベースを作成するか、作成済みのデータベースを使用します。
私はすでにデータベースを作成しました。既存の作成済みデータベース名Companyを使用します。
USE Company;
会社はデータベース名です。
データベースを作成していない人は、以下のクエリに従ってデータベースを作成します。
CREATE DATABASE database_name;
データベースを作成したら、USEキーワードに続けてデータベース名を使用してデータベースを選択します。
ステップ2:新しいテーブルを作成するか、既存のテーブルを使用します:
すでにテーブルを作成しました。内部結合クエリを実行するときに、EmployeesとManagerという名前の既存のテーブルを使用します。
新しいテーブルを作成するには、以下のCREATETABLE構文に従います。
CREATE TABLE table_name(
columnname1 datatype(column size),
columnname2 datatype(column size),
columnname3 datatype(column size)
);
ステップ3:INSERTクエリを使用して新しく作成されたテーブルにレコードを挿入します
次の構文を使用して、テーブルに新しいレコードを挿入します。
INSERT INTO table_name VALUES(value1, value2, value3);
ステップ4: SELECTクエリを使用してレコードを表示します。
次の構文を使用して、テーブルのレコードを表示します。
SELECT * FROM table_name;
次のクエリは、従業員のレコードを表示します。
SELECT * FROM Employees;
上記のSELECTクエリの出力は次のとおりです。
EMPLOYEEID | FIRST_NAME | LAST_NAME | 給与 | CITY | 部門 | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | シャルマ | 60000 | NOIDA | C# | 5 |
1003 | NIKHIL | VANI | 50500 | ジャイプール | FMW | 2 |
2001 | PRACHI | シャルマ | 55500 | チャンディーガル | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | ルチカ | JAIN | 50000 | ムンバイ | C# | 5 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | ジャイプール | FMW | 2 |
3003 | DEEPAM | ジャウハリ | 58500 | ムンバイ | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | ムンバイ | テスト | 4 |
4002 | ASHWINI | バガット | 54500 | NOIDA | JAVA | 3 |
4003 | ルチカ | AGARWAL | 60000 | デリー | ORACLE | 1 |
5001 | ARCHIT | シャルマ | 55500 | デリー | テスト | 4 |
5002 | SANKET | チャウハン | 70000 | ハイデラバード | JAVA | 3 |
5003 | ROSHAN | NEHTE | 48500 | チャンディーガル | C# | 5 |
6001 | RAHUL | NIKAM | 54500 | バンガロール | テスト | 4 |
6002 | ATISH | JADHAV | 60500 | バンガロール | C# | 5 |
6003 | ニキタ | INGALE | 65000 | ハイデラバード | ORACLE | 1 |
次のクエリは、Managerのレコードを表示します。
SELECT * FROM Manager;
上記のSELECTクエリの出力は次のとおりです。
Managerid | manager_name | manager_department |
1 | Snehdeep Kaur | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | アヌパムミシュラ | テスト |
5 | Akash Kadam | C# |
次のクエリは、ラップトップのレコードを表示します。
SELECT * FROM Laptop;
上記のSELECTクエリの出力は次のとおりです。
LAPTOPID | 名前 | EMPLOYEEID |
101 | DELL | NULL |
102 | HP | 1002 |
103 | LENOVO | NULL |
104 | HP | 3003 |
105 | DELL | 4002 |
106 | LENOVO | 4003 |
107 | DELL | 5001 |
108 | HP | NULL |
109 | DELL | NULL |
110 | HP | NULL |
111 | LENOVO | 2002 |
112 | LENOVO | 6003 |
113 | HP | 1003 |
ステップ5:クエリでINNERJOINを使用する準備ができました
例を使って内部結合を理解しましょう。
例1: 内部結合を使用して、従業員ID、名、姓、給与、市区町村を従業員のテーブルから表示し、マネージャーIDとマネージャー名をマネージャーテーブルから表示するクエリを記述します。
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, E.SALARY, E.CITY, M.MANAGERID, M.MANAGER_NAME FROM EMPLOYEES E INNER JOIN MANAGER M ON E.MANAGERID =M.MANAGERID;>
上記のクエリでは、従業員のテーブルから従業員ID、名、姓、給与、都市、マネージャーID、マネージャーテーブルからマネージャー名を取得しました。ここで、従業員のテーブルマネージャーID列はマネージャーテーブルマネージャーID列と同じです。クエリは、両方のテーブルからすべての一致レコードを返します。マネージャーIDは、両方のテーブルに共通の列です。 Eは従業員のテーブルのエイリアス名であり、Mはマネージャーのテーブルのエイリアス名です。 manager id列は、従業員のテーブルで外部キーとして機能します。マネージャーIDは、マネージャーテーブルの主キーとして機能し、2つのテーブル間に親子関係を作成します。
上記のクエリの出力は次のとおりです。
EMPLOYEEID | FIRST_NAME | LAST_NAME | 給与 | CITY | 部門 | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
2001 | PRACHI | シャルマ | 55500 | チャンディーガル | ORACLE | 1 |
4003 | ルチカ | AGARWAL | 60000 | デリー | ORACLE | 1 |
6003 | ニキタ | INGALE | 65000 | ハイデラバード | ORACLE | 1 |
1003 | NIKHIL | VANI | 50500 | ジャイプール | FMW | 2 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
3002 | ANUJA | WANRE | 50500 | ジャイプール | FMW | 2 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3003 | DEEPAM | ジャウハリ | 58500 | ムンバイ | JAVA | 3 |
4002 | ASHWINI | バガット | 54500 | NOIDA | JAVA | 3 |
5002 | SANKET | チャウハン | 70000 | ハイデラバード | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | ムンバイ | テスト | 4 |
5001 | ARCHIT | シャルマ | 55500 | デリー | テスト | 4 |
6001 | RAHUL | NIKAM | 54500 | バンガロール | テスト | 4 |
1002 | VAIBHAV | シャルマ | 60000 | NOIDA | C# | 5 |
2003 | ルチカ | JAIN | 50000 | ムンバイ | C# | 5 |
5003 | ROSHAN | NEHTE | 48500 | チャンディーガル | C# | 5 |
6002 | ATISH | JADHAV | 60500 | バンガロール | C# | 5 |
レコードは、デフォルトのマネージャーIDで昇順で表示されます。
例2: Inner Joinを使用して、従業員のテーブルから従業員ID、名、姓、都市、部門を表示し、マネージャーテーブルからマネージャーIDとマネージャー名を表示するクエリを記述します。ここで、従業員の部門はC#です。
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, E.CITY, E.DEPARTMENT, M.MANAGERID, M.MANAGER_NAME FROM EMPLOYEES E INNER JOIN MANAGER M ON E.MANAGERID =M.MANAGERID WHERE DEPARTMENT = ‘C#’;
上記のクエリでは、従業員のテーブルから従業員ID、名、姓、市区町村、部門、マネージャーID、マネージャーテーブルからマネージャー名を取得しました。ここで、従業員テーブルのマネージャーIDはマネージャーテーブルのマネージャーIDと同じです。従業員部門がC#である従業員レコード。
上記のクエリの出力は次のとおりです:
EMPLOYEEID | FIRST_NAME | LAST_NAME | 給与 | CITY | 部門 | MANAGERID |
1002 | VAIBHAV | シャルマ | 60000 | NOIDA | C# | 5 |
2003 | ルチカ | JAIN | 50000 | ムンバイ | C# | 5 |
5003 | ROSHAN | NEHTE | 48500 | チャンディーガル | C# | 5 |
6002 | ATISH | JADHAV | 60500 | バンガロール | C# | 5 |
上記の出力では、部門がC#である従業員から取得されたレコードのみを確認できます。 INNER結合でWHERE句を使用します。
例3: 内部結合を使用して、従業員のテーブルから従業員ID、名、給与、市、部門を表示し、ラップトップテーブルからラップトップIDとラップトップ名を表示するクエリを記述します。
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.SALARY, E.CITY, E.DEPARTMENT, L.LAPTOPID, L.NAME FROM EMPLOYEES E INNER JOIN LAPTOP L ON E.EMPLOYEEID = L.EMPLOYEEID;>
上記のクエリでは、従業員ID、名、給与、市区町村、部門を従業員テーブルから取得し、ラップトップIDと名前をラップトップテーブルから取得しました。ここで、従業員テーブルの従業員IDはラップトップテーブルの従業員IDと同じです。 。従業員IDは、ラップトップテーブルの外部キーであり、従業員テーブルとラップトップテーブルの間に親子関係を作成します。
上記のクエリの出力は次のとおりです:
EMPLOYEEID | FIRST_NAME | 給与 | CITY | 部門 | LAPTOPID | 名前 |
1002 | VAIBHAV | 60000 | NOIDA | C# | 102 | HP |
3003 | DEEPAM | 58500 | ムンバイ | JAVA | 104 | HP |
4002 | ASHWINI | 54500 | NOIDA | JAVA | 105 | DELL |
4003 | ルチカ | 60000 | デリー | ORACLE | 106 | LENOVO |
5001 | ARCHIT | 55500 | デリー | テスト | 107 | DELL |
2002 | BHAVESH | 65500 | PUNE | FMW | 111 | LENOVO |
6003 | ニキタ | 65000 | ハイデラバード | ORACLE | 112 | LENOVO |
1003 | NIKHIL | 50500 | ジャイプール | FMW | 113 | HP |
ラップトップが割り当てられている特定の出力には、これらのレコードのみが表示されます。
例4: クエリを記述して、employeesテーブルの従業員ID、名、給与、部門、および給与>57000または部門がOracleの内部結合を使用してマネージャーテーブルのマネージャーIDとマネージャー名を表示します。
SELECT EMPLOYEEID, FIRST_NAME, SALARY, DEPARTMENT, M.MANAGERID, M.MANAGER_NAME FROM EMPLOYEES E INNER JOIN MANAGER M ON E.MANAGERID = M.MANAGERID WHERE SALARY > 57000 OR DEPARTMENT = 'ORACLE';
上記のクエリでは、従業員のテーブルから従業員ID、名、給与、部門を取得し、マネージャーテーブルからマネージャーIDとマネージャー名を取得しました。ここで、employeesテーブルのマネージャーIDは、マネージャーのマネージャーIDと同じです。給与が57000を超えるか、部門がOracleです。
上記のクエリの出力は次のとおりです:
EMPLOYEEID | FIRST_NAME | LAST_NAME | 給与 | CITY | 部門 | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
2001 | PRACHI | シャルマ | 55500 | チャンディーガル | ORACLE | 1 |
4003 | ルチカ | AGARWAL | 60000 | デリー | ORACLE | 1 |
6003 | ニキタ | INGALE | 65000 | ハイデラバード | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
3003 | DEEPAM | ジャウハリ | 58500 | ムンバイ | JAVA | 3 |
5002 | SANKET | チャウハン | 70000 | ハイデラバード | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | ムンバイ | テスト | 4 |
1002 | VAIBHAV | シャルマ | 60000 | NOIDA | C# | 5 |
6002 | ATISH | JADHAV | 60500 | バンガロール | C# | 5 |
上記の出力では、給与が57000を超える、または従業員部門が「Oracle」である従業員レコードのみが表示されます。 OR演算子は、クエリで指定された条件の1つが真である場合にレコードを表示します。