実験 3 データの更新と表示
1つ。目的
1.データベースの関連特性について理解を深めます。
2.さまざまな拘束力のある理解。
3.データベース内のデータを更新する方法を学びます。
4.ビューの作成とクエリの方法を学びます。
2. 実験内容
作成した各テーブルに適切なデータを入力し、データの挿入、削除、変更を練習します データやデータを入力する際には、キーコード制約、外部コード制約、非null制約、一意制約、値制約などの制約の検出に注意してください。削除と変更を教室での指導と組み合わせて、その意味を理解します。同時に、ビューの作成、クエリ、削除を練習します。
1. 新しいデータを S テーブルに挿入します。
2. サプライヤ S3 は、350 個のパーツ P2 を J2 プロジェクトに供給し、そのデータを対応するテーブルに挿入します。
3. J1プロジェクトの名前を建設エンジニアリンググループに変更し、都市を済南に変更します。
4. 赤い部分をすべて青に変更します。
5. S2 から J1 を供給する部品 P3 が部品 P4 に変更されます。
6. プロジェクトJ3の情報をすべて削除します
7. S2 のレコードをサプライヤー関係から削除し、対応するレコードをサプライヤー関係から削除します。
8. SQL コマンドとグラフィカル インターフェイス メソッドを使用して、サプライヤー番号 (SNO)、部品番号 (PNO)、および供給数量 (QTY) を含む、建設エンジニアリング グループの供給状況ビューを確立します。
9. 上記のビューに基づいて、建設エンジニアリング グループ プロジェクトで使用されるさまざまな部品コードとその数量を照会します。
10. SQL コマンドとグラフィカル インターフェイス メソッドを使用して、サプライヤー名 (SName)、部品名 (PName)、プロジェクト名 (Jname)、および供給数量 (QTY) を含む建設エンジニアリング グループの供給状況ビューを作成します。
11. 上記のビューについて、建設エンジニアリング グループ プロジェクトで使用されるさまざまな部品の名前と数量をクエリします。
12.給与テーブルがあり、テーブル構造は次の表に示すとおりです。
給与番号 |
賃金の仕事 |
給料表の給料 |
ジョブサプリメント |
出席 |
医学 |
祝事部 |
その他のサプリメント |
家賃 |
水道代 |
電気料金請求書 |
準備基金 |
所得税 |
元の給与データを含み、支払われる賃金の額と実際の賃金を反映するビューを作成します。
3. 実験プロセスとコード
- 新しいデータを S テーブルに挿入します。
--用Sql语句插入数据:'S6','智造',10,'济南'
INSERT
INTO s
VALUES('S6','智造',10,'济南');
--或
INSERT
INTO s(SNO,SNAME,STATUS,CITY)
VALUES('S6','智造',10,'济南');
- サプライヤ S3 は、J2 プロジェクトに 350 個の部品 P2 を供給します。このデータを対応するテーブルに挿入します。
INSERT
INTO spj
VALUES('S3','P2','J2',350);
--或
INSERT
INTO spj(SNO,PNO,JNO,QTY)
VALUES('S3','P2','J2',350);
- J1プロジェクトの名前を建設エンジニアリンググループに変更し、都市を済南に変更
UPDATE j
SET JNAME='建工集团',CITY='济南'
WHERE jno='J1';
- 赤い部分をすべて青に変更します
UPDATE p
SET color='蓝'
WHERE color='红';
- S2 から J1 を供給する部品 P3 が部品 P4 に変更されます。
UPDATE spj
SET PNO='P4'
WHERE SNO='S2' AND JNO='J1'AND PNO='P3';
- プロジェクトJ3の情報をすべて削除します
--(1) SQL语句直接删除(将外键约束删除时由RESTRICT改为CASCADE,即实现级联删除)
DELETE
FROM j
WHERE JNO='J3'
--(2) 创建表时,创建级联操作
-- SPJ表
CREATE TABLE SPJ (
SNO CHAR (2),
PNO CHAR (2),
JNO CHAR (7),
QTY INT,
PRIMARY KEY (SNO, PNO, JNO),
FOREIGN KEY (SNO) REFERENCES s (SNO)ON DELETE CASCADE,
FOREIGN KEY (PNO) REFERENCES p (PNO)ON DELETE CASCADE,
FOREIGN KEY (JNO) REFERENCES j (JNO)ON DELETE CASCADE
);
--(3) 用触发器实现级联删除
--创建触发器deletej_spj:
CREATE TRIGGER deletej_spj
AFTER
DELETE on spj
for each ROW
BEGIN
DELETE FROM j WHERE JNO=OLD.JNO;
END;
--再运行删除语句:
DELETE from j where JNO='J3';
--删除触发器的语句是:
drop TRIGGER deletej_spj;
--(4) 也可以用两个SQL语句进行删除,先删除spj表中的,再删除j表中的
DELETE from spj where JNO='J3';
DELETE from j where JNO='J3';
- S2 のレコードをサプライヤー関係から削除し、対応するレコードを供給ステータス関係から削除します。
--(1) SQL语句直接删除(将外键约束删除时由RESTRICT改为CASCADE,即实现级联删除)
DELETE
FROM s
WHERE SNO='S2';
--(2) 创建表时,创建级联操作
--见上一题
--(3) 用触发器实现级联删除
--创建触发器deletes_spj:
CREATE TRIGGER deletes_spj
AFTER
DELETE on spj
for each ROW
BEGIN
DELETE FROM s WHERE SNO=OLD.SNO;
END;
--再运行删除语句:
DELETE from s where SNO='S2';
--删除触发器的语句是:
drop TRIGGER deletes_spj;
--(4) 也可以用两个SQL语句进行删除,先删除spj表中的,再删除j表中的
DELETE from spj where SNO='S2';
DELETE from s where SNO='S2';
- SQL コマンドとグラフィカル インターフェイス メソッドを使用して、サプライヤー番号 (SNO)、部品番号 (PNO)、供給数量 (QTY) を含む建設エンジニアリング グループの供給状況ビューを作成します。
SQL ステートメント:
--SQL语句:
CREATE VIEW spq
AS
SELECT SNO,PNO,QTY
FROM spj
WHERE JNO in(SELECT JNO FROM j WHERE JNAME='建工集团');
グラフィカル インターフェイス: [表示] - 右クリック - [新しいビュー]
- 上のビューについては、Construction Engineering Group プロジェクトで使用されているさまざまな部品コードとその数量を照会します。
SELECT PNO,SUM(QTY)
FROM spq
GROUP BY PNO;
- SQL コマンドとグラフィカル インターフェイス メソッドを使用して、サプライヤー名 (SName)、部品名 (PName)、プロジェクト名 (Jname)、および供給数量 (QTY) を含む、建設エンジニアリング グループの供給状況ビューを作成します。
SQL ステートメント:
--SQL语句:
CREATE VIEW spjq
AS
SELECT SNAME,PNAME,JNAME,QTY
FROM s,p,j,spj
WHERE s.sno=spj.sno AND p.pno=spj.pno AND j.jno=spj.jno AND jname='建工集团';
グラフィックインターフェイス:
- 上記のビューについて、建設エンジニアリング グループ プロジェクトで使用されるさまざまな部品の名前と数量をクエリします。
SELECT PNAME,SUM(QTY)
FROM spjq
GROUP BY PNAME;
- 給与テーブルがあり、テーブル構造は次の表に示すとおりです。
給与番号 |
賃金の仕事 |
給料表の給料 |
ジョブサプリメント |
出席 |
医学 |
祝事部 |
その他のサプリメント |
家賃 |
水道代 |
電気料金請求書 |
準備基金 |
所得税 |
元の給与データを含み、支払われる賃金の額と実際の賃金を反映するビューを作成します。
まず、従業員という名前の給与テーブルを作成します。
--先建一个工资表,我给它命名为employee,SQL语句如下:
CREATE TABLE `employee` (
`ID` char(10) COMMENT '工资号',
`BASE` double COMMENT '岗位工资',
`GRADE` double COMMENT '薪级工资',
`ZB` double COMMENT '职补',
`KQ` double COMMENT '考勤',
`YL` double COMMENT '医疗',
`ZJB` double COMMENT '驻济补',
`QTB` double COMMENT '其它补',
`FZ` double COMMENT '房租',
`SF` double COMMENT '水费',
`DF` double COMMENT '电费',
`GJJ` double COMMENT '公积金',
`SDS` double COMMENT '所得税',
PRIMARY KEY (`ID`)
)
-- COMMENT是注释的意思
私はそれにいくつかのデータを書きました:
SQL ステートメントを使用してビューを作成します。
CREATE VIEW `员工工资条` (`工资号`,`岗位工资`,`薪级工资`,`职补`,`考勤`,
`医疗`,`驻济补`,`其他补`,`房租`,`水费`,`电费`,
`公积金`,`所得税`,`应付工资`,`实发工资`)
AS SELECT ID,BASE,GRADE,ZB,KQ,YL,ZJB,QTB,FZ,SF,DF,GJJ,SDS,
(BASE+GRADE+ZB+KQ+YL+ZJB+QTB),
((BASE+GRADE+ZB+KQ+YL+ZJB+QTB)-(FZ+SF+DF+GJJ+SDS))
FROM employee
GROUP BY ID;
/*
这道题的难点主要是应发工资和实发工资的计算问题。
使用公式:
应发工资=岗位工资+薪级工资+职补+考勤+医疗+驻济补+其他补
实发工资=应发工资-房租-水费-电费-公积金-所得税
*/
ビュー: