グラフィカル SQL の基本、初心者でも理解できる SQL 記事


この記事では、リレーショナル データベースの設計哲学を紹介します。SQLでは、すべてが関係です。


コンピューター時代の分野には、次のような優れたデザインコンセプトやアイデアがたくさんあります。
  • Unix では、すべてがファイルです

  • オブジェクト指向プログラミング言語では、すべてがオブジェクトです


リレーショナル データベースにも独自の設計哲学があります。つまり、 SQL  では すべてがリレーションです


01

リレーショナル モデル

リレーショナル モデル (リレーショナル モデル) は、集合論における 関係概念 に基づいて 1970 年に EFCodd 博士によって提案され、現実世界のエンティティ オブジェクトとそれらの間のリンクの両方が 関係によって表現されます データベース システムで見られる関係は、 (Row) と列 ( Column)で構成される 2 次元のテーブル (Table) です。したがって、リレーショナル テーブルはデータ行の集合である とも言えます

eaf717703c24790defd7b5eca416c2e0.jpeg

リレーショナル モデルは、データ構造リレーショナル操作整合性制約の 3 つの部分で構成されます。


  • リレーショナル モデルのデータ構造は、ベース テーブル派生テーブル(クエリ結果)、および仮想テーブル(ビュー)を含むリレーショナル テーブルです。

  • 一般的に使用されるリレーショナル操作には、SQL 言語を使用したadd delete modify 、およびquery (CRUD)が含まれます。その中で、選択、射影、和集合、交差、例外、デカルト積などのクエリ操作が最も複雑です。

  • 整合性制約は、データの整合性を維持したり、エンティティの整合性(主キー制約)、参照整合性(外部キー制約)、ユーザー定義の整合性(非 NULL 制約、一意制約、チェック制約など) などのビジネス制約のニーズを満たすために使用されます。デフォルト値)。

今日のトピックはリレーショナル操作言語 (SQL) です。


02

セット指向

SQL (構造化照会言語) は、 リレーショナル データベースを操作するための標準言語です SQL は英語に非常に近く、非常に簡単に使用できます。 設計の初期段階では、技術者以外の人のニーズも考慮されており、通常は望ましい結果 ( What) を説明するだけで済み、データ処理プロセス (How) はデータベース管理システムに任せられます。 つまり、SQL は人々にとっての真のプログラミング言語なのです。 次に、関係のさまざまな演算ステートメントを詳細に分析しましょう。その目的は、SQL が集合指向のプログラミング言語であり、その演算オブジェクトが集合であり、演算の結果も集合であることを

誰もが理解できるようにすることです
リレーショナル データベースでは、通常、リレーション、テーブル、コレクションは同じ概念を表します。

03

次のSELECT は

単純なクエリ ステートメントです:

SELECT employee_id, first_name, last_name, recruit_date
   FROM employees; その機能は、 employees テーブルから従業員情報をクエリする
ことです。
明らかに、FROM の後にテーブル (リレーション、コレクション) があることは誰もが知っています。それだけでなく、クエリ ステートメント全体の結果も table になります
したがって、上記のクエリをテーブルとして使用できます。
選択 *
   FROM ( SELECT 従業員 ID、名、姓、 recruit_date & nbsp
;         FROM employees) t; 括弧内のクエリ ステートメントは派生テーブルと呼ばれ、それに t という別名が割り当てられてい
ますまた、クエリ結果全体は table です。これは、退屈ではありますが、ネストを続けることができることを意味します。
PostgreSQL の別の例を見てみましょう:
-- PostgreSQL
SELECT *
   FROM  upper( 'sql');
| upper |
| -------|
| SQL |
upper()   は関数です大文字変換用これは FROM 句に表示されます。これは、その結果もテーブルですが、1 行 1 列の特殊なテーブルであることを意味します。
SELECT   句は、クエリ対象のフィールドを指定するために使用されます。フィールドには式や関数値を含めることができます。待って。SELECT は関係演算では射影と呼ばれますが、以下の模式図を見るとわかりやすいと思います。
aebba2160b34100e407fe2c4b11e6ade.jpeg
SELECT に加えて、一般的に使用される SQL   句がいくつかあります。
WHERE   は、リレーショナル操作で選択と呼ばれるデータ フィルタリングの条件を指定するために使用されます。概略図は次のとおりです:
ba88defc733e0cef0b49852631552b01.jpeg
ORDER BY   は、クエリ結果の並べ替え
cd2f93e1ea673679aa3008302b43afc7.jpeg
に使用されます 概略図は次のとおりです: SQL   は、フィルタリング、グループ化、並べ替え、数量制限などの各種のデータ操作を完了できます。これらすべての操作のオブジェクトはリレーショナル テーブルであり、結果もリレーショナル テーブルです。
ad1e445b73314fd5a2eac2dea4f3d26c.jpeg
これらの関係演算の中には、グループ化という特別な演算があります。

04

GROUP BY

グループ化 (GROUP BY) 操作は、リレーションの構造を変更するため、他のリレーショナル操作とは異なります。 次の例を考えてみましょう。
SELECT Dep​​artment_id,  count(*), first_name
   FROM employees
  GROUP  BY Dep​​artment_id;
このステートメントの目的は、部門ごとに従業員数カウントすることですが、構文エラーがあります。つまり、first_name はクエリ リストに含めることはできません。その理由は、部門ごとにグループ化する場合、各部門には複数の従業員が含まれるため、どの従業員の名前を表示する必要があるかを判断できないのは論理的なエラーです。
したがって、GROUP BY  はコレクション要素 (データ行) の構造を変更し、まったく新しい関係を作成します。
グループ化操作の概略図は次のとおりです。
c6a6d6bd4b5751051dc6c45003c5775a.jpeg
それでも、GROUP BY の結果はコレクションです。

05

UNION

SQLのコレクション指向の機能を最も明白に示しているのは次のとおりです。
  • UNION (和集合演算)

  • INTERSECT (交差演算)

  • EXCEPT/MINUS (減算演算)


これらの集合演算子の役割は、 2 つのセットを 1 つのセットに結合することである ため、次の条件を満たす必要があります。
  • 両側のコレクション内のフィールドの数と順序は同じである必要があります。

  • 両側のコレクション内の対応するフィールドの型は一致するか、互換性がある必要があります。


具体的には、UNION と UNION ALL を使用して 2 つのコレクションの和集合を計算し、最初のクエリ結果または 2 番目のクエリ結果のいずれかに表示されるデータを返します。
両者の違いはUNION では結果から重複データが除外されるのに対し、 UNION ALL では重複データが保持されることです
以下は UNION 演算の概略図です:
595130c01d359056e97b41db04e03509.jpeg
INTERSECT 演算子は2 つのセットの共通部分、つまり最初のクエリ結果と 2 番目のクエリ結果に同時に現れるデータを返すために使用されます。結果内の重複データは除外されます
INTERSECT 操作の概略図は次のとおりです。
c6fb36a9e7f02aa4f679b68183875ea3.jpeg
EXCEPT   または   MINUS   演算子は、2 つのセットの差分セット、つまり、最初のクエリ結果には表示されるが 2 番目のクエリ結果には表示されないレコードを返し、結果内の重複データを除外するために使用されます
EXCEPT 演算子の概略図は次のとおりです:
8ac8acea13ba2b5696c6b8ffe42730d0.jpeg
さらに、DISTINCT   演算子は、重複データを削除する、つまりコレクション内の重複要素を除外するために使用されます。
SQL のリレーショナル概念は数学の集合論から来ているため、UNION、INTERSECT、EXCEPT はそれぞれ集合論の和集合 (∪\cup∪)、積集合 (∩\cap∩)、差分 (∖\setminus∖) の演算から来ています。 。
集合論のコレクションでは重複データが許可されませんが、SQL では許可されることに注意してください。したがって、SQL のコレクションはマルチセットとも呼ばれます。集合理論のマルチセットとコレクションは順序付けされていませんが、SQL では ORDER BY 句を使用してクエリ結果を並べ替えることができます。

06

JOIN

SQL では、エンティティ オブジェクトがリレーショナル テーブルに格納されるだけでなく、 オブジェクト間の関係も リレーショナル テーブルに格納されます。 したがって、これらの関連データを取得したい場合は、別の操作である結合クエリ (JOIN) を使用する必要があります 一般的な SQL 結合クエリ タイプには、内部結合外部結合クロス結合などが含まれます。このうち、外部結合は、左外部結合、右外部結合、完全外部結合に分けられます。内部結合(Inner Join) は、結合条件を満たす2 つのテーブルのデータを返します。内部結合の原理は、次の図に示されています。左外部結合(左外部結合) は、左側のテーブルのすべてのデータを返します。右のテーブルでは、結合条件データを満たすデータを返します。結合条件がない場合は null を返します。左外部結合の原理は次の図に示されています:右外部結合(右外部結合)は、右側のテーブル内のすべてのデータを返します。左側のテーブルについては、結合条件を満たすデータを返し、NULL 値を返します。そうでなければ。右外部結合と左外部結合は交換できます次の 2 つは同等です: t1  RIGHT JOIN t2



ca48f39a17a245ffa5a64379140a0895.jpeg


fa0f92f09ffb5464d16fd7371c05a27e.jpeg


t2  LEFT JOIN t1完全
外部結合(完全外部結合) は、左外部結合と右外部結合と同等であり、左のテーブルと右のテーブルのすべてのデータを同時に返します。結合条件を満たしていない場合は、null 値を返します。
完全外部結合の原理を次の図に示します。
02340e6e90473468c29ffb74bfafd54c.jpeg
クロス結合はデカルト積とも呼ばれます。2 つのテーブルのクロス結合は、一方のテーブルのすべての行ともう一方のテーブルのすべての行を結合することに相当し、結果の数は2 つのテーブルの行数の乗算になります。
クロスコネクトの原理を次の図に示します。
c9a44fe77a188027f498d4b55d8b0928.jpeg
他のタイプの接続には、セミ結合 (SEMI JOIN) およびアンチ結合 (ANTI JOIN) があります。


セット操作は2 つのコレクションをより大きなまたはより小さなコレクションにマージし、結合クエリはより多くの要素 (より多くの列) を取得しながら、2 つのコレクションをより大きなまたはより小さなコレクションに変換します。多くの場合、コレクション操作は次のような接続クエリを通じて実装できます:
select & nbsp; 部門 ID
& nbsp; & nbsp; from & nbsp; 部門
& nbsp; Union
select & nbsp; 部門 ID
& nbsp. ; & nbsp;
from
& nbsp ; 従業員; e.デパートメント_id)
   FROM デパートメント d
   FULL  JOIN 従業員 e  ON (e.デパートメント_id = d.デパートメント_id); クエリの例をたくさん取り上げましたが、他のクエリの例も見てみましょ
うデータ操作。

07

DML

DML   は、データ操作言語 ( Insert、Update、および Delete) の略です 以下は挿入ステートメントの例です: CREATE  TABLE  test( id  int); -- MySQL、SQL Server などINSERT  INTO  test( id)  VALUES ( 1),( 2), ( 3); -- Oracle INSERT  INTO  test( id) ( SELECT  1  AS  id  FROM DUAL UNION ALL SELECT  2  FROM DUAL UNION ALL SELECT  3  FROM デュアル); INSERT ステートメントによって 3 つのレコードが挿入されるか、3 つのレコードを含むリレーショナル テーブルが挿入されます。UNION ALL はリレーショナル テーブルを返すためです。VALUES はリレーショナル テーブルも指定し、SQL Server および PostgreSQL の次のステートメントをサポートします: SELECT *
















FROM (
   VALUES( 1),( 2),( 3)
)  test( id);
前に述べたように、FROM   の後にはリレーショナル テーブルが続くため、ここでも   VALUES  同じ。挿入するのは単一レコードであることが多いため、実際にはテーブル単位で操作
同様に、UPDATE ステートメントと DELETE   ステートメントもリレーショナル テーブル単位での操作です。これは、データ行が更新される、または複数のレコードが削除されると言うことに慣れているだけです。

おすすめ

転載: blog.csdn.net/zhaomengsen/article/details/132124701