基本文型
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
コメント