sql >> データベース >  >> RDS >> Database

SQLリファレンステーブル:基本的なクエリを作成および作成する方法

    この記事では、理解して実装するための非常に単純な構造で、データベース参照テーブルに対するSQLクエリの記述に焦点を当てます。

    さらに、効果的なSQLクエリの作成の背後にある概念と、専門家としての生活のヒントを明確にします。

    データベーステーブルをクエリする前

    この記事はSQLスクリプトを使用したデータベーステーブルのクエリに関するものであるため、読者は概念と例を完全に理解するための特定の背景を持っている必要があります。テーブルをどのように参照するかという印象を持っている必要があります。また、必要な機器が揃っている必要があります:

    必要なもの:

    1. リレーショナルデータベースとSQLの基本的な知識。
    2. ローカルまたはリモートにインストールされたSQLデータベースサーバー。
    3. 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クエリの記述、実行、および有効性の向上を実現できます。新しいスキルを向上させるために、次の演習を試してください。

    1. 本のタイプID( BookTypeId )を表示するスクリプトを作成してみてください )詳細(詳細 )列のみ。
    2. 参照を並べ替えてみてくださいBookType IDによるテーブル( BookTypeId )降順(3から1)。
    3. BookTypeから上位2行を取得してみてください IDのみを含むテーブル( BookTypeId )と詳細(詳細 詳細で並べ替えられた書籍タイプ 列。

    1. Ubuntu 20.10 /Ubuntu20.04にApacheCassandraをインストールする方法

    2. PL / SQLでファイルをZIPする方法は?

    3. SQL Serverで主キーを作成する方法(T-SQLの例)

    4. チャートの種類の紹介