SQL Server
 Computer >> コンピューター >  >> プログラミング >> SQL Server

SQL ServerのINTERSECT演算子とは?構文と使い方を実例付きで解説

SQL Server(Transact-SQL)における INTERSECT演算子 は、2つのデータセット(SELECT文)の両方に共通して存在するレコードだけを返すために使用されます。片方のクエリにのみ存在し、もう片方には存在しないレコードは、INTERSECTの結果セットから自動的に除外されます。

INTERSECTクエリのイメージ

SQL ServerのINTERSECT演算子とは?構文と使い方を実例付きで解説
INTERSECTクエリが返す結果のイメージ図

図の説明: INTERSECTクエリは、ベン図の中央にある青く塗りつぶされた領域のレコードを返します。これらは dataset1 と dataset2 の両方に存在するレコードです。

なお、INTERSECT内の各SELECT文は、結果セットの列数が同じであり、かつ対応する列のデータ型が一致している必要があります。

INTERSECT演算子の構文

SELECT bieu_thuc1, bieu_thuc2, ... bieu_thucn
FROM bang
[WHERE dieu_kien]
INTERSECT
SELECT bieu_thuc1, bieu_thuc2, ... bieu_thucn
FROM bang
[WHERE dieu_kien];

パラメータの説明

bieu_thuc(式)

SELECT文同士で比較したい列または値です。各SELECT文で同じ列である必要はありませんが、対応する列同士は同じデータ型(互換性のある型)である必要があります。

bang(テーブル)

レコードを取得したいテーブルです。FROM句には少なくとも1つのテーブルを指定する必要があります。

WHERE dieu_kien(条件式)

省略可能です。抽出対象のレコードが満たすべき条件を指定します。

使用時の注意点

  1. 2つのSELECT文は、同じ数の式(列)を持っている必要があります。
  2. 各SELECT文の対応する列は同じデータ型である必要があります。
  3. INTERSECT演算子は、SELECT文間で共通するレコードのみを返します。

例1:単一の式を使う場合

SELECT sanpham_id
FROM sanpham
INTERSECT
SELECT sanpham_id
FROM hangtonkho;

この例では、sanpham_idsanpham テーブルと hangtonkho テーブルの両方に存在する場合に、その値がINTERSECTの結果セットに含まれます。

次に、WHERE句による条件を追加した例を見てみましょう。

SELECT sanpham_id
FROM sanpham
WHERE sanpham_id >= 50
INTERSECT
SELECT sanpham_id
FROM hangtonkho
WHERE soluong > 0;

1つ目のデータセットは、sanpham テーブルから sanpham_id が50以上のレコードを抽出して返します。2つ目のデータセットは、hangtonkho テーブルから在庫数(soluong)が0より大きいレコードを抽出します。最終的な結果は、この両方の条件を満たす sanpham_id となります。

例2:複数の式を使う場合

SELECT danhba_id, ho, ten
FROM danhba
WHERE ho = 'Anderson'
INTERSECT
SELECT nhanvien_id, ho, ten
FROM nhanvien;

この例では、2つのSELECT文の共通部分(積集合)が返されます。danhba テーブルのレコードのうち、danhba_idhoten の組み合わせが nhanvien テーブルにも存在する場合、INTERSECTクエリはそれらのレコードを結果として返します。

例3:ORDER BYと組み合わせる場合

INTERSECTクエリにORDER BY句を組み合わせることで、結果を任意の順序でソートできます。

SELECT nhacung_id, nhacung_ten
FROM nhacung
WHERE nhacung_id > 500
INTERSECT
SELECT congty_id, congty_ten
FROM congty
WHERE congty_ten IN ('Apple', 'Microsoft', 'SQL Server')
ORDER BY 2;

2つのSELECT文では列名が異なるため、ORDER BY句では結果セット内での列の位置(列番号)で参照するのが便利です。上記の例では ORDER BY 2 を指定することで、nhacung_tencongty_ten(結果セットの2番目の列)を昇順に並べ替えています。

  1. SQL ServerのINTERSECT演算子とは?構文と使い方を実例付きで解説

    SQL Server(Transact-SQL)における INTERSECT演算子 は、2つのデータセット(SELECT文)の両方に共通して存在するレコードだけを返すために使用されます。片方のクエリにのみ存在し、もう片方には存在しないレコードは、INTERSECTの結果セットから自動的に除外されます。 INTERSECTクエリのイメージ INTERSECTクエリが返す結果のイメージ図 図の説明: INTERSECTクエリは、ベン図の中央にある青く塗りつぶされた領域のレコードを返します。これらは dataset1 と dataset2 の両方に存在するレコードです。 なお、INTERSECT内

  2. MS SQL Serverでデータベースを選択する2つの基本方法

    MS SQL Serverで操作対象となるデータベースを選択するには、主に以下の2つの方法があります。GUI操作とコマンド操作それぞれの特徴を理解し、状況に応じて使い分けることで、作業効率を高めることができます。 方法1:SQL Server Management Studio(SSMS)を使用する 視覚的に操作したい方には、SQL Server Management Studio(SSMS)を使った方法がおすすめです。 例として、msdbという名前のデータベース上でバックアップ履歴を参照するクエリを実行したい場合、ツールバーのドロップダウンリストからmsdbを選択します。 データベースのバッ