SQLServer2017データベースでクエリを作成する方法。
実行できる最も基本的なクエリの1つは、次のようになります。
SELECT * FROM TableName;
このクエリは、指定されたテーブルからすべてのデータを返します。 TableName
クエリするテーブルの名前です。データベース内のテーブルの名前に置き換えてクエリを実行するだけで、そのテーブルの内容が表示されます。
私たちのデータベースは3つのテーブルで構成されています。それぞれにデータが含まれています。各テーブルの内容を見てみましょう。
Artists
表:
SELECT * FROM Artists;結果
ArtistId ArtistName ActiveFrom -------- ---------------------- ------------------------ 1 Iron Maiden 1975-12-25T00:00:00.000Z 2 AC/DC 1973-01-11T00:00:00.000Z 3 Allan Holdsworth 1969-01-01T00:00:00.000Z 4 Buddy Rich 1919-01-01T00:00:00.000Z 5 Devin Townsend 1993-01-01T00:00:00.000Z 6 Jim Reeves 1948-01-01T00:00:00.000Z 7 Tom Jones 1963-01-01T00:00:00.000Z 8 Maroon 5 1994-01-01T00:00:00.000Z 9 The Script 2001-01-01T00:00:00.000Z 10 Lit 1988-06-26T00:00:00.000Z 11 Black Sabbath 1968-01-01T00:00:00.000Z 12 Michael Learns to Rock 1988-03-15T00:00:00.000Z 13 Carabao 1981-01-01T00:00:00.000Z 14 Karnivool 1997-01-01T00:00:00.000Z 15 Birds of Tokyo 2004-01-01T00:00:00.000Z 16 Bodyjar 1990-01-01T00:00:00.000Z 16 row(s) returned Executed in 1 ms
Albums
表:
SELECT * FROM Albums;結果
AlbumId AlbumName ReleaseDate ArtistId GenreId ------- ------------------------ ------------------------ -------- ------- 1 Powerslave 1984-09-03T00:00:00.000Z 1 1 2 Powerage 1978-05-05T00:00:00.000Z 2 1 3 Singing Down the Lane 1956-01-01T00:00:00.000Z 6 3 4 Ziltoid the Omniscient 2007-05-21T00:00:00.000Z 5 1 5 Casualties of Cool 2014-05-14T00:00:00.000Z 5 1 6 Epicloud 2012-09-18T00:00:00.000Z 5 1 31 Somewhere in Time 1986-09-29T00:00:00.000Z 1 1 32 Piece of Mind 1983-05-16T00:00:00.000Z 1 1 33 Killers 1981-02-02T00:00:00.000Z 1 1 34 No Prayer for the Dying 1990-10-01T00:00:00.000Z 1 1 35 No Sound Without Silence 2014-09-12T00:00:00.000Z 9 4 36 Big Swing Face 1967-06-01T00:00:00.000Z 4 2 37 Blue Night 2000-11-01T00:00:00.000Z 12 4 38 Eternity 2008-10-27T00:00:00.000Z 12 4 39 Scandinavia 2012-06-11T00:00:00.000Z 12 4 40 Long Lost Suitcase 2015-10-09T00:00:00.000Z 7 4 41 Praise and Blame 2010-06-26T00:00:00.000Z 7 4 42 Along Came Jones 1965-05-21T00:00:00.000Z 7 4 43 All Night Wrong 2002-05-05T00:00:00.000Z 3 2 44 The Sixteen Men of Tain 2000-03-20T00:00:00.000Z 3 2 20 row(s) returned Executed in 1 ms
Genres
表:
SELECT * FROM Genres;結果
GenreId Genre ------- ------- 1 Rock 2 Jazz 3 Country 4 Pop 5 Blues 6 Hip Hop 7 Rap 8 Punk 8 row(s) returned Executed in 1 ms
3つのケースすべてで、クエリは同じでした。変更されたのはテーブル名だけでした。
これは、私たちが実行できる最も基本的なクエリの1つです。単一のテーブルからすべての行とすべての列を返すだけです。
このクエリをさまざまな方法で変更して、表示したいデータのみを返すことができます。以下は、必要な結果を正確に返すようにクエリを変更する一般的な方法です。
列を指定する
アスタリスクを使用する代わりに(*
)すべての列を返すには、返したい列のみを明示的に指定できます。
SELECT AlbumId, AlbumName, ArtistId FROM Albums;結果
AlbumId AlbumName ArtistId ------- ------------------------ -------- 1 Powerslave 1 2 Powerage 2 3 Singing Down the Lane 6 4 Ziltoid the Omniscient 5 5 Casualties of Cool 5 6 Epicloud 5 31 Somewhere in Time 1 32 Piece of Mind 1 33 Killers 1 34 No Prayer for the Dying 1 35 No Sound Without Silence 9 36 Big Swing Face 4 37 Blue Night 12 38 Eternity 12 39 Scandinavia 12 40 Long Lost Suitcase 7 41 Praise and Blame 7 42 Along Came Jones 7 43 All Night Wrong 3 44 The Sixteen Men of Tain 3 20 row(s) returned Executed in 1 ms
基準を狭める
WHERE
を追加できます 提供された基準に一致する行のみを返す句。
SELECT AlbumId, AlbumName, ArtistId FROM Albums WHERE ArtistId = 1;結果
AlbumId AlbumName ArtistId ------- ----------------------- -------- 1 Powerslave 1 31 Somewhere in Time 1 32 Piece of Mind 1 33 Killers 1 34 No Prayer for the Dying 1 5 row(s) returned Executed in 1 ms
別のテーブルに参加
結合を使用して、データを共有する複数のテーブルから結果を返すことができます。これが関係のすべてです。特に、結合は通常、あるテーブルの外部キーが別のテーブルの主キーと一致する場合に使用されます。
SELECT AlbumId, AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId WHERE ReleaseDate < '1980-01-01';結果
AlbumId AlbumName ArtistName ------- --------------------- ---------- 2 Powerage AC/DC 3 Singing Down the Lane Jim Reeves 36 Big Swing Face Buddy Rich 42 Along Came Jones Tom Jones 4 row(s) returned Executed in 1 ms
WHERE
句は、実際には出力に含まれていない列でも機能します。この場合、ReleaseDate
に適用されました 結果にその列を含めていなくても、列。
また、2つのArtistId
を修飾していることもわかります。 テーブルの名前が付いた列(例:Albums.ArtistId
およびArtists.ArtistId
)。 SQL Serverがその列を参照するときに参照しているテーブルを認識できるようにするには、これを行う必要があります。一部のデータベース開発者は、すべてのSQLクエリですべての列名を修飾することをお勧めしますが、これは個人的な好みやプロジェクト固有のコーディング規則の場合です。
エイリアスの追加
コードをより簡潔にするために、クエリにテーブルエイリアスを追加することもできます。たとえば、Artists
を指定できます。 ar
のエイリアス およびAlbums
al
のエイリアス (または他の好きな文字列)
これらのエイリアスを使用して、列名を修飾できます。上記と同じクエリですが、すべての列名がテーブルエイリアスで修飾されています:
SELECT al.AlbumId, al.AlbumName, ar.ArtistName FROM Albums al INNER JOIN Artists ar ON al.ArtistId = ar.ArtistId WHERE al.ReleaseDate < '1980-01-01';結果
AlbumId AlbumName ArtistName ------- --------------------- ---------- 2 Powerage AC/DC 3 Singing Down the Lane Jim Reeves 36 Big Swing Face Buddy Rich 42 Along Came Jones Tom Jones 4 row(s) returned Executed in 1 ms
(テーブルだけでなく)列にエイリアスを割り当てることもできます。次の例でこれを行います。
日付をフォーマットする
データベースで日付と時刻を処理する方法はたくさんあります。 SQL Serverには、日付を格納するためのさまざまなデータ型があります(date
など)。 、time
、datetime
、smalldatetime
など)、日付を処理するためのさまざまな関数があります(たとえば、SYSDATETIME()
、GETDATE( )
、CURRENT_TIMESTAMP
など)。
この例では、YEAR()
を使用します 日付の年の部分だけを返す関数。
SELECT AlbumName, YEAR(ReleaseDate) AS Year FROM Albums;結果
AlbumName Year ------------------------ ---- Powerslave 1984 Powerage 1978 Singing Down the Lane 1956 Ziltoid the Omniscient 2007 Casualties of Cool 2014 Epicloud 2012 Somewhere in Time 1986 Piece of Mind 1983 Killers 1981 No Prayer for the Dying 1990 No Sound Without Silence 2014 Big Swing Face 1967 Blue Night 2000 Eternity 2008 Scandinavia 2012 Long Lost Suitcase 2015 Praise and Blame 2010 Along Came Jones 1965 All Night Wrong 2002 The Sixteen Men of Tain 2000 20 row(s) returned Executed in 1 ms
この例では、列にエイリアスも割り当てます。具体的には、YEAR()
の結果にエイリアスを割り当てます。 ReleaseDate
を渡す関数。 引数としての列。
この例のもう1つのポイントは、AS
を使用したことです。 エイリアスを割り当てるときのキーワード。これはオプションであり、AS
を使用することもできます。 前の例でテーブルにエイリアスを割り当てるときのキーワード。
SQLとTransact-SQLについて
上記のクエリ(およびこのチュートリアルの他のクエリ)は、構造化クエリ言語(SQL)で記述されています。具体的には、SQLServerはTransact-SQLを使用します ( T-SQLに短縮されることもあります )、これはMicrosoftおよびSybase独自のSQL拡張機能です。
SQLは、ほとんどのリレーショナルデータベース管理システムで使用される標準のクエリ言語です。これは、米国規格協会(ANSI)および国際標準化機構(ISO)の規格です。
ほとんどの基本的なクエリはほとんどのリレーショナルデータベースで機能しますが、あるデータベースシステムと別のデータベースシステム間で移植する場合、一部のクエリを少し変更する必要がある場合があります。たとえば、SQLServerで実行されるスクリプトがあるとします。 MySQLでそのスクリプトを使用することもできますが、正常に実行される前にいくつかの変更が必要になる場合があります。
このチュートリアルのSQLスクリプトは、SQLで実行できることのほんの一部を示しています。詳細については、SQLチュートリアルを確認するか、MicrosoftTransact-SQLリファレンスにアクセスしてください。