SQL ServerのINTERSECT演算子とは?構文と使い方を実例付きで解説
SQL Server(Transact-SQL)における INTERSECT演算子 は、2つのデータセット(SELECT文)の両方に共通して存在するレコードだけを返すために使用されます。片方のクエリにのみ存在し、もう片方には存在しないレコードは、INTERSECTの結果セットから自動的に除外されます。
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(条件式)
省略可能です。抽出対象のレコードが満たすべき条件を指定します。
使用時の注意点
- 2つのSELECT文は、同じ数の式(列)を持っている必要があります。
- 各SELECT文の対応する列は同じデータ型である必要があります。
- INTERSECT演算子は、SELECT文間で共通するレコードのみを返します。
例1:単一の式を使う場合
SELECT sanpham_id
FROM sanpham
INTERSECT
SELECT sanpham_id
FROM hangtonkho;
この例では、sanpham_id が sanpham テーブルと 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_id・ho・ten の組み合わせが 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_ten/congty_ten(結果セットの2番目の列)を昇順に並べ替えています。
-
SQL ServerのINTERSECT演算子とは?構文と使い方を実例付きで解説
SQL Server(Transact-SQL)における INTERSECT演算子 は、2つのデータセット(SELECT文)の両方に共通して存在するレコードだけを返すために使用されます。片方のクエリにのみ存在し、もう片方には存在しないレコードは、INTERSECTの結果セットから自動的に除外されます。 INTERSECTクエリのイメージ INTERSECTクエリが返す結果のイメージ図 図の説明: INTERSECTクエリは、ベン図の中央にある青く塗りつぶされた領域のレコードを返します。これらは dataset1 と dataset2 の両方に存在するレコードです。 なお、INTERSECT内
-
MS SQL Serverでデータベースを選択する2つの基本方法
MS SQL Serverで操作対象となるデータベースを選択するには、主に以下の2つの方法があります。GUI操作とコマンド操作それぞれの特徴を理解し、状況に応じて使い分けることで、作業効率を高めることができます。 方法1:SQL Server Management Studio(SSMS)を使用する 視覚的に操作したい方には、SQL Server Management Studio(SSMS)を使った方法がおすすめです。 例として、msdbという名前のデータベース上でバックアップ履歴を参照するクエリを実行したい場合、ツールバーのドロップダウンリストからmsdbを選択します。 データベースのバッ