[データベース]システム設計の標準的なリレーショナルデータベース言語SQL(3)

ノートは、実際のプロジェクトのSQLの知識ポイントが、レコードにはないもののあまり、ここで突くともOKであるかを理解しようとする前に。
[データベース]、システム設計標準リレーショナルデータベース言語SQL(1)
[データベース]システム設計標準リレーショナルデータベース言語SQL(2)

データ更新

挿入データ

挿入タプル

新しいタプルを指定したテーブルに挿入されています。

INSERT 
INTO <表名> [(<属性列1>[,<属性列2 >)] VALUES (<常量1> [,<常量2>]); 

EX:新しい学生のタプル(学生ID:201215128;名:陳ドン;性別:男性;行:IS;年齢:18歳)は、Studentテーブルに挿入されています。

INSERT INTO Student (Sno, Sname, Ssex, Sdept, Sage) 
VALUES ('201215128','陈冬','男','IS',18); 

EX:Zhangcheng MinはStudentテーブルに挿入された情報の学生。

NSERT INTO  Student 
VALUES ('201215126','张成民','男’,18,'CS'); 

EX:登録レコードを挿入する( '201215128'、 '1')。

# 关系数据库管理系统将在新插入记录的Grade列上自动地赋空值
INSERT INTO SC(Sno, Cno)
VALUES ('201215128', '1'); 
# 或者
INSERT INTO SC 		
VALUES ('201215128', '1', NULL); 

挿入結果

INSERT INTO <表名> [(<属性列1> [,<属性列2>)]

EX:各部門について、学生の平均年齢を見つけて、データベースに格納された結果
の最初のステップ:テーブルを構築するために

CREATE TABLE Dept_age
(Sdept CHAR(15), /*系名*/
Avg_age SMALLINT); /*学生平均年龄*/

ステップ2:データを挿入

INSERT INTO Dept_age(Sdept, Avg_age)
	SELECT Sdept, AVG(Sage)
	FROM Student
	GROUP BY Sdept;

修正データ

UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>][WHERE <条件>];

値のタプルを変更します。

例:学生の年齢は201 215 121 22歳に変更されました

UPDATE Student
SET Sage=22
WHERE Sno= '201215121';

例:すべての学生は、1年間の年齢が増加します。

UPDATE Student
SET Sage= Sage+1;

例:コンピュータサイエンス学部すべての学生の成績はゼロ。

UPDATE SC
SET Grade=0
WHERE Sno IN
(SELETE Sno
FROM Student
WHERE Sdept= 'CS');

データを削除

# 删除指定表中满足WHERE子句条件的元组
DELETE FROM <表名>
# WHERE子句指定要删除的元组,无该子句将会删除表中的全部元组
[WHERE <条件>];

1組の値を削除します。

例:201 215 128の削除学校の生徒のレコード番号。

DELETE FROM Student
WHERE Sno=201215128';

例:コンピュータサイエンス学部は、すべての学生の削除レコードを選択科目。

削除複数値タプル

例:
学生の入学のすべてのレコードを削除します。

DELETE FROM SC;

ストラップクエリdelete文

DELETE
FROM SC
WHERE Sno IN
(SELETE Sno
FROM Student
WHERE Sdept= 'CS') ;

ヌル値の処理

ヌル値を生成します

  • NULL値は、値またはで「いいえ」または「無意味」を「知らない」です。

  • 一般的に次のような状況があります。

    • プロパティの値を持つ必要がありますが、現在は特定の値を知りません
    • このプロパティは、値を持つべきではありません
    • 何らかの理由で、埋めるために簡単ではありません
  • ヌルは非常に特別な値であり、不確実性が含まれています。
    特別な問題をもたらす関係演算子の特別な処理を必要とします。

  • ヌル値が実際のニーズを持って生成します。
    選択科目、選択科目の農産物のテーブルの学生が、何もありません。このときの結果セクションが空の値であるが、それは同じではなく、0(0でありません)

例:タプルテーブルを挿入するSCは、学生の数が「201215126」で、コース番号は、結果が空で、「1」です。

INSERT INTO SC(Sno, Cno, Grade)
VALUES('201215126', '1',NULL); /*该学生还没有考试成绩,取空值*/
# 或者
INSERT INTO SC(Sno, Cno)
VALUES(' 201215126', '1'); /*没有赋值的属性,其值为空值*/

例:Studentテーブルの行「201 215 200」のための高校生の数は、学生はNULL値に変更属しています。

UPDATE Student
SET Sdept = NULL
WHERE Sno='201215200';

分析はnull

、プロパティの値がnullであるかどうかを決定するとIS NULL、またはIS NOT NULL表現。
例:性別や年齢情報の記録が欠落して識別します。

SELECT *
FROM Student
WHERE Ssex IS NULL OR Sage IS NULL;

NULL制約

属性定義(またはドメインの定義)で

  • そこNOT NULL制約は、NULL値を取ることができません
  • 追加しましたUNIQUE制約プロパティはnull値を取ることができません
  • 主キー属性はnullでない値

ヌル値演算、及び論理演算は、比較します

  • NULL値と(別の空の値を含む)他の値演算結果がnullであります
  • ヌル値と(別の空の値を含む)他の値比較演算の結果ですUNKNOWN
  • そこUNKNOWN後、従来のバイナリ(TRUE、)FALSE論理は三値論理に展開され

ここに画像を挿入説明

例:第1選択科目を見つけることができなかった学生。

SELECT Sno
FROM SC
WHERE Grade < 60 AND Cno='1';

クエリ結果は、学生が自分のためにグレード値の欠席は含まれていませんnull

例:失敗の学生は選択科目第1及び欠席の生徒を選択します。

SELECT Sno
FROM SC
WHERE Cno='1' AND (Grade<60 OR Grade IS NULL);

集計関数:MAX、MIN、AVG、COUNTは、SUMは、COUNT(*)を除いて、ヌルに遭遇し、nullが離れて非ヌル値をプロセスをスキップします。

ビュー

景色を眺めることができます

  • 仮想テーブルは、表1つまたはいくつかのベーステーブル(またはビュー)から誘導されます
  • 唯一のビュー定義を保管し、ビューに対応するデータを保存しません
  • ビューデータからの問い合わせも変化するデータベーステーブルの変更、

ビューの定義

CREATE VIEW
<视图名> [(<列名> [,<列名>])]
AS <子查询>
[WITH CHECK OPTION];
  • 実行するためのリレーショナルデータベース管理システムCREATE VIEWのみビュー定義は、データ・ディクショナリに格納されたときに実行しない文で、SELECT声明を。
  • 最初のビューが存在するか否かを判断するクエリを考慮して、存在する場合、ビューのデータ辞書定義から削除され、組み合わされたサブクエリおよびクエリビューの定義は、ベーステーブルに対して同等のクエリに変換されます。

ここに画像を挿入説明
例:情報ベースの学生のビューの設立。

CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept= 'IS';

例:情報ベースの学生のビューの確立とが要件を変更し、まだ学生がこの条件のインサートを表示することを確実にするための情報を満たしています。

# IS_Student1视图是一个行列子集视图
CREATE VIEW IS_Student1
AS
SELECT Sno, Sname, Sage
FROM Student
WHERE Sdept= 'IS'
WITH CHECK OPTION;

テーブルに基づいて、複数のビュー

例:学生情報システム(番号、名前、結果を含む)を確立番号1選択科目図。

CREATE VIEW IS_S1(Sno, Sname, Grade)
AS
SELECT Student.Sno, Sname, Grade
FROM Student, SC
WHERE Sdept = 'IS' AND
	Student.Sno = SC.Sno AND
	SC.Cno = '1';

ビュービューベース

例:情報系科目と90点以上の点で第1生徒の成績の確立。

CREATE VIEW IS_S2
AS
SELECT Sno, Sname, Grade
FROM IS_S1
WHERE Grade >= 90;

表現の景色を

例:反射の年に生まれた学生のビューの定義。

CREATE VIEW BT_S(Sno, Sname, Sbirth)
AS
SELECT Sno, Sname, 2014-Sage
FROM Student;

グループビュー

例:学ぶ学生の数と平均スコアはビューとして定義されています

CREATE VIEW S_G(Sno,Gavg)
AS
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno;

[削除]を表示

DROP VIEW <视图名>[CASCADE];
  • この文は、データ・ディクショナリから指定されたビュー定義を削除します
  • ビューは、他のビューをエクスポートする場合、使用CASCADEビューと一緒に、カスケードdelete文を、そこから派生したすべてのビューを削除するには
  • ベーステーブルを削除し、すべての定義されたビューは、ベーステーブルから派生し、明示的に使用する必要がありますDROP VIEW削除するために文を

例:ビューBT_SとIS_S1を削除します。

DROP VIEW BT_S; /*成功执行*/
DROP VIEW IS_S1; /*拒绝执行*/

# 要删除IS_S1,需使用级联删除:
DROP VIEW IS_S1 CASCADE;

クエリビュー

ユーザー角:クエリテーブルビュー実質的に同じクエリ
クエリのリレーショナルデータベース管理システムの実装ビュー

  • 消化ビュー(表示解像度)
  • 妥当性チェック
  • 基本的なテーブルの等価のクエリに変換
  • 実行補正問い合わせた後、

例:情報ビューで20歳の学生よりも若い学生を特定します。

SELECT Sno, Sage
FROM IS_Student
WHERE Sage<20;

消化変換した後、ビューのクエリは次のとおりです。

SELECT Sno, Sage
FROM Student
WHERE Sdept= 'IS' AND Sage<20;

例:クエリ第1選択科目学生情報。

SELECT IS_Student.Sno, Sname
FROM IS_Student, SC
WHERE IS_Student.Sno = SC.Sno AND SC.Cno = '1';

例:クエリGPA学生数とS_Gビューで90点以上の平均スコア。
次のようにS_Gビューが定義されました:

CREATE VIEW S_G(Sno,Gavg)
AS
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno;

解決策1:

# 视图查询
SELECT *
FROM S_G
WHERE Gavg>=90;

対処方法2:

# 视图消解法
# 错误:
SELECT Sno,AVG(Grade)
FROM SC
WHERE AVG(Grade)>=90
GROUP BY Sno;
# 正确:
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno
HAVING AVG(Grade)>=90;

解決策3:

SELECT *
FROM (SELECT Sno,AVG(Grade) Gavg
FROM SC
GROUP BY Sno) AS S_G WHERE Gavg>=90;

更新ビュー

例:情報ビューIS_Student学校の学生番号「201 215 125」の生徒の名前が「劉チェン」を読んで

UPDATE IS_Student
SET Sname= '刘辰'
WHERE Sno= '201215125';

# 转换后的语句
UPDATE Student
SET Sname= '刘辰'
WHERE Sno= '201215125' AND Sdept= 'IS';

例:レコードの学生に新しい学生情報システムは「201 215 129」として学生の数は、名前が「趙」、20歳歳IS_Studentを表示、挿入。

INSERT
INTO IS_Student
VALUES('201215129','赵新',20);
# 转换成对基本表的更新
INSERT
INTO Student(Sno,Sname,Sage,Sdept)
VALUES('200215129','赵新',20,'IS');
# 不同的系统处理方式不一样,MySQL会在系名处自动填入NULL或者默认值

ここに画像を挿入説明

ビューの制限を更新する:ビューの一部が更新されず、これらのビューの更新を一意に意味のある更新に対応するベーステーブルを変換することができないからです。

役割の表示

ユーザーの操作は、ビューを簡素化することができます

データはベーステーブルから直接ビューでない場合、ビューは、ユーザの操作を簡素化することができる定義します

  • 基づいて複数のテーブルを接続することによって形成された図
  • 複雑なネストされたクエリに基づく表示
  • 派生属性ビュー含みます

ビューは、ユーザーが複数の角度で同じデータを表示することができます

表示メカニズムは同じデータを見るの異なる方法で異なるユーザーは、データベースの共有のニーズに適応することができます

再構築されたデータベースが独立ロジックの度合いを提供見ます

データベースリファクタリング:

例:SX(スノ、SNAME、セージ)、SY(スノ、Ssex、Sdept):実質的に二つのテーブルに分割学生関係学生(スノ、SNAME、Ssex、セージ、Sdept) "垂直"

学生の設立を通じて見ます:

CREATE VIEW Student(Sno, Sname, Ssex, Sage, Sdept)
AS
SELECT SX.Sno, SX.Sname, SY.Ssex, SX.Sage, SY.Sdept
FROM SX,SY
WHERE SX.Sno=SY.Sno;

だから、パターン外のユーザーが同じまま、ユーザーのアプリケーションがまだビューを介してデータを見つけることができるようになること

ビューには、機密データのセキュリティ保護を提供します

各ユーザーは彼だけが見る権利を持っているデータを見ることができるように、ユーザごとに異なるビューを定義します。

明確なビューの適切な使用は、クエリを表現することができます

多くの場合、あなたはこのようなクエリを実行する必要がある「と彼はそれぞれの学生のための最高のスコアを受けたコース番号を見つけるために。」
ビューを定義することができ、それぞれの学生によって得られた最高のスコアを取得

CREATE VIEW VMGRADE
AS
SELECT Sno, MAX(Grade) Mgrade
FROM SC
GROUP BY Sno;

そして、次のクエリを使用してクエリを実行します。

SELECT SC.Sno, Cno
FROM SC, VMGRADE
WHERE SC.Sno = VMGRADE.Sno AND
SC.Grade = VMGRADE.Mgrade;
公開された170元の記事 ウォン称賛47 ビュー20000 +

おすすめ

転載: blog.csdn.net/weixin_43734095/article/details/105047143