SQL Server 入門・Tips

SQLServerロゴ

SQL Server 入門

ダウンロードとインストール(セットアップ)

SQL Server 2019のダウンロードとインストール(セットアップ)
SQL ServerはMicrosoftが開発しているリレーショナルデータベース管理システムで、正式名称を「Microsoft SQ...
SQL Server Management Studioのダウンロードとインストール(SSMSセットアップ)
SQL Server Management Studio(以下SSMSと記載)は、SQL Serverのデータベースを管理するための...
SQL Server 2019 Reporting Servicesのダウンロードとインストール(SSRSセットアップ)
SQL Server Reporting Services(以下SSRSと記載)は、データベースに蓄積されたデータをレポートやダッシ...
SQL Serverへリモート接続するための設定
本ブログでは、以前にSQL Serverをインストールする方法と、SQL Server Management Studioをインスト...

SQL Server Management Studio(SSMS)

SQL Server Management Studio(SSMS)でサーバー(データベースエンジン)に接続する
前回は、以下の記事でSQL Server Management Studio(SSMS)のダウンロードとインストール(セットアップ)の方法に...
SQL Server Management Studio(SSMS)でサーバーにデータベースを作成する
前回は、SQL Server Management Studio(SSMS)を使って、サーバー(データベースエンジン)に接続する方法をご紹介...
SQL Server Management Studio(SSMS)でデータベースにテーブルを作成する
前回は、Sql Server Configration Manager(SSMS)を使って、新しいデータベースを作成しました。 ...
SQL Server Management Studio(SSMS)で主キー/プライマリーキー/PRIMARY KEY 制約を設定する
今回は、データベースのテーブルに主キー(プライマリーキー)を設定して利用する方法を紹介します。 主キー(プライマリーキー)とは...
SQL Server Management Studio(SSMS)でテーブルの再作成を必要とする変更を保存できるようにする
SQL Server Management Studio(SSMS)のテーブルデザイナーでテーブルの定義を変更して保存しようとすると、以下の...
SQL Server Management Studio(SSMS)でテーブルのデータを挿入・更新・削除する
前回は、Sql Server Configration Manager(SSMS)を使って、新しいテーブルを作成しました。 今...
SQL Server Management Studio(SSMS)でテーブルの上位n行の編集・選択の行数を変更する
前回の記事では、SQL Server Management Studio(SSMS)を使用して、テーブルのデータを挿入(追加)、更新(修正)...
SQL Server Management Studio(SSMS)でSQLを編集・実行する クエリエディター
SQL Serverを使用していると、頻繁にクエリ(SQL文)を書くことがあります。 クエリはテキストエディターなどを使用して...
SQL Server Management Studio(SSMS)のクエリエディターに行番号(ラインナンバー)を表示する
Transact-SQLを記述するエディターツールとして、SQL Server Management Studio(SSMS)のSQLクエリ...
SQL Server Management Studio(SSMS)のクエリエディターのインテリセンスを更新する
SQL Server Management Studio(SSMS)のSQLクエリエディターでは、SQLの入力をサポートしてくれるIntel...
SQL Server Management Studio(SSMS)のクエリエディターで選択範囲をコメントアウト(または解除)する
SQL Server Management Studio(SSMS)のクエリエディターを使っていて、一時的にSQLの一部をコメントアウトした...
SQL Server Management Studio(SSMS)のクエリエディターで選択範囲を大文字・小文字に変換する
SQLの記述方法は、人によって様々です。 SELECTやFROMなどのキーワードを大文字で記述する人もいれば、小文字で記述する人もいます。...

データベース設計

複数のテーブルに分けて管理するメリットとデメリット [SQLServer]
データベースでは、テーブルはできるだけ分けて管理する方がよいと言われています。 テーブルを複数に分けることにより、データを安全...

データ型

SQLServerでboolean型(True/Falseの真偽値)を扱うbit型
SQLServerで真偽値を扱うためのデータ型について紹介します。 SQLServerにはtrueまたはfalseの真偽値を保持するた...

SQLServer 数値型のデータ範囲(最小値~最大値)
いつも忘れるので、数値型のデータ範囲について、簡単にまとめておきます。 整数型 整数型には「tinyint型」「smalli...

SQLServerで非推奨となったデータ型 ntext text image
SQLServerには他のデータベースと同様に、テーブルの列に設定するための様々なデータ型が用意されています。 例えば数値を管理す...

Transact-SQLの基本

SQL命令の種類(DML・DDL・TCL・DCL)
SQLを使うとデータベースに対して様々な命令を与えることができます。 データベース(DBMS)を操作するSQLでは、主にテーブルに...
SQLのSELECT文でデータ(レコード)を取得(抽出)する
SQLを使用すると、データベースに対して様々な命令を与えることができます。データ(レコード)を抽出したり、データを追加・変更・削除したり、デ...
SQLのSELECT文で複数のテーブルを結合するJOIN (INNER LEFT RIGHT FULL CROSS)
SQLのSELECT文を使うと、テーブルなどのオブジェクトからデータ(レコード)を取得することができます。 本サイトでは、以前に以下の...
SQLのSELECT文で取得するレコード(データ)の条件を指定して検索(抽出)する WHERE
以前に以下の記事で、SQLでデータ(レコード)を取得する基本的な命令であるSELECT文についてご紹介しました。 上記の記事で...
テーブルやビューからデータを取得する際にWHERE句で使える演算子 [SQLServer]
SQLでデータベースのテーブルやビューからデータを取得する際は、SELECTステートメントを使用します。 取得するデー...
SQLのSELECT文でレコードを取得する順番を指定して検索(抽出)する ORDER BY
SQLでデータ(レコード)を取得する際には、SELECTステートメントを使用します。 本ブログでも以前に以下の記事でSELECTステートメ...
SQLのSELECT文でレコードをグループ化して検索(抽出)する GROUP BY
SQLのSELECT文でレコードをグループ化して検索(抽出)する GROUP BY SQLではレコード(データ)を取得する際に、SEL...
SELECTステートメントで重複した行を1行にまとめて取得する DISTINCT
SELECTステートメントを使用してデータを取得していると、重複する行を1行にまとめて取得したい場合があります。 例えば、売り上げを管...
SQLでテーブルにレコードを挿入(追加)する INSERT
を使うとデータベースのデータ(テーブルのレコード)を操作することができます。 データ操作の主な命令には データの取得 ...
SQLでテーブルのレコードを更新(修正)する UPDATE
SQLを使うとデータベースのデータ(テーブルのレコード)を操作することができます。 データ操作の主な命令には データの取得 ...
SQLでテーブルのレコードを削除する DELETE
SQLを使うとデータベースのデータ(テーブルのレコード)を操作することができます。 データ操作の主な命令には データの取得 ...
データベースのテーブルのレコードを一括で削除(DELETE)するTRUNCATE
データベースのテーブルの行(レコード)は、DELETE文を使って削除することができます。 DELETE テーブル名 ...
データベースのテーブルを作成するSQL CREATE TABLE
SQL文では、既存のテーブルに対してINSERT、UPDATE、DELETEなどのステートメントを使用して、テーブルやビューのデータ(レコー...
SQLのCREATE TABLEでテーブルの列にデフォルト値(DEFAULT)を設定する
SQLを使ってデータベースにテーブルを作成するには、CREATE TABLE文を使います。 CREATE TABLE文では、テ...
SQLのCREATE TABLEでテーブルに主キー(PRIMARY KEY)制約を設定する
SQLのCREATE TABLE文を使うことで、データベースにテーブルを作成することができます。 基本的なテーブルの作成 ...
SQLのCREATE TABLEでテーブルの列にNULL値を認めない(NOT NULL)制約を設定する
CREATE TABLE文を使用するとデータベースのテーブルをSQLで作成することができます。 基本的なテーブルの作成 ...
SQLのCREATE TABLEでテーブルの列に妥当性を検証する(CHECK)制約を設定する
SQLのCREATE TABLE文を使えば、データベースにテーブルを作成することができます。 テーブルを作成する際には、テーブルに作成...
SQLのCREATE TABLEでテーブルの列に妥当性を検証する(CHECK)制約を設定する
SQLのCREATE TABLE文を使えば、データベースにテーブルを作成することができます。 テーブルを作成する際には、テーブルに作成...
データベースのテーブルを削除するSQL DROP TABLE
SQLでテーブルを作成する時は、CREATE TABLE文を使用します。 作成したテーブルをSQLで削除する時は、CREATE...
データベースのスキーマを作成するCREATE SCHEMAと削除するDROP SCHEMA SQL
データベースには、スキーマ(Schema)と呼ばれるオブジェクトがあります。 スキーマとは、データベース内のテーブルやビューなどのオブ...
SQLのALTER TABLE でテーブルの列(カラム)を追加・削除する(ADD, DROP)
SQLでテーブルを作成する場合はCREATE TABLE文を使用しますが、既存のテーブルの定義(テーブルの構造)を変更する場合はALTER ...
SQLのALTER TABLE でテーブル名や列名などを変更する
SQLにはテーブル定義の変更を行うための命令として「ALTER TABLE」文が用意されています。 ALTER TABLEを使うと、既に作...
FETCHを使ってループ処理を行う(SELECTで取得したデータをカーソルで参照)[SQL Server]
プログラムを使用すれば、SQLのSELECTステートメントで取得したデータをループして1件ずつ処理することができますが、仕様によっては、デー...

SQL Server Tips

SQL Server の組み込み関数一覧

SQL Server 日付と時刻の関数一覧
SQL Server で日付や時刻を操作する際に使う、主な SQL 関数です。 実行時の日付が取得したい。 特定の日時か...

SQLServer 文字列関数一覧
SQLServerで文字列を操作する際に使用する主なSQL関数です。 文字列から一部の文字列を抜き出したい。 文字列を置...

SQL Server 集計関数一覧
SQLServerで集計する際に使う主なSQL関数です。 合計を取得したい。 平均値を取得したい。 件数を取得したい。...

テーブル定義

SQL Server のカタログビューからテーブルの定義書情報を取得する
SQLServer にはデータベース内のスキーマ、オブジェクト、スカラー型などの情報を取得するために、システムカタログビューが用意されていま...

テーブルの定義書情報を取得するSQLServerのユーザー定義関数
本ブログでは以前にSQLServerのデータベースから、テーブル定義書のもとになるデータを取得する方法についてご紹介しました。 今回の...

T-SQL Tips

SQLのCASEを使って条件ごとに値を変換する
テーブルのとあるフィールド(列)の値ごとに、SELECTで出力する値を変換したい時があります。 例えば、会員テーブルの性別をいうフ...

SQLのCASE演算子で条件の有無を判断して必要な場合のみWHERE句の条件に含める
SQLでテーブルの情報を抽出(SELECT)する際に、特定の場合だけWHERE句で条件を指定したい場合があります。 例えば、抽...

カテゴリー (分類) を持つテーブルのデータを階層 (ツリー) 表示する [SQLServer]
大分類、中分類、小分類などのカテゴリー (分類) を列に持つテーブルのデータを、ツリー状に階層を表現して1つの列として取得するSQLの作成方...

1回のINSERT(インサートSQL)で複数行のレコードを一括挿入(追加)する
SQLServerやMySQLなどのデータベースで、テーブルにレコードをINSERT文使用して追加するには、通常は以下のように記述します。 ...

SQLで重複しているレコードを全て抽出する (GROUP BY + HAVING)
大量のデータの中からあるキーとなる値が重複するレコードを抽出したい時があります。 例えばキーとなる値が一意になるように作成したつもりのテス...

レコードの検索時に照合順序を指定(大文字と小文字、全角と半角などを区別せずに検索)[SQL Server]
システムの制約上、全テーブルのデータ型が文字列のすべての列の照合順序がバイナリ(Japanese_BIN)になっている場合があります...

SQLで左0埋めなどのパディングを行う [SQLServer, MySQL]
SQLでパディングを行う方法を紹介します。 パディングを行うと固定長のコード値を持つマスタテーブルのコードの桁数を左0埋めで合わせたり...

CONVERT関数で日付の文字列変換時に指定できるスタイル (書式) [SQL Server]
CONVERT 関数で日付型のデータを文字列に変換する際にスタイル (書式) が設定できます。 普段の開発業務では、111 (yyyy/m...

SQLで上位n位(上位n件)のデータを取得する RANK ROW_NUMBER TOP [SQLServer]
SQLServerのT-SQLで上位n件のデータを取得する方法を紹介します。 SQLServerにはランキング上位を取得するために使える関...

SQLServerのLEN関数では正確な文字数が取得できない場合
SQLServerの文字列の文字数を取得するLEN関数ですが、正確に文字数を取得できない場合があるのでメモしておきます。 文字列にサロ...

SQLによって影響を受けた行数(処理件数)を取得する@@ROWCOUNT [SQLServer]
SQLServerでは、直前に実行したSQLによって影響を受けた行数(処理件数)を内部で保持しています。SQLによって影響を受けた行...

ストアドプロシージャ、関数のSQLを取得する [SQLServer]
SQL Server Management Studioのクエリエディターを使用してストアドプロシージャと関数のSQLを取得する方法を紹介し...

途中の空き番号(欠番)を取得するSQL(SELECT文)
データのIDや番号などの連番を持ったテーブルの登録と削除を繰り返していると、途中に空き番号ができる場合があります。 新たにデータを登録する...

ビュー、関数、ストアドプロシージャのSQLを取得するsp_helptext [SQLServer]
データベースに作成済みのビュー、関数、ストアドプロシージャなどのSQLを確認したい場合には、SQL Server Management St...

数値を3桁ごとのカンマ区切り表記文字列(9,999)に変換する [SQL Server]
SQLServerでSQLを記述していると、金額などの数値データを金額表記(12,345)にしたい時があります。 取得したデータをプログラ...

省略可能な引数を持つストアドプロシージャの作成 [SQLServer]
ストアド プロシージャの引数は必ず必要とは限りません。 例えば、SQLServerに標準に用意されているストアド プロシージャの中にも、引...

省略可能な引数を持つ関数の作成 [SQLServer]
SQLServerではユーザーが定義する独自の関数をデータベース内に作成することができます。 ユーザー定義関数は、値を返すスカラー関数やテ...

SQLServerのTRIM関数で文字列の左右(前後)の空白文字を削除する
SQLServer 2017でTRIM関数が追加されました。 以前はLTRIM関数とRTRIM関数しかなかったので、文字列の左右(...

SQLServerのメッセージ(エラー)を取得する
SQLServerでクエリを実行した際にエラーがあるとエラーメッセージが返されます。 例えば、存在しないテーブルに対してSELECT文を発...

順位のRANK、DENSE_RANK、NTILEと連番のROW_NUMBER [SQLServer]
SQLでデータを取得する際に、例えばセールスマンの売り上げ金額や学生の試験の得点に順位を付けたり、顧客ID順に連番を振りたい時があります。 ...

縦持ちのデータを横に展開する(CASE, IIF)[SQLServer, MySQL]
テーブルにレコードとして保存されているデータを取得する際に横に展開して1行にしたい場合があります。 例えば月ごとに登録されている金額データ...

SQLで欠番一覧を取得する [SQLServer, MySQL]
IDや通し番号などの一意になる番号を持つテーブルの登録や削除を繰り返していると、欠番(歯抜けの番号)ができる場合があります。 そんな時に客...

SELECT INTOで他のテーブルからデータを複製またはテーブルを作成する [SQLServer]
プログラムの登録、更新、削除のテストをしていると、操作対象のテーブルのデータを一旦退避させたり、テスト用に本番データベースのテーブル...

WITH ROLLUP を使って小計と総合計を取得する [SQLServer, MySQL]
SQLで集計をしていると、GROUP BYでグループ化して集計した明細レコードと一緒に、小計や合計のレコードを取得したい場合があります。 ...

SQLで元号と和暦日付を取得する [SQLServer]
SQLで和暦の元号と日付を取得するサンプルです。 元号を取得する 元号はSQLServerの標準機能(関数など)で取得することはでき...

SQLServerのMERGEでINSERT/UPDATE/DELETEを1回のSQLで実行する
あるテーブルやビューに既に対象のレコードが存在している場合はUPDATE(更新)し、存在していない場合はINSERT(挿入)する。 データ...

SQLでうるう年を判定する [SQLServer, MySQL]
先日2人のプログラマーさんが、それぞれうるう年の判定をSQLで記述していました。 片方のプログラマーさんは、マイクロソフトのドキュメントに...

SQLでカレンダーを取得する (WITH CTE) [SQLServer, MySQL]
SQLでカレンダーのデータを取得する方法を紹介します。 1か月の日付が7日ごとに改行して表示されるカレンダー形式のデータは、プログラムで作...

SQLで標準偏差と偏差値を求める [SQLServer, MySQL] (STDEVP, STDDEV_POP)
学校の成績関連のシステムの開発をしていると、時どき偏差値(へんさち)を求めることがあります。 そこで今回はSQLで偏差値を求めるのに必要な...

SQLで文字列の全角と半角を変換(置換)する [SQLServer]
SQLServerには半角文字を全角文字に変換したり、全角文字を半角に変換してくれる関数がありません。 そこで、SQLで全角を...

マスターテーブルのレコードごとの集計値を取得するSQL
テーブルに登録されている金額などの数値データを、あるマスターテーブルのキー(コードやID)ごとに集計します。 サンプルテーブル...

別スキーマのテーブルをSELECT * で参照するビュー(VIEW)を自動作成するストアドプロシージャ [SQLServer]
複数のスキーマを用意している環境で、あるスキーマのテーブルを別のスキーマから参照するビューを作成して使用することがあります。 今回は、...

テーブルなどのデータベースオブジェクトの存在確認 [SQL Server]
SQLServerでテーブルやビューなどのデータベースのオブジェクトを作成するSQLを実行する時、作成するオブジェクトが既に存在しているとエ...

取得する行数(レコード数)を指定してデータをSELECTする TOP ROWCOUNT [SQLServer]
SQLServerにテーブルを作成してデータを取得する際に、取得する行数を指定したい場合があります。 例えば、上位3位までのデータ(レ...

SQLでファイル(バイナリ・画像)のデータをテーブルにINSERT・UPDATEする [SQLServer]
SQLServerのテーブルにファイルをバイナリデータとして登録しておくことで、レポートを出力する際のテンプレートや、写真などの画像...

LIKE演算子の検索条件に指定するワイルドカード文字列のエスケープ [SQLServer]
SQLServer(データベース)のテーブルに対してデータを抽出したり、データを更新したりする際にLIKE演算子を利用すると、ワイルドカード...

プログラミング

SQLServerのテーブルに対応するC#のデータ型(O/Rマッパー作成)
客先の旧システムで使用しているライブラリに、SQLServerに接続してDataSetを操作できるユーティリティークラスが作成されており、そ...

エンティティクラスオブジェクトとデータベースのデータのマッピング
DataReaderやDataTableにデータベースから取得したデータを、定義したエンティティクラスのオブジェクトに入れて操作したいことが...

SQLServerのCLR統合を使用してCLR関数を作成する
SQL Server 2005から提供されている.NET Frameworkの共通言語ランタイム(CLR: Common Langu...

SQL CLR関数で全角と半角、ひらがなとカタカナの変換 [SQLServer]
SQLServerで全角文字と半角文字を相互変換する処理と、ひらがなとカタカナを相互変換する処理を行う関数を作成します。 SQLS...

データベースのオブジェクトからエンティティクラスのコードを自動生成する [C#, SQLServer]
データベースのテーブルやビューなどデータをマッピングするエンティティクラスは、O/Rマッパーを使用してデータベースのデータを操作するアプリケ...

テーブルに登録されているデータからINSERTスクリプトを作成 [SQLServer]
SQL Serverのテーブルに登録されているデータをもとに、INSERTスクリプトを作成するプログラムを作成します。 C#のプログラ...