ノートは、実際のプロジェクトの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;