【SQLServer】SQL各種【メモ】

SQLServer

テーブルをコピーする

USE データベース名
SELECT * INTO コピー先テーブル名 FROM コピー元テーブル名;

※実行する時点でコピー先テーブルが存在しない状況で使用できる。
コピー先テーブルがあらかじめ用意されている場合はエラーになる。

SELECTで取得した結果をそのままINSERTする

USE データベース名
INSERT INTO 挿入先テーブル
(
    [列名1],
    [列名2],
    [列名3]
)
SELECT
    [列名1],
    [列名2],
    [列名3]
FROM
    挿入元テーブル名;

※実行する時点で挿入先テーブルはあらかじめ用意しておかなければならない。

TRUNCATE TABLE

TRUNCATE TABLE テーブル名

BULK INSERT

USE ST_DB;
GO
BULK INSERT T_MAIN FROM 'CSVファイルの絶対パス'
   WITH (
      FIELDTERMINATOR = ',',
      ROWTERMINATOR = '\n'
);
GO

AccessのテーブルをSQLServerへ移行するときは、

1.Accessを起動し、テーブルを右クリックし、[エクスポート]->[Excel]をクリックし、エクセル形式でファイルをエクスポートする

2.エクスポートしたエクセルを開き、名前をつけて「CSV(コンマ区切り)(*csv)」形式で保存する

3.上記のBULK INSERT構文を実行する

参考↓
https://docs.microsoft.com/ja-jp/sql/relational-databases/import-export/import-data-from-excel-to-sql?view=sql-server-ver15#bulk-insert

INTERSECT

二つのクエリ結果の重複行をピックアップする。

テーブル名1
INTERSECT
テーブル名2

二つのクエリ結果の列構成は一致していなければならない。エイリアスは異なってもよいが、列順は一致させなければならない。

EXCEPT

1番目のクエリ結果から、二番目のクエリ結果と重複する行を除いた行を取得する。
※二番目のクエリ結果にだけある行が取得されることはない。

テーブル名1
EXCEPT
テーブル名2

二つのクエリ結果の列構成は一致していなければならない。エイリアスは異なってもよいが、列順は一致させなければならない。

WITH

With エイリアス名 AS (
SELECT文
)

EXISTS

Where exists サブクエリ のような感じで記述する。特徴は以下2つ。

サブクエリの中で外側のクエリと結合しない場合

サブクエリの中での実行結果件数が1行以上あれば外側のクエリを実行する。なければ返さない。

例1:サブクエリの結果が1行以上だった

データ構成
Select
*
From T_DATA1
Where exists (
	Select
	*
	From T_DATA2
	Where Item3 = '03'
	)
and Item3 = '01'
実行結果

例2:サブクエリの結果が0行だった

サブクエリの結果が0件だった時点で外側のクエリ結果は0になる。

データ構成
Select
*
From T_DATA1
Where exists (
	Select
	*
	From T_DATA2
	Where Item3 = '999'
	)
and Item3 = '01'
実行結果

サブクエリの中で外側のクエリと結合する場合

外側のクエリ結果の中から一致した行を返す。

データ構成
Select
*
From T_DATA1 t1
Where exists (
	Select
	*
	From T_DATA2 t2
	Where t1.Item3 = t2.Item3 --サブクエリの中で外側のクエリと何をもって一致するか定義する
	)
実行結果
タイトルとURLをコピーしました