プログラ生活

プログラム初学者のためのポイントを書いていこうと思います。たまに脇道それた記事もありますが、息抜きだとおもって気長にお付き合いください。

SQL

【SQL Server(連載)】動的SQL -45-

www.pon-x.jp 前回の続き 今回は、動的にSQLを生成してみようと思います。 SQLを文字列として変数に格納 これ自体はそんなに難しいものではありません。 DECLARE @SQL NVARCHAR(500) SET @SQL = 'SELECT * FROM Person.Person' EXEC (@SQL) 上記は「SELECT *…

【SQL Server(連載)】外部ファイルの読み込み -44-

www.pon-x.jp 前回の続き 今回は、外部ファイルを読み込む方法を紹介します。 BULK INSERT SQLSeverで外部ファイルを取り込む方法としての王道はBULKINSERTです。 では、さっそくやってみます。 BULK INSERT [テーブル名] FROM 'C:\Users\***\TEST.CSV' WITH…

【SQL Server(連載)】日付型の続き -43-

www.pon-x.jp 前回の続き 今回は、前回お伝え出来なかった日付型の内容の続きを紹介します。 DATEDIFF 2つの日付間の間隔をとることができます。 以外に結構使うんですよね。 年、月、日、時、分、秒ごとに計測してみます。 DECLARE @DATE01 DATETIME = '20…

【SQL Server(連載)】日付型 -42-

www.pon-x.jp 今回は、日付型の扱い方を紹介していきます。 CONVERT関数 CONVERT関数は、データ型の変更を行ってくれます。 例えばこんな感じ。 SELECT GETDATE(), CONVERT(NVARCHAR, GETDATE()) GETDATE()は、現時点の日時を取得してくれるもので、CONVERT(…

【SQL Server(連載)】UNION -41-

www.pon-x.jp 今回はUNIONを紹介します。 UNION 簡単に言うと、行結合です。 2つのテーブルを行方向に結合してあげるためにUNIONを使います。 ためしに、Person.PersonテーブルのLastNameを結合してみます。 ただし、WHERE句でPersonTypeを抽出条件として指…

【SQL Server(連載)】WITH -40-

www.pon-x.jp あけましておめでとうございます。今年もプログラ生活をよろしくお願いいたします。 さて、今年一発目はWITHの使い方です。 WITH 結構前に、サブクエリの話をしました。 www.pon-x.jp WITHはこのようなサブクエリを可読性良く書けるのが特徴で…

【SQL Server(連載)】トランザクションの実装 その2 -39-

www.pon-x.jp 前回の続き 前回から、トランザクションの実装をしてますが、今回はエラーを検知してロールバックしてみたいと思います。 エラー検知 エラー検知はこのような構文です。 BEGIN TRY -- ############################### -- ここでエラーが発生し…

【SQL Server(連載)】トランザクションの実装 その1 -38-

www.pon-x.jp 前回はトランザクションの意義について説明しました。 今回は実装してみたいと思います。 コミット では、トランザクションで処理を行いコミットしてみたいと思います。 以下例文です。 IF OBJECT_ID(N'tempdb..#TEMP', N'U') IS NOT NULL DROP…

【SQL Server(連載)】トランザクション -37-

www.pon-x.jp 前回の続き 今回はトランザクションのはなしです。 ちなみに今回は100%読み物です。 トランザクション 例えば、銀行の預金を管理するデータベースがあったとします。 Aさんは10万円の預金があります。 また、キャッシュカードはAさんと、Aさん…

【SQL Server(連載)】正規化(第3正規化) -36-

www.pon-x.jp 前回の続き 今回は、第3正規化についてのはなしです。 第3正規化 前回まで第2正規化まで行い、以下のテーブルが得られました。 TABLE: 売上 Primary Key:注文番号、商品ID 注文番号 注文年月日 商品ID 数量 顧客ID 顧客名 顧客TEL 顧客住所 10…

【SQL Server(連載)】正規化(第2正規化) -35-

www.pon-x.jp 前回の続き 今回は、第2正規化についてのはなしです。 第2正規化 前回、第1正規化を行い以下のようにテーブルを設計してきました。 注文番号 注文年月日 商品ID 商品名 単価 数量 顧客ID 顧客名 顧客TEL 顧客住所 1001 2020/12/20 K101 うまい…

【SQL Server(連載)】正規化(第1正規化) -34-

www.pon-x.jp 前回の続き 今回からテーブル設計についての話になります。 正規化と正規形 リレーショナルデータベースをここまでやってきて、おおよそテーブル構造についても想像できるようになったかとおもいます。 一方で、テーブルを作るということもやっ…

【SQL Server(連載)】ストアドプロシージャ -33-

www.pon-x.jp 前回の続き 今回はストアドプロシージャの説明です。 ストアドプロシージャ ストアドプロシージャとは、処理をまとめてひとつにして保存するものです。 前回まで、複数の処理を重ねて処理する例をたくさんやってきましたが、それらを実行するた…

【SQL Server(連載)】カーソルの応用 -32-

www.pon-x.jp 前回の続き 今回は、カーソルと一時テーブルを組み合わせた使い方を紹介します。 カーソルと一時テーブル 例えば、SELECT文で出力したいのだけれどもものすごく複雑な構造になってしまう場合、一時テーブルでイメージしていた構造をつくってあ…

【SQL Server(連載)】カーソル -31-

www.pon-x.jp 前回の続き 今回はカーソルについて説明をしていきます。 カーソル カーソルとは1行ずつデータを取り出してループ処理のなかでデータをハンドリングしていくことを目的とします。 では、さっそくサンプルを示してみたいと思います。 以下は、Pe…

【SQL Server(連載)】一時テーブル -30-

www.pon-x.jp 前回の続き 今回は、一時テーブルの扱い方について説明します。 一時テーブル その処理の中において、仮想にデータを保持したいときに扱うのが、一時テーブルです。 一時テーブルは実際にはテーブルを作成せず(実際は tempdbに作成される)に…

【SQL Server(連載)】テーブル関数 -29-

www.pon-x.jp 前回の続き 今回からテーブル関数について紹介していきます。 テーブル関数とは 前回は単一の値を返す、スカラ関数について説明しましたが、今回紹介するテーブル関数はその名の通りテーブルを返す関数です。 なんかイメージしにくいですよね。…

【SQL Server(連載)】WHILE文 -28-

www.pon-x.jp 前回の続き 今回は繰り返し処理を行うためのWHILE文を紹介します。 WHILE文 繰り返し処理はWHILEの後に条件式をかいて、条件式がTRUEな限り繰り返し処理を行います。 こんな感じです。 WHILE [条件式] BEGIN -- ################## -- 何かしら…

【SQL Server(連載)】スカラ関数の活用 -27-

www.pon-x.jp 前回の続き 前回はスカラ―関数をつくりました。 今回はこれの応用です。 スカラ―関数の定義変更 まず、定義したスカラ―関数をどこで確認すればよいかということですが、 オブジェクトエクスプローラーから、 [プログラミング]→[関数]→[スカラー…

【SQL Server(連載)】スカラ関数 -26-

www.pon-x.jp 前回の続き 今回は、関数を自作する際の説明をしていきます。 スカラー関数 スカラ―関数とは、単一の値を返してくれる関数であり、例えば同様の処理をたくさんやるときなどに関数定義をしておくと、簡単な構文で実装できることになります。 使…

【SQL Server(連載)】変数 -25-

www.pon-x.jp 前回の続き 今回は、変数の扱いについて説明していきます。 変数宣言 これまで、変数というのは使わずにきましたが、SQLでも変数を使う場面というのは多分にあります。 例えば、システムに組み込むときに、WHERE句の抽出条件を可変にしたいとき…

【SQL Server(連載)】IF文 -24-

www.pon-x.jp 前回の続き 今回はIF ELSE文をやります。 PRINTコマンド IF文とは直接関係ありませんが、PRINTコマンドというのを使いながらIF文の動きを見ていこうと思います。 SELECTはテーブルのデータを出力していたのに対して、PRINTはコメントが表示され…

【SQL Server(連載)】ビューの変更・削除 -23-

www.pon-x.jp 前回の続き 前回からビューをやっておりますが、今回はその続きです。 今回はビューの変更と削除を行います。 ビューの確認 まず、ビューってどこにしまわれているの!?という疑問があろうと思うので、格納場所を確認しておきます。 SSMSの左…

【SQL Server(連載)】ビューの作成 -22-

www.pon-x.jp 前回の続き 複雑なSQLを作成していた場合に、簡単に呼び出す方法のひとつにビューがあります。 今回は、ビューの登録方法を紹介したいと思います。 CREATE VIEW 例えば、以下のようなSQLがあったとします。 SELECT PersonType, COUNT(PPP.Busin…

【SQL Server(連載)】テーブルの削除 -21-

www.pon-x.jp 前回の続き 今回はテーブルの削除です。 削除は、定義も何もわずらわしいことはないので、とっても簡単です!! DROP TABLE 前回作ったテーブルを削除してみましょう。 DROP TABLE Telephone_List 結果はこんな感じ。 ないものは消せない 上記…

【SQL Server(連載)】テーブルの作成 -20-

www.pon-x.jp 前回の続き これまで基本的なSQL文のSELECT、UPDATE、INSERTをやってきました。 これだけできればけっこうできることも多いので、例えば事務職の方がデータを利活用したいってときにはある程度実用できるスキルだとおもいます。 さて、今日から…

【SQL Server(連載)】SELECT文 ORDER BYをやるのを忘れてました -19-

www.pon-x.jp 前回の続き 読者から、ソートの話が出てきているけど、ORDER BYの説明ってやってませんよね!?というご指摘を頂いた。 そのとおり、やっておりませんでした。 誠に失礼しました・・・。ということで、今回はソートの話です。 ORDER BY ORDER B…

【SQL Server(連載)】CASE式の応用 -18-

www.pon-x.jp 前回の続き 前回、CASE式をやりましたが、今回は応用的な事例を紹介します。 並び替えに使う。 ORDER BY で並び替えができるのですが、CASE式をもっておもしろい使い方ができます。 例えば、以下のようにPerson.PersonテーブルをPersonTypeでソ…

【SQL Server(連載)】CASE式 -17-

www.pon-x.jp 前回の続き 今回は、条件分岐を目的とするCASE式を紹介します。 CASE式 CASE式は、もしデータが、〇〇だったら××、△△だったら□□みたいなかんじに読み替えてあげることを目的とします。 便利なのは、SELECT文をはじめ、UPDATE、DELETE、INSERTな…

【SQL Server(連載)】INSERT文(SELECT文の利用) -16-

www.pon-x.jp 前回の続き 前回からINSERT文に入りました。 今回は、それの応用です。 SELECT文を使った、INSERT文 例えば特定のレコードの内容の一部のカラムを変えてレコードを追加したい。なんてことがたまにある。 今回の目的は、そんなときにSELECT文を…