JOINを使用したマルチテーブル共同問い合わせ
しかし、現実にはデータベースは、多くの場合、一般的に、データベースのパラダイムに準拠して、関連するデータテーブルのセットが含まれ(正規化)[1] 。私たちは最初のリレーショナルデータベースを理解してみましょう范式
データベースのパラダイム(正規化)
データベース設計パラダイムは、パラダイム仕様で、各データベーステーブルは、(データの整合性を維持するのに役立つ)最小まで複製データを格納するために、仕様データテーブルであるデータベースのパラダイムではなく、テーブルとテーブルの間に、一方そこパラダイムは、多くのメリットをもたらします。独立して成長のデータの強い結合、(すなわち、このような成長や、自動車の車のエンジンの成長としては、完全に独立している)であるが、独立したデータテーブルと、私たちはクエリにしたいということを意味複数のデータ属性は、より複雑なSQL文を必要とするとき、あること、このセクションのマルチテーブル始まりは接続技術について説明しています。このようなSQLのパフォーマンスが特にとき、データテーブル、大量の多くの例では、多くの課題に直面することになります。
エンティティ(例えば犬など)属性データが複数のデータテーブルに分散している場合は、私たちはどのように学ぶ必要がある JOIN
としても、我々はクエリにしたい項目を見つけ、これらの技術やデータテーブルを統合します。
主キー:
主键(primary key)
一般的なリレーショナルテーブル、カラムには、プロパティセットを持っています 主键(primary key)
。主キーは、一意のデータの一部が(自分のID番号を想像して)複雑な繰り返されることはありません識別することです。最も一般的な主キーの一つは、自動インクリメント整数(インクリメントIDは、もちろん文字列、ハッシュ値などのデータID + 1、ロング各データセットは、一意の主キーとすることができるほどのライン毎に書き込まれます。
手段主键(primary key)
(それは、接続後に発現されるように、IDと同じデータが、データを簡単に識別することができます)(他の一意性プロパティがかもしれないが)、私たちは同じ主キーのIDが接続された二つのテーブルのデータを置くことができます( )接続に関するゲームを想像してみてください。私たちは、特定の使用 JOIN
のキーワードを。さんが学びましょう INNER JOIN
。
マルチテーブルは、文を結合します。
SELECT列、another_table_column、... mytableはFROM(主表)
INNERはanother_table(テーブルが結合される)JOIN
mytable.id = another_table.id ON(ちょうど2つの同一の1に接続された一次結合は、前記想像)
WHERE 条件(S)ORDER BY列、... ASC / DESC LIMITをnum_limit OFFSET num_offset。
戦闘:
2つの表は、映画、映画情報テーブル作品、BoxOffice店市場関連の情報があります
表:作品
同上 | タイトル | ディレクター | 年 | Length_minutes |
1 | トイ・ストーリー | ジョン・ラセター | 1995 | 81 |
2 | バグズライフ | ジョン・ラセター | 1998 | 95 |
3 | トイ・ストーリー2 | ジョン・ラセター | 1999 | 93 |
4 | モンスターズ・インク | ピート・ドクター | 2001 | 92 |
5 | ファインディング・ニモ | ファインディング・ニモ | 2003 | 107 |
6 | Mr。インクレディブル | ブラッド・バード | 2004 | 116 |
7 | 車 | ジョン・ラセター | 2006 | 117 |
8 | ラタトゥイユ | ブラッド・バード | 2007 | 115 |
9 | WALL-E | アンドリュー・スタントン | 2008 | 104 |
10 | アップ | ピート・ドクター | 2009 | 101 |
11 | トイ・ストーリー3 | リー・アンクリッチ | 2010 | 103 |
12 | カーズ2 | ジョン・ラセター | 2011 | 120 |
13 | 勇者 | ブレンダ・チャップマン | 2012 | 102 |
14 | モンスターズ・ユニバーシティ | ダン・スキャンロン | 2013 | 110 |
表:Boxoffice
Movie_id | 格付け | Domestic_sales | International_sales |
5 | 8.2 | 380843261 | 555900000 |
14 | 7.4 | 268492764 | 475066843 |
8 | 8 | 206445654 | 417277164 |
12 | 6.4 | 191452396 | 368400000 |
3 | 7.9 | 245852179 | 239163000 |
6 | 8 | 261441092 | 370001000 |
9 | 8.5 | 223808164 | 297503696 |
11 | 8.4 | 415004880 | 648167031 |
1 | 8.3 | 191796233 | 170162503 |
7 | 7.2 | 244082982 | 217900167 |
10 | 8.3 | 293004164 | 438338580 |
4 | 8.1 | 289916256 | 272900000 |
2 | 7.2 | 162798565 | 200600000 |
13 | 7.2 | 237283207 | 301700000 |
タスク:
ラインですべてのムービーを検索1. Domestic_sales
とオンライン販売
内側の作品SELECT * FROM Movies.id = Boxoffice.Movie_idにBoxofficeに参加
オフライン販売映画よりもすべての大きなオンライン販売を探す2
内側の作品SELECT * FROM Movies.id = Boxoffice.Movie_idどこBoxoffice.International_sales> Boxoffice.Domestic_salesにBoxofficeに参加
市場シェアに基づいて、すべてのムービーを検索3. rating
逆順
内側の作品SELECT * FROM = Movies.idにBoxoffice.rating DESCによってBoxoffice.Movie_id順をBoxofficeに参加
4. 最高のディレクターのランク付けされている比較することにより、各映画のオンライン販売、オンライン販売の数
SELECT movies.Directorは、内側の映画からBoxoffice.International_salesリミット1 DESC Boxoffice.International_salesによってMovies.id = Boxoffice.Movie_idオーダーBoxofficeに参加します