SQL

【SQL】ストアド ~ 基本編 / 変数 ~

SQL

【1】定義 DECLARE文と変数名の前には「@」をつける 例 DECLARE @i INT 【2】設定 SET文をつける 例 SET @i = 0 【3】戻り値を受け取る 1)構文 EXECUTE @【戻り値の変数名】 = 【ストアド名】 (【引数1】, 【引数2】 ...); 例 DECLARE @returnValue int…

【SQL】SQL ~ 文字列操作関連 ~

SQL

■ はじめに SQLでの文字列の扱いについてメモ。 目次 【1】文字列の取り出し 【2】文字列の長さ 【1】文字列の取り出し 以下の関数が使える 1)LEFT関数 2)RIGHT関数 3)SUBSTRING関数 サンプル /* → 東京都 (左から3文字)*/ SELECT LEFT('東京都世田…

【SQL】データあればUPDATE、なければINSERT ~ MERGE文 (マージ文) ~

SQL

MERGE文 * SQL標準(SQL:2003規格) * UPDATE と INSERT を組み合わせた造語として、UPSERT文ともいう * Merge = 「結合する」「吸収する」 対応DB * SQL Server2008以降 * Oracle 9i以降 など多数 ※ 文法が異なるので注意 SQL Server 構文 MERGE INTO 主表 US…

【SQL】データあればUPDATE、なければINSERT ~ @@ROWCOUNT ~

SQL

SQL Server2005以前 / Oracle 9iより前 * UPDATEしてみて、実行件数が0件なら、INSERTする SQL Server * @@ROWCOUNT を利用する サンプル DECLARE @name nvarchar(50) SET @name = 'Tom' DECLARE @address nvarchar(50) SET @address = '1-23 London' DECLAR…

【SQL】整合性制約 ~ Integrity Constraints ~

SQL

■ はじめに https://dk521123.hatenablog.com/entry/2016/07/08/234918 で扱ったSQLの制約(Constraints)について、学びなおす 補足:Constraint の英語的意味 (名) 制約、強制 【動】Constrain = 抑制する、抑止(よくし)する [語源] con(完全に)+strain(…

【SQL】促音・拗音を区別せず検索する

SQL

■ はじめに 促音・拗音、つまり小さい文字 「ぁ」「ぃ」「ぅ」「ぇ」「ぉ」「っ」「ゃ」「ゅ」「ょ」 を大きい文字と区別せずに、検索する方法を考える 目次 【1】案1:正規表現を利用する 【2】案2:検索用の項目を追加 【1】案1:正規表現を利用する * …

【SQL】バルク・インサート ~Bulk Insert~

SQL

Bulk Insert * 一括でテーブルに挿入できる * しかも早い!!! 使用上の注意 * 指定できるフィールド数は 1024 個まで http://msdn.microsoft.com/ja-jp/library/ms188365.aspx * 取込元のファイルは、DBエンジンが動いてるマシンから参照出来ないとファイ…

【SQL】Window関数 ~ ROW_NUMBER ~

SQL

■ はじめに SQL文で、ページングを考える 目次 【1】ページング 1)実務的視点 2)技術的視点 【2】ROW_NUMBER 1)構文 2)補足:ROW_NUMBER + PARTITION BY 【3】サンプル 補足:使用しているテーブルについて 【1】ページング 1)実務的視点 * OR…

【SQL】Window関数 ~ RANK / DENSE_RANK ~

SQL

■ はじめに SQL で、順位付け・ランキングをする際に使用する RANK / DENSE_RANK について、学ぶ。 目次 【1】RANK / DENSE_RANK 1)RANK 2)DENSE_RANK 【2】RANK + PARTITION BY 【3】サンプル - SQL Server 使用しているテーブル 例1:顧客ごとの売…

【SQL】 WITH句 ~ 共通テーブル式 ~

SQL

■ はじめに WITH についてメモ。 目次 【1】WITH 句 【2】使用可能なDB 【3】使用上の注意 【4】構文 【5】サンプル 例1:親子関係に使用 例2:最新データによる年間売上の増減 【1】WITH 句 * 共通テーブル式 (CTE, Common Table Expression) と呼…

【SQL】ストアド ~ 基本編 / 繰り返し処理 ~

SQL

【1】WHILE文 1)サンプル DECLARE @counter int; SET @counter = 0; WHILE (@counter < 100) BEGIN /* 繰り返したい処理 */ SET @counter = @counter + 1; END 【2】BREAK文 1)サンプル DECLARE @counter int; SET @counter = 0; WHILE (@counter < 10…

【SQL】テーブルの結合 ~ 外部結合・LEFT/RIGHT/FULL JOIN ~

SQL

■ はじめに https://dk521123.hatenablog.com/entry/2010/02/05/131206 の続き。 今回は、外部結合について、扱う。 目次 【0】外部結合 の種類 【1】左外部結合(LEFT OUTER JOIN) 【2】右外部結合(RIGHT OUTER JOIN) 【3】完全外部結合(FULL OUTER…

【SQL】SQL文が実行されるまでの工程

■ はじめに * DBパフォーマンスを行うためには、 まず、どのような工程でSQL文が実行されるかを知ることが重要となってくる 目次 【1】SQL文が実行されるまでの工程 1)SQL文の解析処理(PARSE) 2)SQL文の書き換え 3)実行プランの作成 【3】クエリ・…

【SQL】テーブル結合 ~ 交差結合・CROSS JOIN ~

SQL

■ CROSS JOIN * 関係ないテーブル同士の結合 => 関連する列を明記せずにテーブルを結合可能 * Cartesian product = デカルト積、直積 => クロス結合、交差結合 ■ 構文 SELECT * FROM 【テーブル名1】 CROSS JOIN 【テーブル名2】 関連記事 テーブルの結合 …

【SQL】期間が重なるデータを取得するには

SQL

■ はじめに 例えば、ユーザが、From-Toで期間を選択して その期間内のデータをSQLで取得する方法について考える 目次 【1】期間が重なるデータを取得するには 1)図解 2)SQL構文 3)マトリックス(期待値) 【2】サンプル 1)SQL文 【1】期間が重なる…

【SQL】SQL View (ビュー)

SQL

■ はじめに SQL の View に関して、メモ。 目次 【1】View (ビュー)とは? 【2】メリット・デメリット 【3】構文 1)作成 2)削除 【4】サンプル 例1:その年の最新実行されたデータを取得するビュー(PostgreSQL) 【1】View (ビュー)とは? * 実テ…

【SQL】SQLのコメント文あれこれ

SQL

■ はじめに SQLのコメント文について扱う 目次 【1】コメント文 1)「--」 2)「/* */」 【2】テーブルに関するコメント文 1)テーブルのコメントを付ける 2)項目のコメントを付ける 【3】サンプル 【1】コメント文 1)「--」 * 一行コメント 2…

【SQL】データ削除 ~ DELETE文 / TRUNCATE TABLE文 ~

SQL

■ DELETE文 * DELETE文からWHERE句を省略すると、対象のテーブルからすべての行が削除されます => DELETE FROM テーブル名 構文 DELETE FROM テーブル名 WHERE 検索条件 例 DELETE FROM person WHERE id = 1; ※テストデータは、以下「■ 補足:テストデータ」…

【SQL】【SQL Server】【Oracle】DB Nullと空文字について

SQL

DB Nullと空文字 * SQL Server:nullと空文字は、別物として扱う * Oracle:nullと空文字は、nullとして扱う * 他のDBについては、「SELECT 1 WHERE '' = ''」「SELECT 1 WHERE '' IS NULL」を試してみるといい 比較の仕方 SQL Server * IS NULLを使用する …

【SQL】データ修正 ~ UPDATE文 ~

SQL

データ修正 * UPDATE文を使用する 構文 UPDATE [テーブル名] SET [変更対象項目] = [変更する値]; サンプル 例1 UPDATE tblName SET name = 'Mike' WHERE id = 001; 例2 /* データ修正 */ UPDATE HealthCheck SET Status = '元気' WHERE Status = '病気'; FR…

【SQL】ストアド ~ 基礎知識編 ~

SQL

■ はじめに ストアドプロシージャ および ストアドファンクションについて 徐々に記録していく 目次 【1】ストアドに関して 【2】利点 1)モジュール性の向上 2)高速な実行 3)ネットワークトラフィックの軽減 4)セキュリティ向上 【1】ストアドに…

【SQL】IN句 と BETWEEN句

SQL

■ IN句 / NOT IN句 * 「値1 か 値2 か ・・・・ のどれかに合う」データを返す * 指定した条件が、対象項目に入ってるかどうかを判定できる * 例えば、「全国の都道府県から、関東を抜き出して」ってことができる * 「IN」は「OR」と同じ意味であるが、構文…

【SQL】パフォーマンスの良いSQLを記述 ~ 全般編 ~

■ はじめに パフォーマンスの良いSQLを記述する方法を記す。 目次 【1】全般 1)クエリの書き方を統一する 2)ワイルドカード「*」を使用しない 3)表に別名を付ける 4)DISTINCTの使用は、極力避ける 【2】インデックス 【3】相関サブクエリ / 自己…

【SQL】SQL ~ CASE文 ~

SQL

■ はじめに SQL の CASE文について扱う。 目次 【1】CASE文 【2】種類 1)単純CASE式(simple case) 2)検索CASE式(searched case) 【3】使用上の注意 【4】DBNullの判定 【1】CASE文 * 非依存(SQL-92で標準) 【2】種類 1)単純CASE式(simple c…

【SQL】GROUP BY句

SQL

■ はじめに SQL の GROUP BY句について取り上げる 目次 【1】GROUP BY 【2】構文 【3】サンプル 例1:コードごとに合計金額を算出する 例2:年月ごとのスケジュール数を表示 【4】使用上の注意 【1】GROUP BY * データを集結する * 複数でもグルーピ…

【SQL】HAVING句

SQL

■ はじめに SQL の HAVING句 について扱う 目次 【1】HAVING句 【2】サンプル 【3】使用上の注意 1)パフォーマンスについて 2)WHERE/GROUP BY/HAVINGの処理順に注意 【1】HAVING句 * WHERE句では 集計関数を用いることができないため、代わりに HAVI…

【SQL】データ追加 ~ INSERT文 / SELECT INSERT文 ~

SQL

■ 準備 使用するテーブル(PostgreSQLの場合) person CREATE TABLE person ( id character(8) NOT NULL, name character varying(100), sex character(1), updatedate timestamp without time zone, CONSTRAINT person_pkey PRIMARY KEY (id) ) worker CREA…

【SQL】一時的なテーブル

SQL

一時的なテーブルの作成 例 CREATE GLOBAL TEMPORARY TABLE tempTable( tempId NVARCHAR2(8) , tempName NVARCHAR2(20) );

【SQL】EXISTS / NOT EXISTS文 ~ 存在有無を確認 ~

SQL

■ はじめに SQLで存在有無を確認するなどに利用できる EXISTS / NOT EXISTS文について扱う。 目次 【1】EXISTS 【2】NOT EXISTS 【1】EXISTS * 存在することを条件に入れる サンプル SELECT * FROM table1 WHERE EXISTS ( SELECT * FROM table2 WHERE tab…

【SQL】CREATE TABLE / DROP TABLE ~ テーブル作成・削除 ~

SQL

■ はじめに SQL文の CREATE TABLE / DROP TABLE ■ テーブルを作成 構文 CREATE TABLE 【テーブル名】 ( 【カラム名1】 【データ定義1】 NOT NULL, 【カラム名2】 【データ定義2】 ) ■ テーブルを削除 構文 DROP TABLE 【テーブル名】; ■ テーブル定義の参照 …