SQLは構造化照会言語です。リレーショナルデータベースに保持されているデータを管理およびアクセスするために特別に作成されました。 SQLを使用した最初の商業的ベンチャーはOracleでした。Oracleは、すべてのリレーショナルデータベース管理システム(RDMS)の基礎としてSQL * Plusクエリ言語をまだ持っています。.
現在、MySQL、SQL Server、SAP、およびSybaseはすべて、データベースアクセスにSQLを使用しています。このガイドでは、SQLコマンドの標準バージョンを提供し、SQL * PlusでのOracle実装に特に注意を払います。.
編集者の選択:SolarWindsインフラストラクチャ管理ツールを使用して、SQL Serverを含むすべてのMicrosoftツールを監視することをお勧めします。リレーショナルデータベースをサポートするすべての機能をカバーするには、対話できる監視ユーティリティのスイートが必要です。.
リレーショナルデータベース
SQL管理 リレーショナルデータベース. リレーショナルデータベースには、データの繰り返しを減らすために分離されたテーブルが含まれています。データカテゴリの適切なグループ化を決定するプロセスは、「正規化.場合によっては、パフォーマンスの要求により、完全に正規化されていない場合でもテーブルの動作が改善されることがあります。このプロセスは「非正規化」と呼ばれ、まれにしか発生しません.
各テーブルには、各行を一意に識別する列が必要です。これは「主キー.そのエンティティに結合できる他のテーブルには、各レコードのプライマリキーへの参照が含まれている必要があります。その参照は「外部キー.” 君は 参加する 1つのテーブルの外部キーを別のテーブルの主キーと照合することにより、テーブルをまとめます。このアクションはSQLで実行されます。 Entity-Relationship Diagramは、SQLステートメントの構造化方法を決定する際に役立つリファレンスです.
アクセスを高速化するために、通常は インデックス データベース内の各主キー。頻繁に使用される結合を保存して、仮想テーブルを作成することもできます。景色.」
もう1つのデータベースオブジェクトは 引き金. これは、値が列に追加されるか変更されるたびに起動するSQLの一部です。トリガーは、異なるテーブルの列または同じテーブルの他の列の値を更新します。これは、トリガーが配置されている列で値が追加または変更された場合に発生します。また、列に入力できる値を制限することもできます.
DQL、DDL、DCL、およびDML
SQLには4つのコマンドサブセットが含まれています。これらは データクエリ言語 (DQL), データ記述言語 (DDL), データ制御言語 (DCL)、および データ操作言語 (DML).
ほとんどのプロジェクトでは、 データベース管理者 (DBA)は、使用する権限を持つ唯一のチームメンバーです DDL. このコマンドグループは、テーブル、インデックス、トリガー、ビューを作成、変更、削除します.
DML データベースのテーブルからレコードを追加、変更、または削除するために使用されます。これらのSQL関数へのアクセスは、通常、サポートスタッフまたはユーザーコミュニティの上級の責任あるメンバーに制限されています。.
DQL データベースからレポートを生成するために使用されます。このコマンドサブセットはプログラマーによって使用され、エンドユーザーが独自のクエリを実行できるようにすることもできます。.
ユーザー特権の管理は、データと同じデータベースに保存されます。ただし、これらのテーブルへのアクセスは通常、DBAに制限されています。ユーザーアクセスの管理は、すべてを通じて実装されます DCL.
DQL、DDL、DCL、DMLのいずれにも分類されない便利なSQLコマンドが1つあります。これは “記述する」は通常、次のように実装されます DESC. これは、データベース内のオブジェクトの構造を示しています。テーブルの場合、列のリストと、それぞれのデータ型とサイズが表示されます。ビューまたはトリガーを作成したSQLが表示され、特定のインデックスに関係する列が表示されます.
関係演算子
リレーショナルデータベースの背後にある理論は、 E. F.コッド 1970年。Coddの定義には、8つの重要なリレーショナル操作を実装する必要があるクエリツールの要件があります。これらは:
- 選択する
- 事業
- 参加する
- 製品
- 連合
- 交差
- 差
- 分割
リレーショナルデータベースのデータに効果的にアクセスするには、これらの各操作をマスターする必要があります。以下に説明します.
選択する
SELECTは元々呼び出されました 制限. データベースのテーブルから1つのレコードまたは一致するレコードのグループを抽出する機能です。理論的な操作であると同時に, 選択する SQL実装のメインコマンドの名前です。実際、すべてのデータ取得はSELECTで実行されます。このコマンドは非常に強力であるため、多くの方法で変更できます。学習する必要があるSQLのほとんどは、SELECTステートメントの「節」です。.
事業
PROJECTは、テーブル内の列(または「属性」)を分離する機能です。これは常にSELECTステートメントで実装されます.
参加する
JOINは、共通の属性でテーブルをリンクします。 1つのテーブルで外部キーを使用して、別のテーブルの主キー値と一致させます。この行為は、2つのテーブルを一時的に効果的に統合します。これは、SELECTステートメントの句として実装されます。 2つのテーブルを結合すると、両方のサポートテーブルに表示されないレコードは自動的に除外されます。 「外部結合」は、他のテーブルに一致しないレコードを表示し、他のテーブルによって提供されるはずだったフィールドを空白のままにします.
製品
PRODUCTは「回.これは、2つのテーブルからデータを引き出すSELECTステートメントとして実装されますが、それらの間の結合は指定しません。実際には、誰もが2つのテーブルで時間を実行する実際的な理由はほとんどありません。通常、JOIN句を誤って記述したことは警告サインです。 PRODUCTの結果は、1つのテーブルのすべての適格なレコードが他のテーブルのすべての適格なレコードと一致することです。したがって、それぞれが10個のレコードを持つ2つのテーブルからSELECTステートメントを作成すると、結果は合計100レコードになります.
連合
UNIONは集合論の一般的な演算子です。 2つのセットがある場合、ユニオンは両方のセットのすべてのメンバーを結合します。結果から重複が削除されます。 SQLでは、これは または ブール演算子.
交差
INTERSECTは集合論のもう1つの主要な演算子です。 2つのセットがある場合、インターセクトは両方のセットのメンバーである主題を表します。 2つのセットのうち1つのみのメンバーであるサブジェクトは結果から除外されます。 SQLでは、これは そして ブール演算子.
差
DIFFERENCEは「マイナス」および表記法では、マイナス記号(「-」)で表されます。 DIFFERENCEを実装するにはいくつかの方法があります。ブール値を含めることで作成できます ない 選択基準に含まれ、また、 マイナス 演算子の後にサブクエリが続く.
分割
DIVIDEは、PRODUCTと同様、実用的なアプリケーションがほとんどない珍しい操作です。 Coddは、DIVIDEをリレーショナルシステムとそのクエリツールの酸性テストと見なしていました。そのため、すべてのSQL実装には、「リレーショナル」というタイトルの資格を得るためだけにこの機能が含まれています。 DIVIDEの実装には、一連のサブクエリが必要です。 マイナス Oracle SQL * Plusおよび を除く SQL ServerやPostgreSQLなどの他のSQL実装の演算子.
ブール演算子
ジョージブールは1864年に亡くなった英国の数学者でした。彼はブール代数を発明しました。ブール代数は、20世紀後半に情報学とリレーショナルデータベースの分野が出現するまで実用的ではありませんでした。ブール代数はSQLの操作の中心です。ブール論理を使用しない限り、最も基本的なSQLクエリのみを記述できます。ブールロジックは、すべての検索エンジンも支えています。 SQLの主要なブール演算子は次のとおりです。
- そして
- または
- ない
あなたが知る必要があるもう一つの風変わりなビクトリア朝のブリットは、オーガスタス・デ・モーガンです。彼はブール集合論の変換に関する観察結果を思い付きました。これについては、すべてのSQLプログラマーが注意する必要があります。これは、NOTとANDおよびORの動作を変更できることです。短いバージョンでは、意図しない結果を避けるために、ステートメントで括弧を使用する方法に注意する必要があるということです。そのため、「and」と「or」もSQLの重要なブール演算子と見なす必要があります。.
そして
そして、実装します 交差 集合論で。その複合条件の1つだけではなく、2つの要件のみに一致するデータベースからレコードを取得する場合は、ANDを使用する必要があります。たとえば、シードビジネスを実行し、データベースにすべてのシードとその属性を格納するテーブルが含まれている場合があります。顧客は電話をかけ、黄色のベゴニアだけを望んでいます。だから、あなたのデータベースを検索します 種=「ベゴニア」AND色=「黄色」 適切なシードカタログを取得するには.
または
ORは、2つのセットのすべてのメンバーを提供します。これは、セット理論におけるUNIONです。したがって、シードデータベースで、クエリを実行した場合: 種=「ベゴニア」OR色=「黄色」, 黄色いバラ、黄色いベゴニア、ピンク色のベゴニア、黄色い水仙などの結果が得られます。この例では、黄色のベゴニアが2回修飾されます。リレーショナル理論では、1つのレコードのみが返される必要があります。幸いなことに、SQLには修飾子が含まれています 区別する, を入力して SELECT DISTINCT *花の種=「ベゴニア」または色=「黄色」, 黄色のベゴニアの記録は1回だけ表示されます.
ない
NOTは簡単に理解できます。次のステートメントが生成する結果は除外されます:AND NOT、OR NOT。実際には、クエリで「OR NOT」を使用することはほとんどありません。あなたの種の顧客が黄色以外のベゴニアの色を望んだら、使用します 種=「ベゴニア」AND色=「黄色」 提供する製品を選択する.
ブラケット
デモーガンの法則によると:
「選言の否定は否定の結合です。そして、接続詞の否定は否定の分離です」.
平易な英語では、ANDがORに、またはその逆に変換されるのを防ぐためにNOTも含める場合は、SQLステートメントでブラケットを慎重に使用してください。ブラケット条件を一緒にすると、選択基準を短くすることもできます。例えば, NOT(種=「ベゴニア」AND色=「黄色」) と同じです NOT種=「ベゴニア」またはNOT色=「黄色」.
レコードの抽出
異なるSQL実装は異なる構文を使用しますが、このガイドではOracleのSQL * Plusに従います。 SQLデータ選択の基本構造は次のとおりです。
選択する
から
ました。彼の名前は、ブール演算子の1つである「NOT」演算子の略称として使用されます。SQLの「NOT」演算子は、条件を反転させるために使用されます。例えば、「NOT」演算子を使用して、ある条件が満たされていない場合にレコードを選択することができます。ブール演算子は、SQLの基本的な構成要素であり、SQLを理解するためには、これらの演算子を理解することが重要です。