【SQL Server】 INNER JOIN(内部結合)

SQL Server
この記事は約3分で読めます。
基本文型
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

 

コメント

タイトルとURLをコピーしました