基本文型
SELECT (取得するカラム) FROM テーブル名1 INNER JOIN テーブル名2 ON (結合条件);
実行例
--テーブル1作成 CREATE TABLE [dbo].[T1]( [Id] INT , [Name] NVARCHAR(20) , ) -- テーブル1データ登録 INSERT INTO T1 SELECT 1,N'荒川太郎'; INSERT INTO T1 SELECT 2,N'荒川次郎'; INSERT INTO T1 SELECT 3,N'佐藤花子'; --テーブル2作成 CREATE TABLE [dbo].[T2]( [Id] INT, [Age] INT, ) -- テーブル2登録 INSERT INTO T2 SELECT 1,18; INSERT INTO T2 SELECT 3,17;
-- 検索実行 select T1.ID,T1.NAME,T2.AGE from T1 inner join T2 ON T1.ID = T2.ID
ON (結合条件)ですが、基本的には
ON テーブル名1.カラム名1 = テーブル名2.カラム名2;
のようにして結合しますが、
テーブル名2.カラム名2 = 1
のように片方だけのテーブルを条件にも出来ます。この条件で良く見るのは
SELECT テーブル名1.カラム名, ... FROM テーブル名1 INNER JOIN テーブル名2 ON テーブル名1.カラム名1 = テーブル名2.カラム名2; AND テーブル名2.カラム名3 = 条件
のようなクエリです。
-- 18歳の人だけ取得 select T1.ID,T1.NAME,T2.AGE from T1 inner join T2 ON T1.ID = T2.ID AND T2.AGE = 18
おまけ
SELECT テーブル名1.カラム名, ... FROM テーブル名1 INNER JOIN テーブル名2 ON テーブル名2.カラム名3 = 20
あまり使う機会はないでしょうが上記クエリも間違っていません。
上記はテーブル名2.カラム名3 に20がある場合だけテーブル名1を取得するとなります。
select T1.* from T1 inner join T2 ON T2.AGE = 20
通しで実行するとわかりやすいと思います。
-- 両方のテーブルに同じIDが登録されている人だけ取得 select T1.ID,T1.NAME,T2.AGE from T1 inner join T2 ON T1.ID = T2.ID -- 18歳の人だけ取得 select T1.ID,T1.NAME,T2.AGE from T1 inner join T2 ON T1.ID = T2.ID AND T2.AGE = 18 -- 20歳の人がいる場合取得 select T1.ID,T1.NAME,T2.AGE from T1 inner join T2 ON T2.AGE = 20
コメント