「テーブルの集合」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == SQL Serverでは、複数のSELECT文の結果を、統合(和集合)、重複(積集合)を抽出、差(差集合)を抽出することができる。<br> *…」)
 
 
(同じ利用者による、間の2版が非表示)
51行目: 51行目:
テーブルは2つだけでなく、複数のテーブルを統合できる。<br>
テーブルは2つだけでなく、複数のテーブルを統合できる。<br>
注意点としては、テーブルのカラムは同じ数であること。<br>
注意点としては、テーブルのカラムは同じ数であること。<br>
  <source lang="sql">
  <syntaxhighlight lang="sql">
  --野球部とサッカー部のメンバー全員を取得する
  --野球部とサッカー部のメンバー全員を取得する
  SELECT studentno, name FROM act_baseball
  SELECT studentno, name FROM act_baseball
57行目: 57行目:
  SELECT studentno, name FROM act_soccer
  SELECT studentno, name FROM act_soccer
  order by 1;
  order by 1;
  </source>
  </syntaxhighlight>
<br>
<br>
<center>
<center>
88行目: 88行目:


このように、重複をそのまま取得したい場合はUNION ALL句、重複を排除したい場合はUNION句を使用する。
このように、重複をそのまま取得したい場合はUNION ALL句、重複を排除したい場合はUNION句を使用する。
  <source lang="sql">
  <syntaxhighlight lang="sql">
  --野球部とサッカー部のメンバー全員を取得する
  --野球部とサッカー部のメンバー全員を取得する
  SELECT studentno,name FROM act_baseball
  SELECT studentno,name FROM act_baseball
94行目: 94行目:
  SELECT studentno,name FROM act_soccer
  SELECT studentno,name FROM act_soccer
  order by 1;
  order by 1;
  </source>
  </syntaxhighlight>
<br>
<br>
<center>
<center>
124行目: 124行目:
テーブルは2つだけでなく、INTERSECT句でそれ以上のテーブルの重複レコードを取得できる。<br>
テーブルは2つだけでなく、INTERSECT句でそれ以上のテーブルの重複レコードを取得できる。<br>
注意点としては、テーブルの列は同じ数でないといけない。<br>
注意点としては、テーブルの列は同じ数でないといけない。<br>
  <source lang="sql">
  <syntaxhighlight lang="sql">
  --野球部とサッカー部の両方に所属しているメンバーを取得する
  --野球部とサッカー部の両方に所属しているメンバーを取得する
  SELECT studentno,name FROM act_baseball
  SELECT studentno,name FROM act_baseball
130行目: 130行目:
  SELECT studentno,name FROM act_soccer
  SELECT studentno,name FROM act_soccer
  order by 1;
  order by 1;
  </source>
  </syntaxhighlight>
<br>
<br>
<center>
<center>
151行目: 151行目:
注意点としては、テーブルの列は同じ数でないといけない。<br>
注意点としては、テーブルの列は同じ数でないといけない。<br>
ここでは、1つ目のSELECT文がstudentnoカラムとnameカラムの2列なので、それ以降のSELECT文も2列である必要がある。<br>
ここでは、1つ目のSELECT文がstudentnoカラムとnameカラムの2列なので、それ以降のSELECT文も2列である必要がある。<br>
  <source lang="sql">
  <syntaxhighlight lang="sql">
  --野球部にだけ所属しサッカー部には所属していないメンバーを取得する
  --野球部にだけ所属しサッカー部には所属していないメンバーを取得する
  SELECT studentno, name FROM act_baseball
  SELECT studentno, name FROM act_baseball
157行目: 157行目:
  SELECT studentno, name FROM act_soccer
  SELECT studentno, name FROM act_soccer
  order by 1;
  order by 1;
  </source>
  </syntaxhighlight>
<br>
<br>
<center>
<center>
171行目: 171行目:
</center>
</center>
<br><br>
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:SQL_Server]]
[[カテゴリ:SQL_Server]]

2024年11月10日 (日) 16:02時点における最新版

概要

SQL Serverでは、複数のSELECT文の結果を、統合(和集合)、重複(積集合)を抽出、差(差集合)を抽出することができる。

  • 統合(和集合)
    テーブル1とテーブル2の結果をまとめて検索したい時に、UNION句やUNION ALL句を使用する。
  • 重複の抽出(積集合)
    テーブル1とテーブル2の両方に重複しているレコードを検索したい時に、INTERSECT句を使用する。
    (重複レコードの抽出)
  • 差(差集合)
    テーブル1とテーブル2があり、テーブル1だけに存在するレコードを検索したい時に、EXCEPT句を使用する。
    (特定テーブルだけに存在するレコードの抽出)




サンプルデータ

act_baseballテーブル

no name
15 佐藤太郎
20 山田一郎
44 田中花子


act_soccerテーブル

no name
8 伊藤一
10 加藤和也
44 田中花子



UNION句

複数のSELECT結果を統合する。
重複レコードは1行にまとめられる。

例 UNION句で2つのテーブルを検索する

UNION句を使用することで、別テーブル同士のSELECT文の結果をまとめて表示することができる。
以下の例では、野球部とサッカー部に所属しているメンバーを全てすべて取得する。

テーブルは2つだけでなく、複数のテーブルを統合できる。
注意点としては、テーブルのカラムは同じ数であること。

 --野球部とサッカー部のメンバー全員を取得する
 SELECT studentno, name FROM act_baseball
 UNION
 SELECT studentno, name FROM act_soccer
 order by 1;


結果

no name
8 伊藤一
10 加藤和也
15 佐藤太郎
20 山田一郎
44 田中花子



UNION ALL句

複数のSELECT結果を統合する。
重複レコードはそのまま検索される。

例 UNION ALL句で2つのテーブルを検索する

UNION ALL句を使用すると、重複レコードも含めて表示することができる。 以下の例では、野球部とサッカー部に所属しているメンバーを全て取得するが、 野球部とサッカー部の両方に所属している"44, 田中花子"が2件取得される。

このように、重複をそのまま取得したい場合はUNION ALL句、重複を排除したい場合はUNION句を使用する。

 --野球部とサッカー部のメンバー全員を取得する
 SELECT studentno,name FROM act_baseball
 UNION ALL
 SELECT studentno,name FROM act_soccer
 order by 1;


結果

no name
8 伊藤一
10 加藤和也
15 佐藤太郎
20 山田一郎
44 田中花子
44 田中花子



INTERSECT句

例 INTERSECTで2つのテーブルを検索する

INTERSECT句を使用することで、別テーブル同士のSELECT文の結果の重複レコードを取得することができる。
以下の例では、野球部とサッカー部の両方に所属しているメンバーを取得する。

テーブルは2つだけでなく、INTERSECT句でそれ以上のテーブルの重複レコードを取得できる。
注意点としては、テーブルの列は同じ数でないといけない。

 --野球部とサッカー部の両方に所属しているメンバーを取得する
 SELECT studentno,name FROM act_baseball
 INTERSECT
 SELECT studentno,name FROM act_soccer
 order by 1;


結果

no name
44 田中花子



EXCEPT句

例 EXCEPT句で2つのテーブルの差を検索する

EXCEPT句を使用することで、複数テーブル同士のSELECT文の結果の差を取得することができる。
以下の例では、野球部に所属しサッカー部に所属していないメンバー、つまり野球部だけに所属しているメンバーを取得する。

EXCEPT句で差を抽出するテーブルは、2つだけでなくそれ以上でも差を取得できる。
注意点としては、テーブルの列は同じ数でないといけない。
ここでは、1つ目のSELECT文がstudentnoカラムとnameカラムの2列なので、それ以降のSELECT文も2列である必要がある。

 --野球部にだけ所属しサッカー部には所属していないメンバーを取得する
 SELECT studentno, name FROM act_baseball
 EXCEPT
 SELECT studentno, name FROM act_soccer
 order by 1;


結果

no name
15 佐藤太郎
20 山田一郎