SQLデータの整合性とマルチテーブルクエリとサブクエリ

データの整合性

1.データの整合性とは何ですか

データベースにユーザが入力したデータの保存が正しいことを確認してください。

 

データの整合性を追加する方法2

あなたがテーブルを作成するときにテーブルに制約を追加します。

 

3.整合性カテゴリ

エンティティ整合性、ドメインの整合性、参照整合性

 

エンティティ整合性

1.エンティティ整合性とは何ですか

エンティティに代わってテーブルの行(レコード)(エンティティ)

 

2.実体整合性の役割

識別データの各列は繰り返しません。行レベルの制約

 

3.制約タイプ

主キー制約(主キー)

唯一の制約(ユニーク)

自動成長列(AUTO_INCREMENT)

 

 

主キー制約

特徴:各テーブルには主キーを持っています。データだけでは、ヌルではありません

道の追加

TABLEテーブル名(フィールドデータタイプ1主キー、フィールドのデータタイプ2)を作成します。

TABLEテーブル名(フィールド1のデータ・タイプ、フィールド2データ型、主キー(主キーフィールドを設定する))を作成します。

TABLEテーブル名(フィールド1のデータ・タイプ、フィールド2データ型、主キー(主キー2の主キー))を作成します。

 

主キー

同時に同じデータを持つ2つのフィールド、唯一の主キー制約違反。

 

1.テーブルを作成します

2.主キーを追加し、テーブルを変更するために行きます

TABLEの学生がCONSTRAINT PRIMARY KEY(id)を追加ALTER。

 

唯一の制約

特徴:列が繰り返すことはできません指定されたデータは、nullにすることができ

フォーマット

TABLEテーブル名(1フィールド名フィールドデータタイプデータタイプUNIQUE 2)を作成します。

 

自動成長コラム

特徴:自動データは、データが削除された場合でも、列の成長を指定、または削除シリアル番号をメモし続けます

フォーマット

TABLEテーブル名(1フィールド名データ型PRIMARY KEY AUTO_INCREMENT、固有のデータ・タイプ・フィールド2)を作成します。

 

 

ドメインの整合性

使用

そのようなものがないので、このセルデータは、正しい列の他のセルの比較制限

ドメインは、現在のセルを表し、

 

ドメイン整合性制約

データ型:数値型、日付型、文字列型

 

非空制約(nullではありません)

TABLEテーブル名(1フィールド名データ型PRIMARY KEY AUTO_INCREMENT、UNIQUE NOT NULL第二のデータ・タイプ・フィールド)を作成します。

 

デフォルト値の制約(デフォルト)

TABLEテーブル名を作成する(1フィールド名データ型PRIMARY KEY AUTO_INCREMENT、第二のデータ・タイプ・フィールドUNIQUE NOT NULLデフォルト「M」)。

挿入された場合、の値はデフォルト値に直接あります

 

 

参照整合性

1.参照整合性とは何ですか

これは、テーブルとテーブルの間の対応をいいます

通常、2つのテーブル間の一次結合で、外部キー関係、2で提供されるか、または達成するためにトリガテーブルを書き込みます。

二つのテーブルが、挿入、更新、削除の処理で、データの整合性を参照するために対応している、システムは、テーブルに対応するように変更され、別のテーブルはそれによって、いくつかの誤ったデータの操作を防止する、比較しました。

2.注意

データベース内のプライマリキーと外部キーがタイプと一致していなければなりません。

二つのテーブルはInnoDBのを入力する必要がある場合

参照整合性を設定した後、外部キーの内容が、内容は主キーの間でなければなりません

 

テーブルの主キーとしてフィールドベースの主キーテーブルを設けており、提供されます

TABLE学生をCREATE(SID INT PRIMARYキー、名前のVARCHAR(50)NOT NULL、セックスはvarchar(10)デフォルトの '男');

 

あなたがテーブルを作成し、外部キー、子テーブルの外部キー

TABLEスコアCREATE(SIDのINTを、DOUBLEスコア、制約は、FOREIGN KEY(SID)REFERENCES学生(SID)をfk_stu_score_sid)。

 

テーブル間のリレーションシップ

ワン:一夫一婦

多くの関係:人は多くの車を持つことができ、個人が所有する車両へのアクセスのためのすべての要求。

- 人表CREATE TABLE者(ID int型主キー、NOT NULL、名前VARCHAR(50)、年齢int型、セックスCHAR(1));

 

- 車の表表車(CID INT主キー、CNAME VARCHAR(50)、カラーはvarchar(25)、PIDのINT、CONSTRAINT fk_Person FOREIGN KEY(PID)を参照人(ID))を作成します。

 

多くの関係:

学生の入学、学生は多くのコース、より多くの学生が選択するための各コースを有することができます。

生徒は複数の教師を持つことができ、そして教師が複数の生徒を持つことができます

1.テーブルの先生を作成します。

TABLE教師をCREATE(TID INT PRIMARY KEY AUTO_INCREMENT、名前VARCHAR(50)、年齢int型、性別はchar(1)DEFAULT '男');

2.学生のテーブルを作成します。

TABLE学生をCREATE(SID INT PRIMARY KEY AUTO_INCREMENT、名前VARCHAR(50)NOT NULLと、年齢int型、性別CHAR(1)DEFAULT '男');

3.生徒と教師のテーブルを作成します。

表tea_stu_rel(TIDのINT、SID INT)を作成します。

4.外部キーを追加します。

CONSTRAINTを追加tea_stu_rel表をALTER FOREIGN KEY(TID)は、教師(TID)をPEFERENCES fk_tid。CONSTRAINTを追加tea_stu_rel表をALTER FOREIGN KEY(SID)が学生(ID)をPEFERENCES fk_sid。

 

なぜ、テーブルを分割?冗長データの多くを避けます

 

 

マルチテーブルクエリ

組み合わせた結果セット

1.結合された結果セットとは何ですか

結合された結果セットには、2つの選択ステートメントの結果をマージ照会することです

 

2.二つの方法の結果セットをマージ

繰り返し除去記録UNIONのマージ

UNION組み合わせ重複レコードALLが除去されません

フォーマット:

表1 UNION SELECT * FROM表2 SELECT * FROM。

表1 UNION ALL SELECT * FROM表2 SELECT * FROM。

1.テーブルを作成します。

表A(名前はvarchar(10)、スコアint)を作成します。表B(名前はvarchar(10)、スコアINT)を作成します。VALUES( 'A'、10)、( 'B'、20)、( 'C'、30)。INSERT INTO。B値( 'A'、10)、( 'B'、20)。INSERT INTO( 'D'、40)。

BからA UNION SELECT * FROM 2.UNIONSELECT *。  

 

 

 

BからA UNION ALL SELECT * FROM 3.UNION ALLSELECT *;

 

 

 

注意事項

両者の組み合わせの結果:列の数、列は同じタイプでなければなりません。

 

クエリに参加

1.接続クエリとは何ですか

クエリは、テーブル全体に呼び出すことができる、あなたは複数のテーブルのクエリを関連付ける必要があります

 

2.デカルトセットとは何ですか

{A、B}、B = {0,1,2}に設定仮説集合A =

二組のデカルト積{(0)、(1)、(2)、(B、0)、(B、1)、(B、2)}。

これは、複数組のに拡張することができます

一方、2つのテーブルを照会し、その結果のデカルトセットがあります

 

テーブルの別名クエリので、

学生STU SELECT * FROM、皮下得点。

 

3.マルチテーブル共同調査は、どのデータが正しいことを確認し

クエリはSTU ST FROM主キーと外部キー一貫したSELECT *は、SCを獲得すべきときにWHERE st.id = sc.sid。 

 

 

 サブテーブルのうち、参照データのうち、プライマリ・テーブルデータ

原則

プログレッシブ判断、ないに等しい、等しくない全体を残します

 

 

 接続に応じて分類

エン

まず、同等の接続

2つだけの同時表示テーブルのID番号(値)

STU ST INNER SELECT * FROM st.id = sc.sid ONスコアSCを登録しよう。

複数のプライマリ外部キーに関連付けられた表のチェック制約は同じですが、文言を変更します。

ON本体のみ、外部キーのライトバック

直接の背後にある書き込みの条件がある場合

SELECT st.name、sc.score、st.id = sc.sid WHEREスコア> = 70をON STU ST INNER JOINスコアSCからsc.km。

マルチテーブル合同捜査と書くための条件と直接があります

 

第二に、マルチテーブル・ジョイン

学生のスコア、チャートの確立

 

 

 

99接合方法を用いて

SELECT st.name、c.name、STU ST FROM sc.scoreは、SCスコア、CコースWHERE st.id = sc.sid AND sc.cid = c.cid。

インラインクエリを使用します

SELECT st.name、c.name、st.id = sc.sidインナーsc.cid = c.cidのコースcをJOIN ON STU ST INNER JOINスコアSCからsc.name。

 

第三に、非同等の接続

例表

 

 

すべての従業員の名前、給与、部門の名前や賃金の水準を照会

1.すべての従業員、賃金の名前を照会

SELECT ENAME、EMP FROM給与。

 

 

 

 

2.クエリのすべての従業員、賃金とすべての部門の名前 - SELECT e.ename、e.salary、EMP Eからd.dname、DEPTのD e.deptno = d.deptno; e.nameを選択、e.salaru、 EMP Eからd.dnameはe.deptno = d.deptno ON DEPT DをJOIN。

 

 

 

3.クエリのすべての従業員、賃金や賃金水準の名前と部署

SELECT e.ename、e.salary、d.dname、EMP Eからg.gradeはe.deptno = d.deptno g.lowSalary AND g.highSalary BETWEEN e.salary ON SALGRADE gをJOIN ON DEPT DをJOIN。

 

第四に、外部接続

1.左外側コネクタ(左のコネクタ)

データテーブルの左側の間で同じ存在しない場合は、チェックアウトする同じ2つのデータテーブルの条件を満たし、左側のデータテーブルは、チェックアウトの間でもあります。

左の上のすべてのデータテーブルの中で、右が中身の状態を知るだけで、それらを見ました

 

 

コネクタを使用する場合は、7週間は、何のスコア、欠席をチェックアウトしません。チェックアウトする生徒のテストの点数を超えるすべてのテスト。

SELECT st.name、sc.score、STU ST FROM sc.km、スコアSC WHERE st.id = sc.sid

 SELECT st.name、sc.score、STインナーst.id = sc.sid ONスコアSCをJOIN STU FROM sc.km。

 

 

 

すべての学生や生徒のテストの点数のクエリに参加し、左を使用します

SELECT st.name、sc.score、STU ST LEFT OUTER FROM sc.kmはst.id = sc.sid ONスコアSCをJOIN。

 

 

 

すべてのデータは、データのみの条件を満たすように、右の表を見つけたの識別されます間で左のテーブルに接続したままです

あなたは省略し、外側を書き込むことはできません

クエリは、2つの表は、主に外部キー制約を確立する必要がないかもしれません

 

右外側コネクタ(右接続)2。

右の接続の間ですべてのデータは、データの条件を満たしているだけを見つける、左表の右を見つけるだろう

SELECT st.name、sc.score、STがRIGHT st.id = sc.sid ONスコアSCをJOIN STU FROM sc.km。

 

すべての左の表の間で検出されたすべての権利のデータテーブルにのみ記録の条件を見つけます

表を参照する視点に立ち、左サイドを使用するすべての間でのコンテンツの接続テーブルを置くの基準を満たすために見つけ権利を発見しました。

右の接続を使用して、すべてを見つけるの間で、右側にデータテーブルを置きます。左は条件を満たすことがわかりました。

 

第五に、自然な接続

参加問い合わせは、我々は通常、それを削除するには、主に外部キー関係式を使用し、不要なデカルトセットを生成します。

自然の接続では、プライマリ外部キー方程式を与えることなく、自動的にこの方程式を見つけるだろう

それは条件を記述する必要はありません

 

請求

二つの同一の条件として、テーブル名と列の列接続タイプ

同じ列を削除します。

スコアを登録しようSTU NATURAL SELECT * FROM。

 

 

サブクエリ

1.サブクエリとは何ですか

SELECT文は、別の完全なselect文が含まれています。

または二つ以上のSELECT、そのサブクエリです。

 

2.サブクエリの位置が表示され

ここ後、SELECTクエリは、別の選択の値の条件と結果

後、テーブルとして新しい結果をチェックします。

 

例表

 

 

使用

同じ部門のスタッフの人と項羽クエリ

1.まず、どこの部署番号項羽を見つけます

ENAME = EMP FROM DEPTNO SELECT '项羽';

 

2.再度、同じ部門の従業員の数を確認することにより

SELECT ENAME、depatno =はEMP FROM depatno(ENAME = EMP FROM DEPTNO SELECT '项羽')。

第1条のチェックアウト条件文の2日目の結果

 

Yaojinの従業員よりも賃金が高いクエリ

1. Yaojinの賃金を識別

WHERE ENAME = 'Yaojin' EMP FROM SELECT給与、

2. ISOLATED結果の値よりも大きい従業員レコードの名前をチェックアウト行きます

SELECT ENAME、給料が> EMP FROM給与(ENAME = EMP FROM給与を選択 '程咬金')。

 

すべてのために支払った30以上の部門の従業員情報

1.まず、30日の最高支払わ男性部門を見つけます

DEPTNO = 30 EMP FROM MAX(給与)を選択します。

2.その後、テーブル全体が、人間の最高賃金部門30以上である問い合わせます

SELECT ENAME、EMP FROM給与給与>(WHERE DEPTNO = 30 EMP FROM MAX(給与)を選択)。

 

クエリ雇用と賃金と妲己同じ従業員情報

1. Daが特定および賃金するために取り組んできました

「己妲」ENAME = EMPからジョブ、給与を選択します。

仕事に行くための条件として、クエリの結果と同じ賃金

SELECT ENAME、仕事、(仕事、給与)のemp FROM給与IN(ジョブを選択し、enname = EMP FROM給与 '妲己');

二つの条件、INを使用しているので決意

 

二つ以上の従業員情報の直接報告があります

1.グループのすべての優れた数字

SELECT MGR、MGR BY EMPグループからGROUP_CONCAT(MGR)。

2. 2以上を特定し、より大きい2は、2人の部下を示します

SELECT MGR、MGR HAVING COUNT(*)でEMPグループからGROUP_CONCAT(MGR)> = 2。

3.ときバーの従業員番号のようなクエリ結果の行

EMPNO INがEMP FROM SELECT ENAME(MGR HAVING COUNT(BY EMPグループからMGRをSELECT *)> = 2)

 

名前7788への従業員のためのクエリの従業員番号、スタッフの給与、部門名、部署アドレス

e.name、e.salary、d.dname、EMP Eからd.local、DEPTのD e.deptno = d.deptno AND EMPNO = 7788を選択します。

 

接続以来

従業員番号、名前、番号、および管理者の管理者名を求めて7369

EMPNO =は(EMPNO = 7369 EMP FROM MGR選択)EMP SELECT * FROM。

この方法の上にのみ管理者の名前をチェックアウトすることができます

接続以来:あなた自身、某を接続

EMP E1、E2 EMP WHERE e1.mgr = e2.empno SELECT * FROM AND e1.empno = 7369;

 

旧9人の学校コミュニティのメンバーが作成します

おすすめ

転載: www.cnblogs.com/ljxt/p/11608843.html