数据库 实验三 数据库查询和数据操纵
實(shí)驗(yàn)?zāi)康?/strong>
1. 掌握各種查詢的使用方法。
2. 掌握數(shù)據(jù)操縱的使用方法。
1. 使用查詢語(yǔ)句完成以下任務(wù)(每一個(gè)查詢都要給出SQL語(yǔ)句,并且列出查詢結(jié)果)。
① 查詢與“張志國(guó)”同一班級(jí)的學(xué)生信息(使用連接查詢和子查詢方式)。
子查詢方式:
SELECT *
FROM Student
WHERE Sname!='張志國(guó)' and DeptandClass=(SELECT DeptandClass
FROM Student
WHERE Sname='張志國(guó)'
)
連接查詢:
FROM后接兩個(gè)表,取A表某字段值與B表某字段作為關(guān)聯(lián)條件
例如:
查詢“劉偉”老師所講授的課程,要求列出教師號(hào)、教師姓名和課程號(hào)。SELECT T.TNo,TN,CNo
FROM T,TC
WHERE (T.TNo = TC. TNo) AND (TN='劉偉')
連接條件(T.TNo = TC. TNo) 的比較運(yùn)算符為“=”時(shí),稱為等值連接。其他情況為非等值連接。
引用列名TNo時(shí)要加上表名前綴,這是因?yàn)閮蓚€(gè)表中的列名相同,必須用表名前綴來(lái)確切說(shuō)明所指列屬于哪個(gè)表,以避免二義性。
這里給原學(xué)生表取兩個(gè)別名,也就是變成兩張表,取對(duì)應(yīng)字段連接。
從第一個(gè)表中取學(xué)生數(shù)據(jù)的記錄,以行(一條記錄)為單位,所有符合條件的行都會(huì)被選出。
取得的所有記錄的班級(jí)一列(一個(gè)字段)要與第二個(gè)表取得記錄(在本例中全部取得)的字段相等。
為什么要用兩張表呢?
在同一表中查詢相同的記錄就需要起別名,因?yàn)楸仨氁幸粋€(gè)字段與字段比較的過(guò)程,因?yàn)椴樵儗?shí)際上是兩個(gè)記錄集合之間運(yùn)算。
SELECT Student1.*
FROM ?Student as Student1,Student as Student2?
WHERE Student2.Sname='張志國(guó)' AND Student1.DeptandClass=Student2.DeptandClass;
② 查詢比“計(jì)算機(jī)應(yīng)用基礎(chǔ)”學(xué)時(shí)多的課程信息(使用連接查詢和子查詢方式)。
子查詢方式:
SELECT *
FROM Course
WHERE STime>(SELECT STime
FROM Course
WHERE Cname='計(jì)算機(jī)應(yīng)用基礎(chǔ)'
)
連接查詢:
SELECT Course1.* ?FROM Course AS Course1,Course AS Course2?
WHERE Course2.Cname = '計(jì)算機(jī)應(yīng)用基礎(chǔ)' AND Course1.STime>Course2.STime;
單張表格同字段比較,用別名建立兩張表,再比較。
③ 查詢選修課程號(hào)為K002的學(xué)生的學(xué)號(hào),姓名(使用連接查詢,普通子查詢,相關(guān)子查詢)。
連接查詢:
SELECT Student.Sno,Sname
FROM Homework
INNER JOIN Student
ON Student.Sno=Homework.Sno
INNER JOIN Course
ON Homework.Cno=Course.Cno
WHERE HomeWork.Cno='K002'
普通子查詢:
先使用連接查詢,查詢出符合條件的學(xué)號(hào),再查詢其中不重復(fù)的學(xué)號(hào)與姓名字段
select distinct Student.Sno,Student.Sname
from Homework,Student
where Student.Sno in (
select Student.Sno
from Homework
where Homework.Cno='K002' and Homework.Sno=Student.Sno)
相關(guān)子查詢:(不太確定)
select distinct Student.Sno,Student.Sname
from Homework,Student
where Student.Sno in (
select Student.Sno
from Homework
where Homework.Cno='K002')
普通子查詢執(zhí)行的順序:首先執(zhí)行子查詢,然后把子查詢的結(jié)果作為父查詢的查詢條件的值。普通子查詢只執(zhí)行一次,而父查詢所涉及的所有記錄行都與其查詢結(jié)果進(jìn)行比較以確定查詢結(jié)果集合。
相關(guān)子查詢的執(zhí)行順序:首先選取父查詢表中的第一行記錄,內(nèi)部的子查詢利用此行中相關(guān)屬性值進(jìn)行查詢,然后父查詢根據(jù)子查詢返回的結(jié)果判斷此行是否滿足查詢條件。
④ 查詢沒有同時(shí)選修K001和M001課程的學(xué)號(hào),姓名,課程號(hào)和三次成績(jī)。
首先,查詢同時(shí)選修了K001和M001的學(xué)號(hào)集合
再查詢不在這集合中的學(xué)號(hào)
SELECT Student.Sno,Sname,Homework.Cno,Score1,Score2,Score3
FROM Homework
INNER JOIN Student
ON Student.Sno=Homework.Sno
INNER JOIN Course
ON Homework.Cno=Course.Cno
WHERE Homework.Sno not in(SELECT Homework.Sno?
FROM Homework?
WHERE Homework.Cno='K001' and Homework.Sno in (
SELECT Homework.Sno
FROM Homework
WHERE Homework.Cno='M001')
)
補(bǔ)充:用SQL查詢同時(shí)選修了1號(hào)課和2號(hào)課的學(xué)生學(xué)號(hào)
不能用
WHERE Cno='1'?and Cno='2'
而一定要用
WHERE?Cno='1'?and Sno in (SELECT?Sno
FROM Course
WHERE Cno='2')
先查詢選修了課程二的學(xué)號(hào)集合,再查詢選修來(lái)課程一并且學(xué)號(hào)在上述集合之內(nèi)的學(xué)號(hào)。
因?yàn)樵谝淮尾樵兊倪^(guò)程中,Cno不可能既為1,又為2
值得一提的是,不論任何查詢,都可以先提前把多個(gè)表連接起來(lái),以便后續(xù)的操作
2. 使用數(shù)據(jù)操縱完成以下任務(wù)(每一個(gè)任務(wù)都要給出SQL語(yǔ)句,并且列出查詢結(jié)果)。
① 在學(xué)生表中添加一條學(xué)生記錄,其中,學(xué)號(hào)為0593,姓名為張樂(lè),性別為男,專業(yè)班級(jí)為電子05,出生日期為1991-01-01。
語(yǔ)法
INSERT INTO 表名稱 VALUES (值1, 值2,....)
INSERT INTO Student?VALUES (0593,'張樂(lè)','男','電子05','1991-01-01',null)
電話即便為空,也不能少,必須填個(gè)null,不然:
插入日期時(shí),要用單引號(hào)包含,否則數(shù)據(jù)會(huì)出錯(cuò):
② 將所有課程的學(xué)分?jǐn)?shù)變?yōu)樵瓉?lái)的兩倍。
語(yǔ)法:
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
UPDATE Course SET Score = 2*Score
注意:在檢查表格內(nèi)容變化時(shí),需要先關(guān)閉原表格,(再刷新對(duì)象資源管理器?)然后重新打開
③ 刪除張樂(lè)的信息。
語(yǔ)法
DELETE FROM 表名稱 WHERE 列名稱 = 值
DELETE FROM Student WHERE Sname = '張樂(lè)'
操作前
操作后
總結(jié)
以上是生活随笔為你收集整理的数据库 实验三 数据库查询和数据操纵的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 标签体系构建原则
- 下一篇: 2021山东省莱阳市高考成绩查询,202