SQL实验四:数据库的查询和视图
- 格式:doc
- 大小:1.66 MB
- 文档页数:16
在学生选课数据库中完成规定查询,并创建视图。
1.查询线性代数不及格的同学的学号和姓名;SQL语句为:SELECT名单$.学号,姓名FROM名单$,学生选课信息和成绩$,课程$WHERE名单$.学号=学生选课信息和成绩$.学号AND课程$.课号=学生选课信息和成绩$.课号AND课程$.课程名='线性代数'AND学生选课信息和成绩$.成绩<60;执行后结果为:2.查询没有选课记录的同学的所有基本信息;SQL语句为:SELECT*FROM名单$WHERE NOTEXISTS(SELECT*FROM学生选课信息和成绩$WHERE学号=名单$.学号);执行后结果为:3.查询具有简介先修课的课程信息及对应的先修课名;SQL语句为:SELECTFIRST.课号,SECOND.课程名FROM课程$FIRST,课程$SECONDWHEREFIRST.先修课号=SECOND.课号;执行后结果如下:4.统计高等数学(1)的平均成绩;SQL语句为:SELECT AVG(成绩)FROM学生选课信息和成绩$,课程$WHERE学生选课信息和成绩$.课号=课程$.课号AND课程$.课程名='高等数学(1)'; 执行后结果如下:5.统计各门课的选课人数;SQL语句为:SELECT课号,COUNT(学号)FROM学生选课信息和成绩$GROUPBY课号;执行后结果为:6.查询选修5门课以上的学生的学号;SQL语句为:SELECT学号FROM学生选课信息和成绩$GROUPBY学号HAVING COUNT(*)>5;执行后结果为:7.用你的学号查询和你一个班的同学的学号和姓名;SQL语句为:SELECT学号,姓名FROM名单$WHERE班级IN(SELECT班级FROM名单$WHERE学号='201000800145');执行后结果如下:8.查询高等数学(1)成绩比你高出10分以上的同学的姓名和对应成绩;SQL语句为:SELECT姓名,成绩FROM名单$,学生选课信息和成绩$WHERE名单$.学号=学生选课信息和成绩$.学号AND学生选课信息和成绩$.课号='82006010'AND成绩>(SELECT成绩+10FROM学生选课信息和成绩$,课程$WHERE学生选课信息和成绩$.课号=课程$.课号AND课程$.课程名='高等数学(1)' AND学生选课信息和成绩$.学号='201000800145')执行后结果为:9.找到每门课获得最高成绩的同学的学号、姓名、课名和成绩;选做。
实验(四)数据库的视图操作实验一、实验目的和要求(1)掌握SQL Server中的视图创建向导和图表创建向导的使用方法;(2)加深对视图和SQL Server图表作用的理解。
(3)掌握数据库安全性的操作方法。
二、实验内容和原理1. 基本操作实验(1)在SQL Server企业管理器中调出Create View Wizard(创建图表向导),按下列Transact-SQL描述的视图定义,创建借阅_计算机图书视图。
CREATE VIEW 借阅_计算机图书AS SELECT 图书.*,借阅.*FROM 图书,借阅WHERE图书.编号=借阅.书号AND图书.类别=‘计算机’(2)在SQL server企业管理器中调出Create View Wizard(创建图表向导),完成在图书-读者数据库中建立一个图书_借阅图表操作。
要求该图表包括图书和借阅两个表,并包括图书与借阅之间的“图书.书号=借阅.书号”外码与被参照表之间的关联。
(3)查看上述实验结果。
如果结果有误,予以纠正。
2. 提高操作实验在学生-课程数据库中用Transact-SQL语句描述下列视图定义。
(1)从学生表中建立查询所有男(女)生信息的视图STU_SEX。
视图的列名为SNO、SNAME、SSEX和SAGE。
(2)从课程表中建立查询所有课程先修课信息的视图课程_PRE。
视图的列名为课程号、课程名称和先修课名称。
(3)从选修表中建立查询成绩大于等于80信息的视图STU_CJ1。
视图的列名为学号、课程号和成绩。
(4)从学生、选修和课程三个表建立查询学生选修情况的视图STU_CJ2。
视图的列名为姓名、课程名称和成绩。
(5)从学生、选修和课程三个表建立查询学生选修情况并且成绩小于80的视图STU_CJ3。
视图的列名为姓名、课程名称和成绩。
(6)利用Transact-SQL命令修改视图STU_SEX。
把视图的列名改为学号、姓名、性别和年龄,把加上“WITH CHECK OPTION”选项。
mysql实验四数据库查询和视图_数据库-第四次实验报告-视图-t-sql语句实验⼗报告 创建视图实验⽬的1.掌握创建视图的SQL语句的⽤法。
2.掌握使⽤企业管管理器创建视图的⽅法。
3.掌握使⽤创建视图向导创建视图的⽅法。
4.掌握查看视图的系统存储过程的⽤法。
5.掌握修改视图的⽅法。
⼀. 实验准备1.了解创建视图⽅法。
2.了解修改视图的SQL语句的语法格式。
3.了解视图更名的系统存储过程的⽤法。
4.了解删除视图的SQL语句的⽤法。
⼆. 实验要求1. ⽤不同的⽅法创建视图。
2. 提交实验报告,并验收实验结果。
三. 实验内容 1. 创建视图(1) 使⽤企业管理器创建视图① 在EDUC库中以“student”表为基础,建⽴⼀个名为“V_计算机系学⽣”的视图。
在使⽤该视图时,将显⽰“student”表中的所有字段.兰州⼤学数据库实验报告视图如下:(2) 使⽤SQL语句创建视图 ① 在查询分析器中建⽴⼀个每个学⽣的学号、姓名、选修的课名及成绩的视图S_C_GRADE; Create VIEWS_C_GRADE ASSELECT student.sno,sname,cname,score FROM student,course,student_course WHERE student.sno=student_course.sno AND o=student_o;视图如下:②建⽴⼀个所有计算机系学⽣的学号、选修课程号以及平均成绩的视图COMPUTE_AVG_GRADE; Create VIEWCOMPUTE_AVG_GRADE ASSELECT student.sno,o,AVG(score) '平均成绩' FROM student,course,student_course WHEREstudent.sno=student_course.snoAND o=student_o AND student.dno='CS' GROUP BY student.sno,o;视图如下:2. 修改视图(1) 使⽤企业管理器修改视图在企业管理器中将视图COMPUTE_AVG_GRADE中改成建⽴在数学系的学⽣学号、选修课程号以及平均成绩的视图。
SQLSERVER2008实用教程实验参考答案解析(实验4)实验4 数据库的查询和视图一、SELECT语句的基本使用1. 查询Employees表中所有数据2. 查询Employees表中指定字段数据3. 查询Employees表中的部门号和性别,要求使用Distinct消除重复行4. 使用WHERE子句查询表中指定的数据查询编号为’000001’的雇员的地址和查询月收入高于2000元的员工查询1970年以后出生的员工的和住址5. 使用AS子句为表中字段指定别名查询Employees表中女雇员的地址和,并将列标题显示为地址和查询Employees表中男雇员的和出生日期,并将列标题显示为和出生日期6. 使用使用CASE子句查询Employees表中员工的和性别,要求Sex值为1时显示“男”,为0时显示“女”查询Employees表中员工的、住址和收入水平,2000元以下显示为低收入,2000~3000地显示为中等收入,3000元以上显示为高收入。
7. 使用SELECT语句进行简单计算计算每个雇员的实际收入8. 使用置函数获得员工总数计算Salary表中员工月收入的平均数获得Employees表中最大的员工计算Salary表中所有员工的总支出查询财务部雇员的最高和最低实际收入9. 模糊查询找出所有姓王的雇员的部门号找出所有地址中含有“”的雇员的及部门号找出员工中倒数第二个数字为0的员工的、地址和学历10. Between…And…和Or的使用找出收入在2000~3000元之间的雇员编号找出部门为“1”或“2”的雇员的编号11. 使用INTO子句,由源表创建新表由表Salary创建“SalaryNew”表,要求包括编号和收入,选择收入在1500元以上的雇员由表Employees创建“EmployeesNew”表,要求包括编号和,选择所有男员工二、子查询的使用1. 查找在财务部工作的雇员情况2. 用子查询的方法查找所有收入在2500以下的雇员的情况3. 查找财务部年龄不低于研发部雇员年龄的雇员4. 用子查询的方法查找研发部比所有财务部雇员收入都高的雇员的5. 查找比所有财务部的雇员收入都高的雇员的6. 用子查询的方法查找所有年龄比研发部雇员年龄都大的雇员的三、连接查询的使用1. 查询每个雇员的情况及薪水的情况2. 查询每个雇员的情况及其工作部门的情况3. 使用连接的方法查询名字为“王林”的雇员所在的部门4. 使用连接的方法查找出不在财务部工作的所有雇员信息5. 使用外连接方法查找出所有员工的月收入6. 查找财务部收入在2000元以上的雇员及其薪水详情7. 查询研发部在1976年以前出生的雇员及其薪水详请四、聚合函数的使用1. 求财务部雇员的平均收入2. 查询财务部雇员的最高和最低收入3. 求财务部雇员的平均实际收入4. 查询财务部雇员的最高和最低实际收入5. 求财务部雇员的总人数6. 统计财务部收入在2500元以上的雇员人数五、GROUP BY、ORDER BY子句的使用1. 查找Employees表中男性和女性的人数2. 按部门列出在该部门工作的员工的人数3. 按员工的学历分组,排列出本科、大专、硕士的人数4. 查找员工数超过2的部门名称和雇员数量5. 按员工的工作年份分组,统计各个工作年份的人数,例如工作1年的多少人,工作2年的多少人6. 将雇员的情况按收入由低到高排列7. 将员工信息按出生时间从小到大排列8. 在ORDER BY 子句中使用子查询,查询员工、性别和工龄信息,要求按实际收入从大到小排列六、视图的使用1. 创建视图(1)在数据库YGGL上创建视图Departments_View,视图包含Department表的全部列(2)创建视图Employees_Departments_View,视图包含员工、、所在部门名称(3)创建视图Employees_Salary_View,视图包含员工、和实际收入三列2. 查询视图从视图Employees_Salary_View中查询出为“王林”的员工的实际收入3. 更新视图(1)向视图Departments_View中添加一条记录(‘6’,‘广告部’,‘广告业务’)执行完命令后,分别查看Departments_View和Department表中发生的变化(2)尝试向Employees_Departments_View中添加一条记录,看看会发生什么情况(3)尝试向Employees_Salary_View中添加一条记录,看看会发生什么情况(4)将视图Departments_View中,部门号为‘6’的部门名称修改为‘生产车间’(5)删除视图Departments_View中最新增加的的一条记录4. 删除视图Employees_Departments_View5. 在界面工具中操作视图一、SELECT语句的基本使用1. 查询Employees表中所有数据SELECT*FROM Employees;2. 查询Employees表中指定字段数据SELECT EmployeeID,Name,DepartmentID FROM Employees;3. 查询Employees表中的部门号和性别,要求使用Distinct消除重复行SELECT Distinct DepartmentID,Sex FROM Employees;4. 使用WHERE子句查询表中指定的数据查询编号为’000001’的雇员的地址和Select Address,PhoneNumber FROM Employees WHERE EmployeeID='000001';查询月收入高于2000元的员工SELECT EmployeeID FROM Salary WHERE InCome>2000;查询1970年以后出生的员工的和住址SELECT Name,Address FROM Employees WHERE YEAR(Birthday)>'1970';SELECT Name,Address FROM Employees WHERE Birthday>'1970';5. 使用AS子句为表中字段指定别名查询Employees表中女雇员的地址和,并将列标题显示为地址和SELECT Address AS地址,PhoneNumber AS FROM Employees;查询Employees表中男雇员的和出生日期,并将列标题显示为和出生日期SELECT Name AS,Birthday AS出生日期FROM Employees WHERE Sex=1;6. 使用使用CASE子句查询Employees表中员工的和性别,要求Sex值为1时显示“男”,为0时显示“女”SELECT Name AS,CASEWHEN Sex=1 THEN'男'WHEN Sex=0 THEN'女'ENDAS性别FROM Employees;查询Employees表中员工的、住址和收入水平,2000元以下显示为低收入,2000~3000地显示为中等收入,3000元以上显示为高收入。
第4章数据库的查询和视图一、数据的关系运算:运算的对象和结果都是表(表达方式)包括:选择、投影、连接1.选择(selection):单目运算从行方面分割表记:σF(R)其中:F为条件表达式 R为表例:σF(XS),F为性别=‘男’Λ专业名=‘计算机’2.投影(projection):单目运算从列方向分割表记:ΠA(R)其中:A为列名列表;R为表例:Π姓名,专业名,总学分(XS)3.连接(join):多目运算记:R F S 其中:F为条件表达式;R、S为表①自然连接:R S,按两表的共同属性连接例:XS XS_KC? XS XS_KC KC②条件连接:R F S,两表按下条件连接例:上例中的条件F二、数据库查询使用select 语句实现表的关系运算,用符合条件的数据构成结果表语法:select <select_list>into new_table_nameform table_sourcewhere search_conditiongroup by group_by_expressionhaving search_conditionorder by order_expression [ASC/DESC] 1.选择列①选择表中的列:select列名,列名,……(*)from表名where 条件②在结果表中使用文字串(增强检索结果的可读性)select‘串’,列名,‘串’,列名,……from表名where条件③改变结果列标题(结果表更个性化,可读性强)select列名AS新列标,列名AS 新列标,……(或新列标=列名,新列标=列名,……)from表名where条件④结果表数据替换(使检索结果更能反映出有用信息)select新列标=case when条件1 then‘串’(表达式)when条件2 then‘串’(表达式)……else表达式endfrom 表名where 条件⑤结果表中显示列计算值select表达式,表达式,……from表名⑥消除结果集中的重复行select distinct列名,列名……⑦限制结果集返回行数select top n 列名,列名……2、选择行(用where条件过滤)(紧在from之后)①表达式比较:(比较运算符)比较的表达式之一或两个为NULL时,返回unknown,否则返回true/false②模式匹配:(like谓词)[谓词:返回逻辑值的运算符、关键字]字符串表达式1 [not] like字符串表达式2 [escape‘不匹配字符’](可以使用通配符进行匹配)匹配通配符:%:任意一串字符例:select * from xs where 姓名 like‘王%’_:任意一个字符例:select * from xs where 姓名 like‘王_’[]:指定范围,如[a-z]、[0-9]、[abcde]……[^]:指定不属于范围,如[^a-z]、[^0-9]、[^abcde]③范围比较:表达式[not] between 表达式1 AND表达式2注:表达式1<=表达式2,包括表达式1和2表达式IN(表达式1,表达式2,……,表达式N)④空值比较表达式is [not] NULL⑤contains 谓词:在表中指定字符串的搜索(精确、模糊、加权匹配)contains(列/*,‘匹配串’)注:先为要操作的表建立全文索引(第六章Create Index,企业管理器)⑥freetext 谓词:与contains相似,不如contains精确freetext(列/*,‘匹配串’)⑦子查询:用另一个查询结果做为where条件的一部分,可嵌套★ IN:判断某个值是否在子查询结果中,只能返回一列数据。
1 实验四表的查询操作(4学时)【实验目的】了解SQL 语言的使用,进一步理解关系运算,巩固数据库的基础知识。
【实验要求】掌握利用Select 语句进行各种查询操作:单表查询、多表连接及查询、嵌套查询、集合查询等。
【实验内容】在实验三创建并插入数据的表(Student ,Course ,SC ,Teacher ,TC )的基础上,完成以下操作。
1.对实验步骤中所给示例进行验证。
2.参考所给示例,完成下列各种查询操作。
(1)将教师‘罗莉’的名字改为‘罗莉莉’。
(2)将两个同学(数据自己临时设置,用后即删除)的两门课程的成绩以运行sql 程序文件的形式插入score 表中。
该题用以验证、理解和掌握关系模型的完整性规则;(3)求每门课的平均成绩,并把结果存入average 表(自行设计并创建);(4)将学生“马丽”的年龄改为2424;;(5)将所有学生的zipcode 属性列值填补上;(6)将average 表中的所有课程的平均成绩置零;(7)删除average 表中的课程号为‘表中的课程号为‘c007c007c007’的平均成绩记录;’的平均成绩记录;(8)删除所有average 表中平均成绩记录;(9)建立一个临时学生信息表()建立一个临时学生信息表(tstudent tstudent tstudent)),删除该表中的学号含‘101’的所有学生记录。
(1010)查询全体学生的学号与姓名;)查询全体学生的学号与姓名;(1111)查询全体学生的学号、姓名、所属系;)查询全体学生的学号、姓名、所属系;(1212)查询全体学生的详细记录;)查询全体学生的详细记录;(1313)查询全体学生的姓名及其年龄;)查询全体学生的姓名及其年龄;(1414)查询全体学生的姓名、出生年份;)查询全体学生的姓名、出生年份;(1515)查询所有修过课的学生的学号;)查询所有修过课的学生的学号;(1616)查询“计算机系”班全体学生名单;)查询“计算机系”班全体学生名单;(1717)查询查询所有年龄在)查询查询所有年龄在23岁以下的学生姓名及其年龄;(1818)查询考试成绩有不及格的学生的学号;)查询考试成绩有不及格的学生的学号;(1919)查询年龄在)查询年龄在20至22岁之间的学生姓名、系和年龄;(2020)查询年龄不在)查询年龄不在20至22岁之间的学生姓名、系和年龄;(2121)查询“)查询“计算机系”和“电商系”的学生的姓名;(2222)查询既不是“计)查询既不是“计1111”也不是“计”也不是“计6161”班的学生的姓名和班级信息;”班的学生的姓名和班级信息;(2323)查询学号为“)查询学号为“04262002”的学生的详细情况;(2424)查询学号以“)查询学号以“04262”打头的学生信息;(2525)查询所有姓“张”学生的学号、姓名、性别、年龄;)查询所有姓“张”学生的学号、姓名、性别、年龄;(2626)查询名字中第二个字有“海”字的学生的学号、姓名、性别、年龄;)查询名字中第二个字有“海”字的学生的学号、姓名、性别、年龄;(2727)查询所有不姓“刘”学生的姓名;)查询所有不姓“刘”学生的姓名;(2828)查询课程号以“)查询课程号以“C ”开头的最后两个字母为“”开头的最后两个字母为“050505”的课程号和课程名;”的课程号和课程名;(2929)某些学生选修某门课程后没有参加考试,所以有选修课记录,但没有考试成绩,)某些学生选修某门课程后没有参加考试,所以有选修课记录,但没有考试成绩,试查找缺少考试成绩的学生和相应的课程号;(3030)查找全部有成绩记录的学生学号、课程号;)查找全部有成绩记录的学生学号、课程号;(3131)查找“计算机系”年龄在)查找“计算机系”年龄在22岁以下的学生学号、姓名;(3232)查找选修了“)查找选修了“)查找选修了“C001C001C001”号课程的学生学号及其成绩,查询结果按分数降序排序;”号课程的学生学号及其成绩,查询结果按分数降序排序;(3333))查询全体学生情况,查询全体学生情况,查询结果按所在系升序排列,查询结果按所在系升序排列,查询结果按所在系升序排列,对同一系中的学生按年龄降序对同一系中的学生按年龄降序排列;(3434)查询学生总人数;)查询学生总人数;)查询学生总人数;(3535)查询选修了课程的学生人数;)查询选修了课程的学生人数;)查询选修了课程的学生人数;(3636)在所有课程中查询最高分的学生学号和成绩;)在所有课程中查询最高分的学生学号和成绩;)在所有课程中查询最高分的学生学号和成绩;(3737)查询学习“)查询学习“)查询学习“C001C001C001”课程的学生最高分数;”课程的学生最高分数;”课程的学生最高分数;(3838)计算各个课程号与相应的选课人数;)计算各个课程号与相应的选课人数;)计算各个课程号与相应的选课人数;(3939)查询“计算机系”选修了两门课程以上的学生学号、姓名;)查询“计算机系”选修了两门课程以上的学生学号、姓名;)查询“计算机系”选修了两门课程以上的学生学号、姓名;(4040)自然连接)自然连接student 和score 表;表; (4141)使用自身连接查询每一门课程的间接先行课(即先行课的先行课))使用自身连接查询每一门课程的间接先行课(即先行课的先行课))使用自身连接查询每一门课程的间接先行课(即先行课的先行课)(4242)使用复合条件连接查询选修“)使用复合条件连接查询选修“)使用复合条件连接查询选修“c001c001c001”号课程且成绩在”号课程且成绩在90分以上的所有同学;分以上的所有同学;(4343)使用复合条件连接查询每个学生选修的课程名及其成绩;)使用复合条件连接查询每个学生选修的课程名及其成绩;)使用复合条件连接查询每个学生选修的课程名及其成绩;(4444)查询选修了全部课程的学生;)查询选修了全部课程的学生;)查询选修了全部课程的学生;(4545)查询所有选修了)查询所有选修了C001号课程的学生学号、姓名;号课程的学生学号、姓名;(4646)查询选修了课程)查询选修了课程C001或c007的学生学号、姓名;的学生学号、姓名;(4747)查询“计算机系”的学生及年龄不大于)查询“计算机系”的学生及年龄不大于23岁的学生;岁的学生;(4848)查询既选修了课程)查询既选修了课程C001又选修了课程c007的所有学生学号、姓名;的所有学生学号、姓名;(4949)查询选修了课程名为“数据库原理”的学生的学号、姓名、性别、年龄;)查询选修了课程名为“数据库原理”的学生的学号、姓名、性别、年龄;)查询选修了课程名为“数据库原理”的学生的学号、姓名、性别、年龄;(5050)查询其他班中比“计算机系”所有学生年龄都小的学生名单;)查询其他班中比“计算机系”所有学生年龄都小的学生名单;)查询其他班中比“计算机系”所有学生年龄都小的学生名单;(5151)查询与“夏天”在同一个系学习的学生学号、姓名、性别、年龄;)查询与“夏天”在同一个系学习的学生学号、姓名、性别、年龄;)查询与“夏天”在同一个系学习的学生学号、姓名、性别、年龄;(5252)建立“计算机系”学生的视图)建立“计算机系”学生的视图1;(5353)建立“计算机系”学生的视图)建立“计算机系”学生的视图2,并要求进行修改与插入时,仍须保证该视图只有“计算机系”班学生;有“计算机系”班学生;(54)建立“计算机系”选修了“C001”课程的学生的视图,定义视图名为“v_cs_C001_student1v_cs_C001_student1””; (5555)建立“计算机系”班选修了“)建立“计算机系”班选修了“)建立“计算机系”班选修了“C001C001C001”课程且成绩在”课程且成绩在90分以上的学生的视图,定义视图名为“义视图名为“cs_c001_student2cs_c001_student2cs_c001_student2””; (5656)定义一个反映学生年龄的视图,定义视图名为“)定义一个反映学生年龄的视图,定义视图名为“)定义一个反映学生年龄的视图,定义视图名为“v_birth_student v_birth_student v_birth_student””; (5757)将学生表中所有女生记录定义为一个视图,视图名为“)将学生表中所有女生记录定义为一个视图,视图名为“)将学生表中所有女生记录定义为一个视图,视图名为“v_female_student v_female_student v_female_student””; (5858)将学生的学号及其平均成绩定义为一个视图,视图名为“)将学生的学号及其平均成绩定义为一个视图,视图名为“)将学生的学号及其平均成绩定义为一个视图,视图名为“v_average_student v_average_student v_average_student””; (5959)在“计算机系”学生视图中找出年龄小于)在“计算机系”学生视图中找出年龄小于22岁的学生;岁的学生;(6060)利用视图查询“计算机系”选修了“)利用视图查询“计算机系”选修了“)利用视图查询“计算机系”选修了“C001C001C001”课程的学生;”课程的学生;”课程的学生;(6161)通过()通过()通过(525252)中的“计算机系”视图修改某个学生的名字;)中的“计算机系”视图修改某个学生的名字;)中的“计算机系”视图修改某个学生的名字;(6262)通过()通过()通过(535353)中的“计算机系”视图,插入一个新学生记录。
实验训练4:视图和索引的构建与使用实验目的:1. 了解视图和索引的概念和作用;2. 掌握创建视图和索引的语法和方法;3. 掌握使用视图和索引进行数据查询的方法。
实验环境:MySQL数据库。
实验内容:1. 创建视图视图是一种虚拟表,它是根据SQL 查询语句所定义的结果集生成的。
视图并不存储数据,而是根据需要从基本表中获取数据。
视图的作用是简化常用查询操作,使查询语句更加简洁明了。
创建视图的语法如下:```CREATE VIEW view_name ASSELECT column1, column2, ...FROM table_nameWHERE condition;```例如,我们可以创建一个视图来显示学生的姓名和成绩:```CREATE VIEW student_score ASSELECT name, scoreFROM students;```2. 使用视图查询数据使用视图进行查询时,可以像查询普通表一样进行查询操作。
例如,我们可以查询学生的姓名和成绩:```SELECT * FROM student_score;```3. 创建索引索引是一种数据结构,用于提高数据的查询效率。
索引可以加快查询操作的速度,但会降低插入和更新操作的速度。
通常,我们会在经常使用的列上创建索引,以提高查询效率。
创建索引的语法如下:```CREATE INDEX index_nameON table_name (column1, column2, ...);```例如,我们可以在学生表的姓名列上创建索引:```CREATE INDEX idx_nameON students (name);```4. 使用索引查询数据使用索引进行查询时,可以通过查询计划来查看是否使用了索引。
例如,我们可以查询姓名为张三的学生:```SELECT * FROM students WHERE name = '张三';```可以通过EXPLAIN 命令查看查询计划:```EXPLAIN SELECT * FROM students WHERE name = '张三';```如果查询计划中出现了Using index,则表示使用了索引。
SQL实验四:数据库的查询和视图学校代码:10128题目:数据库的查询和视图学生姓名:孙跃学院:理学院系别:数学系专业:信息与计算科学班级:信计12-2任课教师:侯睿《数据库原理及应用》实验报告一、二、练习目的1、数据库的查询(1)掌握SELECT语句的基本语法;(2)掌握子查询的表示;(3)掌握连接查询的表示;(4)掌握SELECT语句的GROUP BY子句的作用与使用方法;(5)掌握SELECT语句的ORDER BY子句的作用与使用方法;2、视图的使用(1)熟悉视图的概念和作用;(2)熟悉视图的创建方法;(3)熟悉如何查询和修改视图。
二、练习准备1、数据库的查询(1)了解SELECT语句的基本语法格式;(2)了解SELECT语句的执行方法;(3)了解子查询的表示方法;(4)了解连接查询的表示;(5)了解SELECT语句的GROUP BY子句的作用与使用方法;(6)了解SELECT语句的ORDER BY子句的作用;2、视图的使用(1)了解视图的概念;(2)了解创建视图的方法;(3)了解并掌握对视图的操作。
三、实验程序实验4.1 数据库的查询1、(1)对于实验2给出的数据库结构,查询每个雇员的所有数据.USE YGGLGOSELECT*FROM Employees(2)用SELECT语句查询Employees表中每个雇员的地址和电话.SELECT Address,PhoneNumberFROM Employees(3)查询EmployeeID为000001的雇员的地址和电话.SELECT Address,PhoneNumberFROM EmployeesWHERE EmployeeID='000001'GO(4)查询Employees表中女雇员的地址和电话,使用AS子句将结果中各列的标题分别制定地址和电话. SELECT Address AS地址,PhoneNumber AS电话FROM EmployeesWHERE Sex=0(5)查询Employees表中员工姓名和性别,要求Sex值为1时显示为“男”,为0时显示为“女”. SELECT Name AS姓名,CASEWHEN Sex=1 THEN'男'WHEN Sex=0 THEN'女'END AS性别FROM Employees(6)计算每个员工的实际收入.SELECT EmployeeID,实际收入=InCome-OutComeFROM Salary(7)获得员工总数.SELECT COUNT(*)FROM Employees(8)找出所有姓王的雇员的部门号.SELECT DepartmentIDFROM EmployeesWHERE Name LIKE'王%'(9)找出所有收入在2000~3000之间的员工号码.SELECT EmployeeIDFROM SalaryWHERE InCome BETWEEN 2000 AND 3000(10)使用INTO子句,由表Salary创建“收入在1500以上的员工表”,包括编号和收入. SELECT EmployeeID as编号,InCome as收入INTO收入在以上的员工FROM SalaryWHERE InCome>15002、子查询的使用.(1)查询在财务部工作的雇员的情况.SELECT*FROM EmployeesWHERE DepartmentID=(SELECT DepartmentIDFROM DepartmentsWHERE DepartmentName='财务部')(2)查询财务部年龄不低于研究部雇员年龄的雇员的姓名.SELECT NameFROM EmployeesWHERE DepartmentID IN(SELECT DepartmentIDFROM DepartmentsWHERE DepartmentName='财务部')ANDBirthday!>ALL(SELECT BirthdayFROM EmployeesWHERE DepartmentID IN(SELECT DepartmentIDFROM DepartmentsWHERE DepartmentName='研发部'))(3)查找比所有财务部的雇员收入都高的雇员的姓名.SELECT NameFROM EmployeesWHERE EmployeeID IN(SELECT EmployeeIDFROM SalaryWHERE InCome>ALL(SELECT InComeFROM SalaryWHERE EmployeeID IN(SELECT EmployeeIDFROM EmployeesWHERE DepartmentID=(SELECT EmployeeIDFROM DepartmentsWHERE DepartmentName='财务部')))))3、连接查询的使用(1)查询每个雇员的情况及其薪水的情况SELECT Employees.*,Salary.*FROM Employees,SalaryWHERE Employees.EmployeeID=Salary.EmployeeID(2)使用内连接的方法查询名字为“王林”的员工所在的部门SELECT DepartmentNameFROM Departments JOIN EmployeesON Departments.DepartmentID=Employees.DepartmentIDWHERE ='王林'(3)查询财务部收入在2000以上的雇员姓名及其薪水详情.SELECT Name,InCome,OutComeFROM Employees,Salary,DepartmentsWHERE Employees.EmployeeID=Salary.EmployeeIDAND Employees.DepartmentID=Departments.DepartmentIDAND DepartmentName='财务部'AND InCome>20004、聚合函数的使用.(1)求财务部雇员的平均收入.SELECT AVG(InCome)AS'财务部平均收入'FROM SalaryWHERE EmployeeID IN(SELECT EmployeeIDFROM EmployeesWHERE DepartmentID=(SELECT DepartmentIDFROM DepartmentsWHERE DepartmentName='财务部'))(2)财务部雇员的平均实际收入.SELECT AVG(InCome-OutCome)AS'财务部平均实际收入'FROM SalaryWHERE EmployeeID IN(SELECT EmployeeIDFROM EmployeesWHERE DepartmentID=(SELECT DepartmentIDFROM DepartmentsWHERE DepartmentName='财务部'))(3)求财务部雇员的总人数SELECT COUNT(EmployeeID)FROM EmployeesWHERE DepartmentID=(SELECT DepartmentIDFROM DepartmentsWHERE DepartmentName='财务部')5、GROUP BY\ORDER BY子句的使用.(1)Emyees表中的男性和女性的人数SELECT Sex,COUNT(Sex)FROM EmployeesGROUP BY Sex;(2)查找员工数超过2人的部门名称和员工数量.SELECT(Employees.DepartmentID),COUNT(*)AS人数FROM Employees,DepartmentsWHERE Employees.DepartmentID=Department.DepartmentIDGROUP BY Employees.DepartmentIDHAVING COUNT(*)>2(3)将各雇员的情况按收入由低到高排列.SELECT Employees.*,Salary.*FROM Employees,SalaryWHERE Employees.EmployeeID=Salary.EmployeeIDORDER BY InCome实验4.2 视图的使用1、创建视图①创建YGGL数据库上的视图DS_VIEW,视图包含Departments表的全部列。
②创建YGGL数据库上的视图Employees_view,视图包含员工号码、姓名和实际收入三列。
2、查询视图(1)从视图DS_VIEW,中查询出部门号为3的部门名称。
(2)从视图Employees_view查询出姓名为“王林”的员工的实际收入。
CREATE VIEW Employees_view(EmployeeID,Name,RealIncome)ASSELECT Employees.EmployeeID,Name,InCome-OutComeFROM Employees,SalaryWHERE Employees.EmployeeID=Salary.EmployeeID3、更新视图在更新视图前需要了解可更新视图的概念,了解什么视图时不可以进行修改的。
更新视图真正更新的是和视图关联的表。
(1)向视图 DS_VIEW中插入一行数据:“6,广告部,广告业务”。
(2)修改视图DS_VIEW,将部门号为5的部门名称修改为“生产车间”。
(3)修改视图Employees_view中员工号为“000001”的员工姓名为“王浩”。
(4)删除视图DS_VIEW中部门号为“1”的一行数据。
SELECT DepartmentNameFROM DS_VIEWWHERE DepartmentID='3'SELECT RealIncomeFROM Employees_viewWHERE Name='王林'INSERT INTO DS_VIEW VALUES('6','广告部','广告业务部')UPDATE DS_VIEWSET DepartmentName='生产车间'WHERE DepartmentID='5'DELETE FROM DS_VIEWWHERE DepartmentID='1'4、删除视图删除视图DS_VIEW。