24  SQL実習

SQLの書き方を身につけるため,Chinookデータベースを使用し,SQLの総合演習を行う.

24.1 SQL文20問

24.1.1 tracksテーブル

erDiagram 
   tracks {
      integer TrackId PK
      nvarchar Name
      integer AlbumId
      integer MediaTypeId
      integer GenreId
      nvarchar Composer
      integer Milliseconds
      numeric UnitPrice
   }

  1. TrackId,Nameを取得するSQL文を書け.
  2. TrackId,Name,AlbumIdを取得し,AlbumIdで昇順に並べ替えるSQL文を書け.
  3. TrackId,Name,AlbumIdを取得するSQL文を書け.ただし,AlbumIdが1のものだけを対象とする.
  4. TrackId,Name,AlbumId,Millisecondsを取得するSQL文を書け.ただし,以下の条件を満たすものとする.
    • AlbumIdが1のもの
    • Millisecondsが200000以上のもの
  5. Name,AlbumId,Composerを取得するSQL文を書け.ただし,Composerの名前に"Steve"が含まれるものだけを対象とする.
  6. TrackId,Name,MediaTypeIdを取得するSQL文を書け.ただし,MediaTypeIdが1または2のものだけを対象とする.(IN句を使用すること)
  7. それぞれのAlbumIdごとに,トラックの数をカウントし,AlbumId,トラック数を取得するSQL文を書け.結果はAlbumIdで昇順に並べ替えること.
  8. TrackId,Name,GenreIdを取得するSQL文を書け.ただし,GenreIdが1,2,3以外のものだけを対象とする.(NOT IN句を使用すること)
  9. 「Wild」で始まるトラック名を持つトラックのTrackId,Name,AlbumIdを取得するSQL文を書け.
  10. 「Honey」を含むトラック名を持つトラックのTrackId,Name,AlbumIdを取得するSQL文を書け.

24.1.2 invoicesテーブル

erDiagram
   invoices {
      integer InvoiceId PK
      integer CustomerId
      datetime InvoiceDate
      nvarchar BillingAddress
      nvarchar BillingCity
      nvarchar BillingState
      nvarchar BillingCountry
      nvarchar BillingPostalCode
      numeric Total
   }

  1. BillingAddress,BillingCityを取得するSQL文を書け.ただし,BillingCityが"Chicago"または"New York"のものだけを対象とする.
  2. BillingAddress,BillingCity,Totalを取得するSQL文を書け.ただし,以下の条件を満たすものとする.
    • BillingCityが"Chicago"または"New York"のもの
    • Totalが10.00以上のもの
  3. InvoiceId,BillingAddress,Totalを取得するSQL文を書け.ただし,Totalが14.00以上かつ18.00以下のものだけを対象とする.(Between句を使用すること)
  4. BillingCountryを取得するSQL文を書け.ただし,重複を除外すること.

24.1.3 tracks, albums, artistsテーブル

erDiagram
   tracks {
      integer TrackId PK
      nvarchar Name
      integer AlbumId FK
      integer MediaTypeId
      integer GenreId
      nvarchar Composer
      integer Milliseconds
      numeric UnitPrice
   }
   albums {
      integer AlbumId PK
      nvarchar Title
      integer ArtistId FK
   }
   artists {
      integer ArtistId PK
      nvarchar Name
   }
   tracks }o--o{ albums : belongs
   albums }o--|| artists : creats

  1. ArtistIdが1のアーティストが作ったアルバムのTrackId,Name,AlbumIdを取得するSQL文を書け.Hint: 副問合せ,IN句を使用すること.
  2. tracksとalbumsテーブルを結合し,tracks.TrackId,tracks.Name,albums.Titleを取得するSQL文を書け.
  3. tracks.TrackId,tracks.Name,albums.Title,artists.Nameを取得するSQL文を書け.(JOIN句を使用すること)
  4. それぞれのAlbumIdごとに,トラックの数をカウントし,albums.Title,トラック数を取得するSQL文を書け.結果はカウント数で昇順に並べ替えること.Hint: JOIN句とGROUP BY句を使用すること.
  5. 上の問題の結果は,トラック数が15以上のものだけを対象とするSQL文を書け.Hint: HAVING句を使用すること.
  6. アルバム名が"Let There Be Rock"のアルバムに含まれるトラックのTrackId,Name,AlbumIdを取得するSQL文を書け.Hint: 副問合せを使用すること.