この記事では、理解して実装するための非常に単純な構造で、データベース参照テーブルに対するSQLクエリの記述に焦点を当てます。
さらに、効果的なSQLクエリの作成の背後にある概念と、専門家としての生活のヒントを明確にします。
データベーステーブルをクエリする前
この記事はSQLスクリプトを使用したデータベーステーブルのクエリに関するものであるため、読者は概念と例を完全に理解するための特定の背景を持っている必要があります。テーブルをどのように参照するかという印象を持っている必要があります。また、必要な機器が揃っている必要があります:
必要なもの:
- リレーショナルデータベースとSQLの基本的な知識。
- ローカルまたはリモートにインストールされたSQLデータベースサーバー。
- SQL ServerManagementStudioやdbForgeStudioforSQLServerなどのデータベース管理ツール。
(提供されたスクリプトを使用して)サンプルデータベースを作成し、SQL Serverに接続して、そのサンプルデータベースに対して実行できるはずです。
空白のデータベースに対してクエリを実行する前に、知識を更新するために、主題に関する前の記事を参照する必要がある場合があります。
空白のデータベースから単純なSQLクエリを作成する方法
参照テーブルから始まるSQLクエリの記述
2つのテーブルを含むサンプルデータベースに対してSQLクエリを作成する必要があります。計画は、SQL参照テーブルと呼ばれるテーブルの1つからのデータを表示することです。注:参照テーブルは、別のテーブルのデータを必要としない任意のテーブルにすることができます。
まず、サンプルデータベースの構造を理解して、正確にクエリを実行する必要があります。
データベース参照テーブルの例
サンプルのBookSimple2を使用します BookTypeという2つのテーブルで構成されるデータベース および本 。
BookType 表には、本に割り当てられる本の種類が含まれています。 本 表には、本の名前、種類、在庫(利用可能な部数)が含まれています。
両方のテーブルがキーを介してリンクされていることは簡単に推測できます。 本に保存されている本の種類 テーブルは元々BookTypeで定義されています テーブル。データの一貫性と信頼性を維持できます。
したがって、 BookType tableは参照テーブルです–メインの Book への参照(ブックタイプ)を提供します テーブル。
下の図を見てください:
本をリンクしない場合 BookTypeのテーブル 本の種類を取得するには、新しい本を保存するたびに必要な種類を定義する必要があります。その結果、同じタイプを何度も保存しているため、すぐにエラーが発生します。さらに、スペルミスにより、さらに多くのタイプが作成される可能性があります。
参照テーブルの使用を無視し、メインテーブルを1つだけ作成する場合、デザインなど、1つのタイプを表すためにさまざまな方法を使用する可能性があります。 、デザイン 、およびデザイン 。特にデータのクエリと理解の場合は混乱します。
SQLでのテーブルの相互関係の詳細については、過去の記事を参照することもできます。
SQL Server Management Studio(SSMS)を使用したデータベース設計の学習–パート2
参照テーブルとメインテーブルの使用の背景がわかったので、例に進むことができます。
SQLで参照テーブルを作成する方法
データベース開発ツール(SQL ServerManagementStudioまたはdbForgeStudiofor SQL Serverの場合があります)を開き、インストールされているSQLServerインスタンスに接続します。
マスターデータベースに対して次のスクリプトを記述して、サンプルデータベースをセットアップします BookSimple2 2つのテーブルがある場合:
-- Create sample database BookSimple2
USE MASTER
GO
CREATE DATABASE BookSimple2
GO
USE BookSimple2
-- Creating a reference table BookType
CREATE TABLE dbo.BookType
(
BookTypeId INT IDENTITY(1,1),
Name VARCHAR(50)NOT NULL,
Detail VARCHAR(200)NULL
CONSTRAINT PK_BookType_BookTypeId PRIMARY KEY (BookTypeId)
)
GO
-- Populating (adding rows to the) table BookType
SET IDENTITY_INSERT dbo.BookType ON
GO
INSERT INTO dbo.BookType
(
BookTypeId
,Name
,Detail
)
VALUES
(
1 -- ID - INT Primary Key
,'Designing' -- Name - varchar(50) NOT NULL
,'This is Designing' -- Detail - varchar(200)
),
(
2 -- ID - INT Primary Key
,'Testing' -- Name - varchar(50) NOT NULL
,'This is Testing' -- Detail - varchar(200)
),
(
3 -- ID - INT Primary Key
,'Coding' -- Name - varchar(50) NOT NULL
,'This is Coding' -- Detail - varchar(200)
);
GO
SET IDENTITY_INSERT dbo.BookType OFF
GO
-- Creating a table Book
CREATE TABLE dbo.Book
(
BookId INT IDENTITY(1,1),
Name VARCHAR(50),
BookTypeId INT,
Stock INT,
CONSTRAINT PK_Book_BookId PRIMARY KEY (BookId)
)
GO
スクリプトを実行した後、新しく作成されたデータベースをSSMSObjectExplorerまたはdbForgeStudioforSQLServerのDatabaseExplorerセクションで表示できます。
SQL外部キーを使用して2つのテーブルを参照する方法
参照テーブル( BookType )間の関係を作成するスクリプトの部分を意図的に除外しました )とメインテーブル(本 )キーの形式で。
サンプルデータベースに対して次のスクリプトを実行して、参照テーブルをメインテーブルにリンクします。
-- Creating foreign key constraint on Book table to get BookTypeId values from BookType table
ALTER TABLE dbo.Book
ADD CONSTRAINT [FK_Book_BookType_BookTypeId]
FOREIGN KEY ([BookTypeId]) REFERENCES dbo.[BookType] ([BookTypeId]);
BookSimple2を展開します データベース>本 表>キー フォルダ:
2つのテーブルが正常にリンクされていることがわかります。
上記は、SQL ServerManagementStudioのスクリーンショットです。ただし、dbForge Studio forSQLServerのデータベースエクスプローラーでデータベースを表示する場合の表示はまったく同じです。
目的のデータベースを選択するための重要なヒント: 正しいデータベース(サンプルデータベース)に対してクエリを実行していることを確認する必要があります。したがって、使用可能なデータベースのリストからそれを選択するか、次のスクリプトを実行します。
-- Select the sample SQL database to query it
USE BookSimple2
重要! Azure SQL Databaseと呼ばれるクラウドバージョンのSQLデータベースを使用している場合、スクリプトを使用してデータベースを選択することはできません。
最初のクエリを書く
データベーステーブルをクエリするには、次の形式のSELECTステートメントのみを念頭に置く必要があります。
SELECT * FROM <TableName>
SELECTステートメントははるかに柔軟性がありますが、現時点では、テーブルのすべてのレコード(行)の表示のみに焦点を当てます。
SQLに関する重要なヒント : SQL(特にT-SQLを参照)は大文字と小文字を区別しないことに注意してください 。これは、SQLで予約された単語( SELECT )の両方に関連しています。 選択と同じです ) またはユーザー定義の名前( BookType booktypeと同じです ) 。
BookType参照テーブルのすべての行を表示
サンプルデータベースに対して次のスクリプトを記述します。
-- View all data from the BookType table
SELECT * FROM dbo.BookType
出力は次のとおりです。
テーブルからすべての列と行を確認できます。テーブルからすべてのデータを取得するのがはるかに高速な方法です。
SELECTに関する重要なヒント*: SELECT *を使用する必要があります 小さなテーブル(参照テーブルなど)をチェックする場合にのみ、テーブルからすべての行と列を取得します。そうしないと、多くの時間がかかる可能性がありますが、より大きなテーブルのいくつかの列と行のデータが必要になる可能性があります。
テーブル名を使用してBookTypeテーブルからすべての行を検索
テーブルをクエリするためのより良い方法があります。以下に示すように、テーブルに名前を付け、すべての列にバインドします。
-- View all data from the BookType table using bt alias
SELECT bt.* FROM dbo.BookType bt
参照テーブルから選択した列を表示
テーブル名を使用すると、より多くの利点がもたらされます。まず、テーブルから目的の列をすばやく選択できます。次に、ほとんどの場合、一部の列のみが必要になるため、テーブルと制限された列の使用がより明確になります。
これは、 BookTypeからのみIDと名前を取得する例です。 テーブル:
-- View book type id and name columns from the reference table
SELECT bt.BookTypeId,bt.Name FROM dbo.BookType bt
結果は次のとおりです。
SELECT構文の改善
したがって、上記の情報に基づいて、SELECT構文を次のように改善できます。
SELECT t.<column1>,t.<column2> FROM <TableName> t
OrderBy句を使用して名前列でデータを並べ替える
特定の列または列のセットに基づいて結果セットを並べ替えることができます。データを並べ替えると、別の視点が得られます。
注文者の使用法 この場合の句は次のとおりです。
SELECT t.<column1>,t.<column2> FROM <TableName> t order by t.<column1>
たとえば、タイプ名(アルファベット順)で並べ替えられた本のタイプを確認したいとします。この場合、SELECTステートメントスクリプトで次のようにOrderBy句を使用します。
-- View book types (name) sorted by type name
SELECT bt.Name FROM dbo.BookType bt ORDER BY bt.Name
出力は次のとおりです。
名前列でデータを降順で並べ替える
要件に応じて、データを降順で並べ替えることもできます。たとえば、[名前]列に基づくすべての書籍タイプのリストを降順(ZからA)で表示したいとします。構文は次のようになります:
SELECT t.<column1>,t.<column2> FROM <TableName> t order by t.<column1> desc
T-SQLスクリプトは次のとおりです。
-- View book types (name) sorted by a type name in descending order (from Z to A)
SELECT bt.Name FROM dbo.BookType bt ORDER BY bt.Name desc
結果セットは以下のとおりです。
テーブルからTOPNレコードを表示する
最後に、TOP句を使用して、データベースから取得する行数を選択できます。その条項の後に、必要な数を提供する必要があります:
SELECT Top N t.<column1>,t.<column2> FROM <TableName> t
ただし、順序のないTOP句は最適なオプションではありません。上位n行を選択するときに考慮する列の順序を指定する必要があります。
ここで、上記の構文を次のように改善できます。
SELECT Top N t.<column1>,t.<column2> FROM <TableName> t order by <column> Desc/Asc
DESC を使用して、降順について言及する必要があることに注意してください。 最後に。ただし、昇順は必須ではありません。これがデフォルトのオプションです。
名前順に上位2種類の本を降順で表示してみましょう:
--View Top 2 types of the books ordered by name in descending order (from Z to A)
SELECT TOP 2 bt.Name FROM dbo.BookType bt
ORDER BY bt.Name DESC
出力は次のとおりです。
TOP Nに関する重要なヒント: スニークピークと呼ばれるデータをすばやく確認する場合は、テーブルのすべての行を表示するのではなく、TOP N句(順序付き)を使用してテーブルを表示します。
職業生活のシナリオでは、Top N句は、大きなテーブルから大量のデータを段階的に更新するのに役立ちます。
これで、SQLデータベースのテーブルのクエリに成功しました。さらに、専門家のようにクエリを実行するためのヒントをいくつか理解し、SQLクエリを作成するためのいくつかのベストプラクティスを学びました。
DB参照テーブルの練習
これで、任意のテーブルに対するSQLクエリの記述、実行、および有効性の向上を実現できます。新しいスキルを向上させるために、次の演習を試してください。
- 本のタイプID( BookTypeId )を表示するスクリプトを作成してみてください )詳細(詳細em> )列のみ。
- 参照を並べ替えてみてくださいBookType IDによるテーブル( BookTypeId )降順(3から1)。
- BookTypeから上位2行を取得してみてください IDのみを含むテーブル( BookTypeId )と詳細(詳細em> )詳細em>で並べ替えられた書籍タイプ 列。