SQL

2テーブルのデータが同じであることを確認する

SQL

2テーブルをUNIONした結果のレコード件数が、 各テーブルの件数と同じであれば、2テーブルは同じデータを持っている。 (*)UNIONは重複を削除する為

HAVING句1

SQL

Having句は結構自由に書ける。 ■以下のテーブルから、全教科を受けているstudent_idを抽出する。 SELECT student_id FROM TestScore GROUP BY student_id HAVING ( SELECT COUNT(*) FROM ( SELECT DISTINCT subject FROM TestScore )A ) = SUM(CASE WHEN stu…

WHEREにCASE2

SQL

■算数で80点以上、国語50点以上両方を満たす生徒を抽出 どれも結果は同じ!

WITH句

SQL

■WITH句にて、一時テーブルのようなものが作れる。 WITH test AS( SELECT * FROM EnumMaster WHERE MasterType = 'Status') SELECT test.mastertext,a.* FROM agreement AS a INNER JOIN test ON a.AgmtStatus = test .MasterValue

CASE句参考

SQL

(*)参考 qiita.com mickindex.sakura.ne.jp

EXEC句でLocal一時テーブルを作ると、同一ストアド内でも参照できない

SQL

Exec句でLocal一時(#Table)テーブルを作ると、 そのExec句と同じストアド内でも、そのテーブルを参照できません。 Global一時テーブル(##Table)ならOK。

SQLServerのバックアップリストアについて

SQL

Sql server のバックアップとリストアの基礎 from Masayuki Ozawa www.slideshare.net

Window関数1

SQL

行同士の比較やサマリが必要な場合や、 単独列でサマリ値などが必要な場合に使おう。 qiita.com ■以下のテーブルに、色んなWindow関数を当ててみる ■各行にScoreの合計を単純にセット SELECT No,student_id, subject, score, sum(score) over()FROM TestScor…

ストアドの色々

SQL

■引数を生成 ・Create句の直後に記述 CREATE PROCEDURE [dbo].spStudy2 @Master NVARCHAR(100)= NULL '引数 ,@ReturnValue NVARCHAR(100) OUTPUT '戻り値AS ■IF文 ・ELSE IF句はそもそもない ・IF文内の適用範囲(IFはどこまでか、ELSE IFはどこまでか)はBEGI…

ストアドの例

SQL

ALTER PROCEDURE [dbo].spStudy2 /* 引数はストアド名の後、AS句前に宣言 */ @Master NVARCHAR(100)= NULL /* OUTPUTを付与した引数は戻り値をアプリに返せる */ ,@ReturnValue NVARCHAR(100) OUTPUT AS /* IF分岐 */ /* ELSEIF句はない。 ELSE IF */ /* 各…

行列入れ替え

SQL

(*)数値項目を合算して列に~ならPIVOT句とかを使えば良いです。 以下は、非数値項目の例 ⇒https://yyuuiikk.org/entry/590 ■以下の様なテーブルの行列を入れ替える 〇パターン1 ・キー(AgmtId)だけを抽出したテーブル(AgmtFamily A)に対して、 キーと各変換…

直積2 単一テーブルでのCROSS JOIN

SQL

■直積は、単一テーブルの各列間でも取得することができる。 meetingsテーブル 上記テーブルから、meetingとpersonの直積を求める SELECT DISTINCT m1.meeting,m2.person FROM meetings m1 CROSS JOIN meetings m2 本来の直積はDistinct無しで以下の様なデー…

Exists句

SQL

■Exsists句は、INの様に ・条件に一致するもの ・条件に一致しないもの といったデータを高速に抽出することができる。 ex1) ①上記データから、全教科50点以上のStudent‗idを抽出する SELECT DISTINCT T1.student_id FROM TestScore AS T1 WHERE NOT EXISTS(…

トランザクションログの切り捨て、圧縮

SQL

USE [対象のDB] DBCC SHRINKFILE('論理ログファイル名', 0) ■初期ファイルサイズ(例:200MB)と自動拡張サイズ(例:100MB毎)を変更 ALTER DATABASE [対象のDB]MODIFY FILE (NAME=論理ログファイル名,SIZE=200MB,MAXSIZE=UNLIMITED,FILEGROWTH=100MB); social.…

トリガー

SQL

テーブルの更新履歴データ等を残したい場合は、トリガを使うのが 一番早い。 ■イメージ ・履歴を残したいテーブルの履歴テーブルを作る。 このテーブルのフォーマットは、元テーブルのレイアウト プラス、追加で残したい任意の情報(更新された日時、UpDateか…

VBでストアドのReturnValueを取得する

ストアドのRETURN文で返す事ができる整数値をVBで取得するには、 以下のSqlCommandParameterを、SqlCommandに追加すれば良い '---ストアドのRetrunを格納するパラメータ Dim ReturnParam = New SqlParameter With { .ParameterName = "任意のパラメータ名", …

動的SQLでEXECUTE時、”ストアド SELECT~がありません”とエラー

SQL

動的SQLを実行するには、以下の通り変数に実行SQLをセットし EXECUTEするだけだが、以下3行のEXECUTE() の通り、()で囲まないと、”ストアド SELECT~はありません” というエラーになるので注意 1:DECLARE @Sql NVARCHAR(2000) 2:SET @Sql = N'SELECT * FRO…

ストアドプロシージャ、ビュー、関数について

SQL

■ストアド ・出力用の引数が取れる ・DB更新が可能 ・一時テーブルが使える ・戻り値はストアドの実行状態を示す整数値のみ ■View ・引数、戻り値はなく、Viewに定義されたSELECTの実行結果が返る ■Function ・任意の戻り値を返せる ・一時テーブルは使用不…

DELETE句でJOIN

SQL

■DELETE句でJOINする場合は、DELETEの後に消す対象のテーブル名を記述DELETE g FROM GrantRoles gLEFT OUTER JOIN roles r ONg.roleid = r.roleidWHEREr.roleid IS NULL

COUNT(*)に対するCASE

SQL

下記の表から部署ごとの人数を計算し、2人以上か未満かも表示する 社員ID 部署 性別 年齢 1 Creater male 32 2 Creater male 30 3 Creater female 23 4 Valuer male 45 5 Valuer male 50 6 Apointer female 40 7 Apointer female 42 8 Apointer male 52 9 Ap…

SELECT句でCASE

SQL

以下の表からCASE句を使って部署毎、性別毎に30歳未満、30歳以上の 社員数を集計する。 社員ID 部署 性別 年齢 1 Creater male 32 2 Creater male 30 3 Creater female 23 4 Valuer male 45 5 Valuer male 50 6 Apointer female 40 7 Apointer female 42 8 A…

WHERE句でCASE

SQL

下記テーブルから、Post、Heldの内、大きい方の 数値が0以上のデータだけ抽出する。 year post held 2000 100 110 2001 200 -200 2002 -300 250 2003 400 -300 2004 -500 -200 2005 600 -50 SELECT * FROM testWHERE CASE WHEN post > held THEN POST WHEN h…