たとえば、質問に示されているこのプロジェクト テーブルで Country_ID を使用して国の名前を取得しようとしている場合、次のようなことができます。
SELECT C.CountryName_Colummn, C.SomeOtheColumn, ......
FROM Projects P INNER JOIN Countries C
ON P.id_Country = C.id_Country
WHERE SomeColum = 'Your Condition'
1) SELECT 句で、結果セットに必要な列を選択します。
2) FROM テーブル名を言及
3) テーブル間の関係を定義する ON 節 たとえば、Projects テーブルには、Countries テーブルの id_Country を参照する列 id_Country があり、これら 2 つのテーブル間の関係を定義します。
4) 列リスト、データのソース (テーブル)、それらの関係 (On Clause) を選択したら、id_Country WHERE C.CountryName = 'UK' の
ように、クエリから返される行数をフィルター処理できます。
英国からのみ結果を返します。
5) from 句では、文字 'C' と 'P' はエイリアスであるため、完全なテーブル名をもう一度入力する必要はありません。これにより、コードがよりシンプルになり、読みやすく、デバッグしやすくなります。
クエリでそれらのテーブル間の関係を定義できる限り、必要なデータを取得するために結合する必要があるテーブルの数に関係なく、正常に機能するはずです。SQL サーバーでは、必要なすべてのデータが 1 つのテーブルにあることはめったにありません。通常は、2 ~ 3 個のテーブルまたはそれ以上のテーブルを結合します。たとえば、3 つの異なるテーブルに存在するデータが必要な場合は、3 つすべてを次のような 1 つのクエリで結合します ...
SELECT C.CountryName_Colummn, C.SomeOtheColumn, ......
FROM Projects P INNER JOIN Countries C
ON P.id_Country = C.id_Country
INNER JOIN Table_3_Name T3
ON T3.CommonColumn = P.SomeCommonColumn (it will be a common column between table 3 and Projects OR Countries)
WHERE SomeColum = 'Your Condition'
ただし、テーブル間でさまざまな種類の結合を実行できるため、実際に結合を調べる必要があります。この例では、これらすべてのテーブル間で一致する行のみを返す INNER JOIN を使用しました。LEFT JOIN または RIGHT JOIN を実行できます。
LEFT JOINは、JOIN キーワードの LEFT 側にあるテーブルからすべての行を返し、他のテーブルから一致する行のみを返します。
RIGHT JOINは、JOIN キーワードの右側からすべての行を返し、他のテーブルから行をマンチングするだけです。
必要な列のみを含むクエリ
Select customers.customer_name, Products.Product_type, Manufacturers.Manuf_name
from Projects inner join customers
on customers.cust_id= Projects.proj_cust_id
inner join Products
on Products.prod_id= Projects.proj_prod_id
inner join Manufacturers
on Manufacturers.man_id= Projects.proj_man_id
Alias を使用すると、まったく同じ結果が得られますが、読みやすいコードもこれを試してください ....
Select C.customer_name, Prod.Product_type, M.Manuf_name
from Projects Proj inner join customers C
on C.cust_id= Proj.proj_cust_id
inner join Products Prod
on Prod.prod_id= Proj.proj_prod_id
inner join Manufacturers M
on M.man_id= Proj.proj_man_id