数据库实验多表查询参考答案

合集下载

数据库查询语句实验报告及答案

数据库查询语句实验报告及答案

1.找出所有供应商的姓名和所在城市。

select sname,city from S表2.找出所有零件的名称,颜色,重量;select pname,color,weight from P表3.找出使用供应商S1所供应零件的工程号码。

select jno from SPJ表where sno='S1'4.找出工程项目J2使用的各种零件的名称及其数量。

select pname,qty from 表7,表5 where 表5.pno=表7.pno and 表7.jno='J2'5.找出上海厂商供应的所有零件的号码。

select distinct pno from 表7 where sno in (select sno from 表4 where city='上海')6.找出使用上海产的零件的工程名称。

select jname from 表6,表7,表4 where 表6.jno=表7.jno And 表7.sno=表4.sno And 表4.city='上海'8.全部红色零件的颜色改成蓝色。

update 表5 set color='蓝' where color='红'9. 由S5供给J4的零件P6改为由S3供应.update 表7 set sno='S3'where sno='S5'and jno='J4'and pno='P6'10.从供应商关系中删除S2的记录,并从供应商情况关系中删除相应的记录。

delete from 表4 where sno='S2'delete from 表7 where sno='S2'11.请将(S2,J6,P4,200)插入相应的情况关系。

insert into 表7(sno,jno,pno,qty) values ('S2','J6','P4',200)。

数据库实验(实验七数据查询)实验报告答案

数据库实验(实验七数据查询)实验报告答案

实验7数据查询【实验内容】7.1单表查询1、指定列或全部列查询1) 查询S表中全体学生的详细记录use jxsk select * from S出言岂select - f Tdtt s|.1结杲SEX AGE DEPT NATEVEJ_a,i soi王青山19计算机NULL2SI—赵亦17软件MULL 35218计算机NULL4S3弓綽明胃IS信息NULL554李四21包动ft NULL&S519软件NULL756昊丽20计算机NULL8S7范思明女ie NULL9S820自动化NULL10S919枫牛NULL2) 查询所有学生的姓名及其岀生年份。

use jxsk select SN, 2012 - AGEfrom S1「王諭】1&932赵亦1995J钱尔15944號慣明隔&李四1S516周展憫15537昊丽13828范思明1994S?«1S9210张海涛2、按条件查询及模糊查询1)查询考试成绩有不及格的学生的学号。

use jxsk selectdistinct SNOfrom SCwhere SCORE<602)查询年龄在20 —23岁之间的学生的姓名、系名和年龄use jxsk select SN,DEPT, AGEfrom Swhere AGE>=20 and AGE<= 30□ us* select 5N, DEET, troni 5L AGE>=20 ard AGE<-30V结果J消息| SH DEPT ,<SE1[ SS'J自动化212昊丽计算机203补珊自动化203)查询姓李的学生的姓名、学号和性别。

use jxsk select SN, SNO, SEXfrom S where SNlike '李%'□ use jxsk select ^NO f SEX from 5 wriere EE 丄是'李虽「Array4) 查询名字中第二个字为明”字的男学生的姓名和系名use jxsk select SN, DEPTfrom Swhere SNlike '_% 明’and SEX='男’SN DEPTi !信息h^iiiiauaB in KI ■■■■■&■■■■#3、对查询结果排序1) 查询信息系、计算机系学生的姓名、系名,结果按系名升序,按姓名降序排序。

数据库数据查询实验报告和答案.doc

数据库数据查询实验报告和答案.doc

数据库数据查询实验报告和答案韶关学院学生实验报告册实验课程名称:数据库技术与应用实验项目名称:数据库的数据查询实验类型(打√):(基础☑、综合、设计)院系:专业班级:姓名学号:指导老师:韶关学院教务处编制一、实验预习报告内容预习日期:10月10月22日(星期二第七八节)实验同组人:如有实验数据表格,学生在实验预习时应画好实验数据表格,供实验时填写数据(本页如不够,可另附相同规格的纸张)。

指导教师批阅及签名签名:年月日三、实验报告内容9月24日实验报告内容原则上应包含主要实验步骤、实验数据计算(实验操作)结果、实验结果(疑问)分析等项目。

实施内容:一、根据实验要求完成实验:(写明步骤和截图)1、在数据库studentsdb中,新建表studentdb_info,curriculum,grade。

并输入相应的数据,如图1、2和3所示。

图1图2图32、在studentsdb数据库中,使用下列SQL语句将输出什么?(1)selectcount(*)fromgrade结果如图4所示:图4(2)selectsubstring(学生姓名,1,2)fromstudent_info结果如图5所示:图5(3)selectupper(kelly)结果如图6所示:图6(4)selectreplicate(kelly,3)结果如图7所示:图7(5)selectsqrt(分数)fromgradewhere分数>=85结果如图8所示:图8(6)select2,3,power(2,3)结果如图9所示:图9(7)selectyear(getdate()),month(getdate()),day(getdate())结果如图10所示:图102、在studentsdb数据库中使用select语句近基本查询。

(1)在student_info表中,查询每个学生的学号、姓名、出生日期信息。

执行如下语句:select学号,学生姓名,出生日期fromstudent_info结果如图11所示图11(2)查询学号为0002的学生的姓名和家庭住址执行如下语句:select学生姓名,家庭地址fromstudent_infowhere学号=0002结果如图12所示图12(3)找出所有男同学的学号和姓名。

select 练习3多表查询_答案

select 练习3多表查询_答案

多表查询以下题目使用数据库xk,包括表:表1 Department表2 Course表3 Class表4 Student表5 StuCout--嵌套查询--1类:带有比较运算符的查询,查询结果为单值--查询报名人数大于平均报名人数的课程信息--1步.假如平均报名人数是30select*from coursewhere willnum>30--2步.查询出平均报名人数,查询结果是个数值型数据,凡是数值可以出现的地方,该select语句就可以出现select avg(willnum)from course --查询出平均报名人数--3步.替换select*from coursewhere willnum>(select avg(willnum)from course)--错误:where willnum>avg(willnum)--查询出学分最大的课程的名称--1步.假如最大学分是10分select counamefrom coursewhere credit=10--2步.查询出学分最大值select max(credit)from course--3步. 替换select counamefrom coursewhere credit=(select max(credit)from course)--查询出‘00电子商务’班的学生的姓名--1步.假如班号是'20000001'号select stunamefrom studentwhere classno='20000001'--2步.查询出‘电子商务’班的班号select classno from class where classname='00电子商务'--3步.替换select stunamefrom studentwhere classno=(select classno from class where classname= '00电子商务')--查询出'世界旅游'课程的选课信息--1步.假如'世界旅游'课程的课程号是'001',查询出'001'号课程的选课信息select*from stucou where couno='001'--2步.查询出'世界旅游'课程的课程号select couno from course where CouName='世界旅游'select*from stucou where couno=(select couno from course w here CouName='世界旅游')--查询出班级个数最多的院系名称--1步.假如'01'号学院班级最多,查询出'01'号学院的院系名称select departname from department where departno='01'--2步.查询出班级个数最多的院系编号selecttop 1 departnofrom classgroupby departnoorderby count(*)desc--3步.替换--查询结果是个院系编号,凡是院系编号可以出现的地方,该select 语句就可以出现select departnamefrom departmentwhere departno=(selecttop 1 departnofrom classgroupby departnoorderby count(*)desc)--where 列in(该列的集合)--查询结果为集合--查询出选课表中报名状态state为报名的课程名称--假如('001','002','003') 报名状态state为报名select counamefrom coursewhere couno in('001','002','003')--2:查询出选课表中报名状态为报名的课程编号的集合,select distinct counofrom stucou --凡是课程编号的集合出现的地方都可以用该select语句取代where state='报名'--替换:select counamefrom coursewhere couno in(selectdistinct counofrom stucouwhere state='报名')--查询出‘01’号学院的学生姓名--1步.查询出‘01’号学院的班号集合select classno from class where departno='01'--2步.查询出这些班的学生姓名select stunamefrom studentwhere classno in(select classno--‘1’号学院的班号集合from classwhere departno='01')--查询出'20000001'班学生的选课信息--1步.查询出'20000001'班的学号集合select stuno from student where classno='20000001' --2步.查询这些学生的选课信息select*from stucouwhere stuno in(select stunofrom studentwhere classno='20000001')--查询出'00电子商务'班学生的选课信息--1步.查出'00电子商务'班的班号select classnofrom classwhere classname='00电子商务'--2步.查出该班的学号集合select stunofrom studentwhere classno=(select classnofrom classwhere classname='00电子商务')--3步.查询这些学生的选课信息select*from stucouwhere stuno in(select stuno--2.查出该班的学号集合from studentwhere classno=(select classno--1.查出'00电子商务'班的班号from classwhere classname='00电子商务'))--查询出与学号是1号的学生选修课程数相等的学生的学号select stuno --选修了5门课的学生的学号的集合from stucougroupby stunohaving count(*)=5select stuno --选修了与学号是1号的学生选修课程数相等的学生的学号的集合from stucougroupby stunohaving count(*)=(select count(*)from stucou where stuno='00000001')--查询出与学号是1号的学生选修课程数相等的学生的姓名select stunamefrom studentwhere stuno in(select stuno --选修了与学号是号的学生选修课程数相等的学生的学号的集合from stucougroupby stunohaving count(*)=(select count(*)from stucou wherestuno='00000001'))--查询出与'林斌'选修课程数相等的学生的姓名select stunamefrom studentwhere stuno in(select stuno--选修了与学号是号的学生选修课程数相等的学生的学号的集合from stucougroupby stunohaving count(*)=(select count(*)from stucou where stuno=(select stuno f rom student where stuname='林斌')))--any/some/all--where 列>any/some(集合子查询) : 列值比子查询结果中的某个值大就为真--where 列>all(集合子查询) : 列值比子查询结果中的所有值大才为真--查询出比号班中某一个学生年龄小的其他班的学生的学号和姓名select stuno,stunamefrom studentwhere bir>any(select bir from student whereclassno='20000001')and classno<>'20000001'--或:select stuno,stunamefrom studentwhere bir>some(select bir from student whereclassno='20000001')and classno<>'20000001'--查询出比号班中所有学生年龄都小的其他班的学生的学号和姓名select stuno,stunamefrom studentwhere bir>all(select bir from student whereclassno='20000001')and classno<>'20000001'--exists:存在--当子查询结果不为空时where为真,否则为假--查询已经报名选修课程的学生姓名--方法1:in--1步.查询出已经报名选修课程的学生学号的集合selectdistinct stunofrom stucouwherestate='报名'--2步.查询出这些学生的姓名select stunamefrom studentwhere stuno in(selectdistinct stunofrom stucouwherestate='报名')--方法2:exists:存在--格式:where exists (子查询select)--当子查询结果不为空时where为真,否则为假--表的列名看成变量,变量值是表的当前行的该列值--student.stuno: 表示student表中当前行的stuno列的值select stunamefrom studentwhere exists(select*from stucou where stuno=student.stu no and state='报名')--查询所有选修了号课程的学生的学号和姓名select stuno,stunamefrom studentwhere exists(select*from stucou wherestuno=student.stuno and couno='001')--多表连接查询--交叉连接cross join:左表每行依次与右表所有行连接--结果表包括两个表的所有列--左表有m行,右表有n行,结果表中有mXn行--from 左表cross join 右表--笛卡尔积:交叉连接的结果称为笛卡尔积--例:列出所有可能的选课情况select stuno,stuname,couno,counamefrom student crossjoin course--内连接select*into stu2from studentwhere stunoin('00000001','00000002','00000011','00000012','000 00021','00000021')select*into class2from classwhere classno in('20000001','20000002','20000003') --内连接: 左表[inner] join 右表--公共列:主表的主键=从表的外键--from 左表join 右表--on 左表.列=右表.列(共同列)--on作用同where,对行的筛选,从笛卡尔积中选出满足on条件的行--查看学生基本信息及所在班级信息select* --两个表的所有列都显示from class join studenton class.classno=student.classno--表名.*:表示某个表的所有列--查看学生基本信息及所在班级的班级名称select student.*,class.classnamefrom class join studenton class.classno=student.classno--表的别名,一旦为表起了别名,表名不能再使用,只能使用别名select s.*,classname班级名称from student2s join classcon s.classno=c.classno--列出每个学生的学号、姓名,以及他选修的课程号、志愿号(willorder)select student.stuno,stuname,couno,willorderfrom student join stucouon student.stuno=stucou.stuno--列出‘01’号学院的所有学生的姓名、班级名称selecttop 5 stuname,classnamefrom class join studenton class.classno=student.classnowhere departno='01'order by classname--多表(>=3)连接--列出每个学生的姓名、班级名称、所在院系名称select stuname,classname,departnamefrom student join classon student.classno=class.classnojoin departmenton class.departno=department.departno--列出每个学生的学号、姓名,以及他选修的课程号、课程名称、志愿号select student.stuno,stuname,stucou.couno,couname,wi llorderfrom student join stucouon student.stuno=stucou.stunojoin courseon stucou.couno=course.couno--查询出‘林斌’选修的课程名称及课程所在院系的名称select couname,departnamefrom department as d join course con d.departno=c.departnowhere couno in(select couno from stucou where stuno=(select stuno from student where stuname='林斌'))--或:select couname,departnamefrom department as d join course con d.departno=c.departnojoin stucou scon c.couno=sc.counojoin student son sc.stuno=s.stuno and stuname='林斌'--where stuname='林斌'--查询出每个学生的姓名、选修的课程名称及课程所在院系的名称select stuname,couname,departnamefrom department as d join course con d.departno=c.departnojoin stucou scon c.couno=sc.counojoin student son sc.stuno=s.stuno--查询出每个学生选修课程门数,按学生学号、门数两列显示select stuno,count(*)from stucougroupby stuno--查询出每个学生选修课程门数,按学生姓名、门数两列显示,前提是学生没有重名的Select stuname,count(*)门数from student join stucouon student.stuno=stucou.stunogroupby student.stuname--自连接:表与自身进行连接--必须为表起别名--查询出每门课的名称以及其前驱课的名称select a.couname,b.counamefrom coursea join coursebon a.cpno=b.couno--外连接--左外连接(left join):除了内连接的结果行,还包括左表剩余的行--右外连接(right join):除了内连接的结果行,还包括右表剩余的行--全外连接(full join):除了内连接的结果行,还包括左、右两表剩余的行--列出所有学生信息以及其所在班级信息select*from student2join classon student2.classno=class.classnoselect*from student2leftjoin classon student2.classno=class.classnoselect*from student2rightjoin classon student2.classno=class.classnoselect*from student2full join classon student2.classno=class.classno--列出所有学生的学号、姓名,以及其选修的课程号;未选修课程的学号也要列出,left joinselect student.stuno,stuname,counofrom student leftjoin stucouon studnet.stuno=stucou.stuno--列出所有课程号、课程名称、选修该课程的学号,没被选修的课程也要列出,right joinselect course.couno,couname,stunofrom stucou rightjoin courseon stucou.couno=course.couno--子查询在delete、update中的应用--将‘00多媒体’班的‘杜晓静’姓名改为‘杜小静’update studentset stuname='杜小静'where stuname='杜晓静'and classno=(select classno from class where classname=' 00多媒体')select*from student where stuname='杜小静'and classno=(select classno from class where classname=' 00多媒体')--‘00电子商务’班的‘林斌’申请将已选修的‘网站信息检索原理与技术’课程改为‘Linux操作系统’update stucouset couno=(select couno from course where couname='Linux操作系统')where couno=(select couno from course where couname='网络信息检索原理与技术') and stuno=(select stuno from studentwhere stuname='林斌'and classno=(select classno from class where classname='00电子商务'))selecttop nintofromonwheregroupbyhavingorderby。

mysql多表查询的选择题

mysql多表查询的选择题

以下是一些关于MySQL多表查询的选择题,每个问题都提供了答案和解释:1. 假设有两个表,一个是`users`表,包含用户信息,另一个是`orders`表,包含订单信息。

如果我想获取所有用户的订单信息,应该使用哪种查询?a) INNER JOINb) LEFT JOINc) RIGHT JOINd) UNION答案:B。

LEFT JOIN用于获取左表(用户表)中所有记录以及右表中匹配的记录。

2. 如果我想获取所有用户的订单信息,但不想显示已取消的订单,应该使用哪种查询?a) INNER JOINb) LEFT JOINc) RIGHT JOINd) NOT EXISTS答案:B。

在这种情况下,我们仍然使用LEFT JOIN,但是需要在结果中过滤出取消的订单。

3. 如果我想根据用户的ID查找所有他们的订单信息,应该使用哪种查询?a) WHERE user_id = valueb) INNER JOIN ON user_id = order_idc) LEFT JOIN ON user_id = order_idd) SELECT * FROM orders WHERE user_id = value答案:C。

LEFT JOIN可以将一个表的所有记录与另一个表中的匹配记录连接起来,即使在另一个表中没有匹配的记录也会返回左表的所有记录。

在这种情况下,我们使用LEFT JOIN并将用户ID与订单ID连接起来。

4. 如果我想获取所有用户的姓名和他们的订单总数,应该使用哪种查询?a) COUNT(DISTINCT user_id)b) SUM(order_count)c) GROUP BY user_id, order_idd) COUNT(DISTINCT order_id)答案:C。

我们需要将用户ID和订单ID组合起来进行分组,并使用GROUP BY子句来获取每个用户的订单总数。

5. 如果我想获取每个用户的订单详情和他们最近的一条订单记录,应该使用哪种查询?a) ORDER BY order_date DESC LIMIT 1b) INNER JOIN ON user_id = order_id AND order_date = (SELECT MAX(order_date) FROM orders WHERE user_id = user_id)c) SELECT * FROM orders WHERE user_id = value ORDER BY order_date DESC LIMIT 1d) ORDER BY order_date ASC LIMIT 1答案:B。

Oracle基础练习题及答案(多表查询1)(共5篇)

Oracle基础练习题及答案(多表查询1)(共5篇)

Oracle基础练习题及答案(多表查询1)(共5篇)第一篇:Oracle基础练习题及答案(多表查询1)利用scott用户自带的四张表完成如下作业:1.列出至少有一个员工的所有部门select b.deptno,b.dname from emp a,dept b where a.deptno=b.deptno group by b.deptno,b.dname having count(*)>=1;2.列出薪金比SMITH高的所有员工select * from emp where sal>(select sal from emp where ename='SMITH');3.列出所有员工的姓名及其直接上级领导的姓名select a.ename,b.ename “leader” from emp a,emp b wherea.mgr=b.empno;4.列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称select a.empno,a.ename,a.hiredate,c.dname from emp a,emp b,dept c where a.mgr=b.empno and a.deptno=c.deptno anda.hiredate5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门select b.dname,a.* from emp a,dept b wherea.deptno(+)=b.deptno;6.列出所有CLERK(办事员)的姓名,及其部门名称,部门人数select aa.ename,aa.job,bb.dname,(select count(a.deptno)from emp a,dept b where a.deptno=b.deptno and b.dname=bb.dname group by a.deptno)from emp aa,dept bb where aa.deptno(+)=bb.deptno and aa.job='CLERK';7.列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数select a.job,min(sal),count(ename)from emp a,dept b wherea.deptno=b.deptno having min(sal)>1500 group by a.job;8.列出在部门SALES(销售部)工作的员工的姓名,假定不知道销售部的部门编号。

《数据查询与操作》实验的答案

《数据查询与操作》实验的答案

《数据查询与操作》实验一、实验目的与要求1、理解简单查询和复合查询的意义。

2、掌握SELECT语句和各子句的使用。

3、掌握多表查询和子查询的使用。

4、掌握INSERT、UPDATE和DELETE语句的使用。

二、实验平台1、操作系统:Windows XP或Windows 20032、数据库管理系统:SQL Server 2005三、练习1、插入数据1)在“人事管理系统”数据库“员工信息”表中,插入一个新员工信息(员工编号‘100508’、员工姓名‘苏娜’、所在部门编号‘10005’、性别’女’籍贯‘河北’)该员工还没安排职位。

insert into员工信息(员工编号,员工姓名,所在部门编号,性别,籍贯)values('100508','苏娜','10005','女','河北')2)在“人事管理系统”中,新增一个员工信息(员工编号‘100509’、员工姓名‘小龙女’、所在部门编号‘10001’、籍贯‘河南’)。

insert into员工信息(员工编号,员工姓名,所在部门编号,籍贯)values('100509','小龙女','10001','河南')3)将“人事管理系统”数据库的“员工信息”表中籍贯为“河南”并且所在部门编号为”10001”数据插入到“新员工信息”表中。

create table 新员工信息(员工编号int not null,员工姓名varchar(50) not null,所在部门编号int null,入职时间datetime null)insert into新员工信息(员工编号,员工姓名,所在部门编号)select员工编号,员工姓名,所在部门编号from员工信息where所在部门编号='10001'and籍贯='河南'4)将“人事管理系统”数据库中技术部门的员工的简明信息(包括:员工编号、员工姓名、部门名称、所任职位和文化程度)保存到表“技术部人员”中。

ACCESS的sql多表综合查询实验答案

ACCESS的sql多表综合查询实验答案
查询命令:
SELECT sno,sname,cno,cname
FROM student,course
WHERE cno=(SELECT cno FROM sc WHERE sno=( SELECT sno FROM student WHERE sname like '?阳阳' )) and sname like '?阳?'
GROUP BY student.sno,sname
查询命令:
查询结果:
查询5
查询5
sno
sname
200515001
赵菁菁
200515002
李勇
200515003
张力
200515004
张衡
200515005
张向东
200515006
张向丽
200515008
王民生
200515009
王小民
200515010
WHERE cno in (SELECT cno FROM course WHERE cname='数学' or cname='大学英语') and student.sno=sc.sno
查询结果:
查询4
查询4
查询4
查询4
查询4
sno
sname
sdept
cno
grade
200515004
张衡
IS
2
46
查询结果:
查询5
查询5
查询5
查询5
sno
sname
ssex
sdept
200515001
赵菁菁

CS
11.至少选修“数据库”或“数据结构”课程的学生的基本信息;

多表查询的练习 的答案

多表查询的练习 的答案

多表查询:在图书管理数据库“Library”:1、查询每个读者的详细信息(读者及借阅图书的信息),允许有重复列select Reader.*,Borrow.*from Reader, Borrowwhere Reader.RID=Borrow.RID或者select Reader.*,Borrow.*from Reader inner join Borrow on Reader.RID=Borrow.RID2、从Library中查询每个读者的详细信息(读者、读者类型、借阅图书信息),不允许有重复的列查看全部select a.*, b.*,c.*from Reader a , Borrow b , ReaderType cwhere a.RID=b.RID and a.TypeID=c.TypeID挑选出列:select a.RID,a.Rname,b.typeid,bid,lenddate,returndatefrom Reader a , Borrow b , ReaderType cwhere a.RID=b.RID and a.TypeID=c.TypeID3、从表“Reader”和表“Borrow”中查询出读者的借阅情况,包括没有借书的读者情况。

(提示:左外连接)select Reader.*,Borrow.rid,bidfrom Reader left join Borrow on Reader.RID=Borrow.RID4、从表“Borrow”和表“Book”中查询出图书被借阅的情况,包括没有被借的图书情况(提示:右外连接)select Borrow.rid,Borrow.bid,book.bid,bname,authorfrom Borrow right join book on Borrow.bid=book.bid5、从图书馆Library 中查询出同名且由不同作者编著的图书(提示:自连接)自连接的格式:格式:From 表名1 别名1 join 表名1 别名2 on 连接表达式select a.bid,a.bname,a.author,b.bid,b.bname,b.authorfrom book a ,book bwhere a.bname=b.bname and a.author!=b.author6、对读者表“Reader”、借阅表“Borrow”和图书表“Book”三个表进行等值连接。

多表测试题及答案

多表测试题及答案

多表测试题及答案一、单选题1. 多表查询中,用于连接两个表的关键字是:A. 外键B. 索引C. 连接词D. 主键答案:C2. 在SQL中,以下哪个操作符用于返回两个表中都存在的行?A. UNIONB. INTERSECTC. EXCEPTD. JOIN答案:B3. 以下哪个选项不是多表查询的类型?A. 内连接B. 外连接C. 交叉连接D. 子查询答案:D二、多选题1. 在多表查询中,以下哪些选项可以用于连接表?A. INNER JOINB. LEFT JOINC. RIGHT JOIND. FULL OUTER JOIN答案:A, B, C, D2. 多表查询中,以下哪些选项可以作为连接条件?A. 相等条件B. 不相等条件C. 大于条件D. 小于条件答案:A, B, C, D三、判断题1. 多表查询时,必须使用连接词来连接两个表。

(对/错)答案:对2. 在多表查询中,可以使用WHERE子句来限制查询结果。

(对/错)答案:对3. 多表查询的结果集大小一定比任何一个参与查询的表都要小。

(对/错)答案:错四、简答题1. 描述多表查询中内连接和外连接的区别。

答案:内连接只返回两个表中匹配的行,而外连接会返回至少在一个表中存在的所有行,包括不匹配的行。

2. 解释多表查询中使用交叉连接的目的。

答案:交叉连接用于生成两个表的所有可能的行组合,即使两个表之间没有共同的列。

结束语:通过以上题目的练习,可以加深对多表查询操作的理解和应用。

希望这些题目能够帮助你更好地掌握多表查询的相关知识。

数据库实验报告三 多表查询

数据库实验报告三 多表查询

实验三多表查询【实验目的】掌握多张表进行连接查询,主要包括连接查询、子查询和相关子查询等内容。

【实验内容】在实验一的基础上完成下列查询。

(1)(连接查询) 求选修了课程001且成绩在70分以下或成绩在90分以上的学生的姓名、课程名称和成绩。

select sname,cname,score from student,score,coursewhere student.sno=score.sno and o=o and o='001' and scorebetween 70 and 90;(2)(连接查询与表的别名) 求选修了课程001且成绩在70分以下或成绩在90分以上的学生的姓名、课程名称和成绩。

select sname,cname,score from student s1,score s2,course c1where s1.sno=s2.sno and o=o and o='001' and s2.SCOREbetween 70 and 90;(3)(自然连接查询) 求学生学号、姓名以及其选修课程的课程号和成绩。

select s1.sname,s1.sno,o,s2.score from student s1,score s2where s1.sno=s2.sno;(4)(自身连接查询) 求年龄大于'李丽' 的所有学生的姓名、系和年龄。

select s2.sname,s2.sdept,s2.sage from student s1,student s2 where s1.sname=' 李丽' and s2.sage>s1.sage;(4)(外部连接查询) 求未选修任何课程的学生的姓名。

select * from student a left join score b on a.sno=b.snowhere b.sno is null;(6)(子查询) 求与‘李丽’年龄相同的学生的姓名和系。

数据库系统原理实验报告多表查询

数据库系统原理实验报告多表查询

《数据库系统原理》实验报告实验名称:多表查询学院:班级:学号:姓名:实验日期:一、实验准备为了使该实验顺利进行,需要有一台计算机,计算机必须安装Windows 2000、Windows XP或Windows NT操作系统,还必须安装Microsoft SQL Server 2000Microsoft SQL Server 2005任意一版本(个人版、标准版、企业版)。

实验开始之前,必须将本章实验四中创建好的SCDB数据库和ShiYan数据库附加到当前SQL数据库服务器中。

二、实验目的(1)了解查询的概念和方法。

(2)掌握查询分析器的使用方法。

(3)掌握复杂查询的实现方法。

(4)掌握多表连接的方法。

(5)掌握嵌套查询与集合查询的基本方法。

(6)掌握SELECT语句在多表查询中的应用。

三、实验内容针对实验数据库ShiYan,完成以下多表查询操作:(1)查询为工程J1供应红色零件的供应商号码SNO。

在查询分析器中输入下面脚本:use ShiYangoselect SNOfrom SPJwhere PNO IN(select PNOfrom Pwhere COLOR='红'and JNO='J1')结果:(2)查询没有使用天津供应商生产的零件并且当前工程所使用零件的颜色全部为红色的工程号JNO。

在查询分析器中输入下面脚本:use ShiYanselect JNOfrom SPJwhere SNO IN(select SNOfrom Swhere city!='天津')and pno in (select pnofrom pwhere color='红')结果:(3)查询至少选用了供应商S1所供应的全部零件的工程号JNO。

在查询分析器中输入下面脚本:use ShiYangoselect DISTINCT JNOfrom SPJwhere EXISTS(select SNOfrom Swhere SNO='S1')结果:(4)找出工程项目J2使用的各种零件的名称及其重量。

数据库实验3答案

数据库实验3答案

实验三:交互式SQL语句的使用1、实验目的(1)掌握数据库对象的操作过程,包括创建、修改、删除(2)熟悉表的各种操作,包括插入、修改、删除、查询(3)熟练掌握常用SQL语句的基本语法2、实验平台使用SQL Server提供的Microsoft SQL Server Management Studio工具,交互式使用SQL语句。

3 实验内容及要求选择如下一个应用背景之一:●学生选课系统●习题3、4、和5中使用的数据库●其它你熟悉的应用(1)建立一个数据库和相关的表、索引、视图等数据库对象,练习对表、索引和视图的各种操作。

(2)要求认真进行实验,记录各实验用例及执行结果。

(3)深入了解各个操作的功能。

实验要求包括如下方面的内容:3.1 数据定义1.基本表的创建、修改及删除2.索引的创建3.视图的创建3.2 数据操作完成各类更新操作包括:1.插入数据2.修改数据3. 删除数据3.3 数据查询操作完成各类查询操作1.单表查询2.分组统计3. 连接查询4. 嵌套查询5. 集合查询3.4 数据操作1.创建视图2.视图查询参考示例:建立一个学生选课数据库,练习对表、视图和索引等数据库对象的各种操作。

一、数据定义创建学生选课数据库ST,包括三个基本表,其中Student表保存学生基本信息,Course表保存课程信息,SC表保存学生选课信息,其结构如下表:表1. Student表结构表2. Course表结构表3. SC表结构1.创建、修改及删除基本表(1)创建Student表CREATE TABLE Student(Sno CHAR(8)PRIMARY KEY,Sname CHAR(8),Ssex CHAR(2)NOT NULL,Sage INT,Sdept CHAR(20));(2)创建Course表CREATE TABLE Course(Cno CHAR(4)PRIMARY KEY,Cname CHAR(40)NOT NULL,Cpno CHAR(4),Ccredit SMALLINT,);(3)创建SC表CREATE TABLE SC(Sno CHAR(8)FOREIGN KEY (Sno)REFERENCES Student(Sno),Cno CHAR(4),Grade SMALLINT,);(4)创建员工表EmployeeCREATE TABLE Employee(编号CHAR(8)PRIMARY KEY,姓名VARCHAR(8)not null部门CHR(40),工资numeric(8,2),生日datetime,职称char(20),);指出该语句中的错误并改正后执行。

mysql数据库实验答案

mysql数据库实验答案

实验一创建、修改数据库和表结构1、用create建立教学数据库的五个基本表:(1)学生表(学号,姓名,性别,年龄),student((Sno, sname,ssex,sage) ;(2)课程表(课程号,课程名,学分),Course (Cno, Cname, credit) ;(3)选课表(学号,课程号,成绩),SC (Sno,, Cno, grade ) ;(4) 教师表(教师号,姓名,性别,出生年月,系部,职称,地址),T(Tno,Tname,ssex,birthday,dept,title,address) ;(5) 工资表(教师号,基本工资,职务工资,合计),Salary(Tno,jbgz,zwgz,hj);Create Database Student default character set utf8 default COLLATE utf8_bin;Use Student;Create Table Student(SNo c har(20) primary key,SName char(20) ,SSex char(4) default '男',SAge int) ENGINE=InnoDB;Create Table Course(CNo c har(20) primary key,CName char(20) NOT NULL,CRedit f loat) ENGINE=InnoDB;Create Table SC(SNo c har(20) NOT NULL,CNo c har(20) NOT NULL,Grade float,Primary Key(SNo, CNo),Foreign Key(SNo) References Student(SNo) On Delete Cascade,Foreign Key(CNo) References Course(CNo))ENGINE=InnoD B;Create Table T(TNo c har(20) Primary Key,TName char(20) NOT NULL,TSex char(4) default '男',birthday DateTime,dept char(20),title char(20),address char(20))ENGINE=InnoDB;Create Table Salary(TNo c har(20) NOT NULL,jbgz float,zwgz float,hj float,Foreign Key(TNo) References T(TNo) On Delete Cascade)ENGINE=InnoDB;2、用alter修改基本表(1)在已存在的学生表student中增加一个sdept(系)的新的属性列;alter table Student add Dept char(20);(2)将学生表student中sname属性列的数据类型修改为变长字符串varchar(10)。

数据库查询实验练习(附答案)

数据库查询实验练习(附答案)

1 操作查询
1.1 生成表查询。

从"图书信息表"中查询“高等教育”出版社出版的图书的记录(包括字段:图书编号、图书名称、作者、出版社定价),生成数据表“图书信息临时表”。

查询1。

注意:生成的表的最后一个字段名称为“出版社定价”,而非“定价”。

1.2 从“图书信息表”中查询"机械工业"出版社出版的图书的记录,追加到“图书信息临时表”中。

查询2。

1.3 删除查询。

从“图书销售记录”表中删除2005-10-31以前的销售记录。

查询3。

1.4 更新查询。

近期销售业绩每况愈下,图书定价是重要的影响因素,所以,我们要调整价格。

更新"图书信息表"中的记录,使所有图书的定价更新到8折(即原价的80%)。

查询4。

注意:此更新查询不要多次执行,否则定价会越来越低。

1.5 更新查询。

继续进行价格调整,将从未售出图书的定价更新为10元。

查询5。

注意:首先需要找到“未售出”的记录(可参考上次实验的查询2)。

2 交叉表查询
2.1 查询各出版社出版的各类图书的总数量,以交叉表的形式实现。

查询6。

做法和结果所呈现的样式可参考下图
做法。

mysql多表查询实训题

mysql多表查询实训题

MySQL多表查询实训题以下是一个MySQL多表查询的实训题示例:假设有两个表:students(学生)和 courses(课程)。

students 表包含学生的信息,如 id(学生ID)、name(姓名)和 age(年龄)。

courses 表包含课程的信息,如 id(课程ID)、name(课程名称)和 student_id(学生ID)。

实训题:1.查询所有学生的姓名和年龄。

2.查询选修了课程名为"Math" 的学生的姓名和年龄。

3.查询选修了课程名为"Math" 的学生的姓名、年龄以及他们选修的课程名称。

4.查询选修了课程名为"Math" 的学生的姓名、年龄以及他们选修的课程名称,并按照年龄降序排列。

5.查询选修了课程名为"Math" 的学生的姓名、年龄以及他们选修的课程名称,并按照年龄升序排列,如果年龄相同则按照姓名的字母顺序排列。

请使用MySQL多表查询完成上述实训题,并给出相应的SQL语句。

1.查询所有学生的姓名和年龄。

SQL语句:sql复制代码SELECT , s.age FROM students s;2.查询选修了课程名为"Math" 的学生的姓名和年龄。

SQL语句:sql复制代码SELECT , s.age FROM students s JOIN courses c ON s.id = c.student_idWHERE = 'Math';3.查询选修了课程名为"Math" 的学生的姓名、年龄以及他们选修的课程名称。

SQL语句:sql复制代码SELECT , s.age, AS course_name FROM students s JOIN courses c ON s.id = c.student_id WHERE = 'Math';4.查询选修了课程名为"Math" 的学生的姓名、年龄以及他们选修的课程名称,并按照年龄降序排列。

数据库数据查询实验报告和答案

数据库数据查询实验报告和答案

韶关学院
学生实验报告册
实验课程名称:数据库技术与应用
实验项目名称:数据库的数据查询
实验类型(打√):(基础☑
设计
院系:专业班级:姓名学号:
指导老师:
韶关学院教务处编制
一、实验预习报告内容
二、实验原始(数据)记录
实验时间:2013年10月22日(星期二第七八节)
三、实验报告内容
图图
图7
图16
图18
图20
图22
图37
注:1、如个别实验的实验报告内容多,实验报告册页面不够写,或有识图、画图要求的,学生应根据实验指导老师要求另附相同规格的纸张并粘贴在相应的“实验报告册”中。

2、实验报告册属教学运行材料,院系(中心)应按有关规定归档保管。

21。

大学mysql实验报告(四)附答案

大学mysql实验报告(四)附答案

⼤学mysql实验报告(四)附答案实验报告(四)专业:班级:学号:姓名:实验名称:数据库的多表连接查询实验报告内容:1、⽤SELECT语句完成第183页实验3的23)27)28)31)的查询语句23) 求选修了课程的学⽣⼈数SELECT COUNT(*)选课⼈数FROM Enrollment27)求选修每门课程的学⽣⼈数。

SELECT Cno AS '课程号', COUNT(Sno) AS '选修⼈数'FROM Enrollment GROUP BY Cno28)求每个学⽣的学号和各门课程的总成绩。

SELECT Sno '学号', Sum(grade) '总成绩' FROM Enrollment GROUP BY Sno31)查询选修了C1课程的学⽣的学号和成绩,查询结果按成绩降序排列。

SELECT Sno, Grade FROM Enrollment WHERE Cno='C1' ORDER BY Grade DESC32)查询全体学⽣信息,查询结果按所在系的系名升序排列,同⼀系的学⽣按年龄降序排列。

SELECT * FROM Students ORDER BY Sdept, Sage DESC2、⽤SELECT语句完成第183页实验4的2)3)4)6)的查询语句2)查询每个学⽣的学号、姓名、选修的课程名、成绩。

SELECT Students.Sno,Sname, Cname,GradeFROM Students,Courses,EnrollmentWHERE Students.Sno = Enrollment.Sno AND /doc/4b14113722.htmlo= /doc/4b14113722.htmlo3)查询选修了C2且成绩⼤于90分的学⽣的学号、姓名、成绩。

SELECT Students.Sno,Sname, GradeFROM Students, EnrollmentWHERE Students.Sno = Enrollment.Sno AND Cno='C2 ' AND Grade>904)求计算机系选修课程超过2门课的学⽣的学号、姓名、平均成绩, 并按平均成绩从⾼到低排序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

from OrderMaster
where orderSum=(select max(orderSum)
from OrderMaster)
(8)在订单主表中查询订单金额大于“E2005002业务员在2008-1-9这天所接的任一张
订单的金额”的所有订单信息。

SELECT*
FROM OrderMaster
WHERE orderSum>any
(SELECT orderSum
FROM OrderMaster
WHERE salerNo='E2005002'AND orderDate='20080109')
(9)查询单价高于400元的商品编号、商品名称、订货数量和订货单价。

SELECT a.productNo,productName,quantity,price
FROM Product a, OrderDetail b
WHERE a.productNo=b.productNo AND price>400
ORDER BY productName
(10)分别使用左外连接、右外连接、完整外部连接查询单价高于400元的商品编号、商
品名称、订货数量和订货单价,并分析比较检索的结果。

左外连接命令:
SELECT a.productNo,productName,quantity,price
FROM Product a LEFT OUTER JOIN OrderDetail b
ON a.productNo=b.productNo
WHERE price>400
Select a.productNo , a.productName , b.quantity,b.price
From OrderDetail As b left JOIN Product As a
ON(a.productNo=b.productNo)and price>400
•这两个左外连接,第一个是先去掉单价小于等于400的商品,然后执行左外连接,该查询的结果表明商品表中所有单价高于400的商品全部被订购了
第二个左外连接是将那些单价小于等于400的商品用空值替代
右外连接命令:
SELECT a.productNo,productName,quantity,price
FROM Product a RIGHT OUTER JOIN OrderDetail b
ON a.productNo=b.productNo
WHERE price>400
Select a.productNo , a.productName , b.quantity,b.price
From OrderDetail As b RIGHT JOIN Product As a
ON(a.productNo=b.productNo)and price>400
全连接命令:
SELECT a.productNo,productName,quantity,price
FROM Product a FULL OUTER JOIN OrderDetail b
ON a.productNo=b.productNo
WHERE price>400
Select a.productNo , a.productName , b.quantity,b.price From OrderDetail As b full JOIN Product As a ON(a.productNo=b.productNo)and price>400
右外连接和全外连接的分析同左外连接
从上述结果可知:若表a和表b做外连接,且b表是外码表,则a和b表左外连接可能会出现空值,但是右连接一定不会出现空值,全外连接与左外连接一样的结果。

(11)使用左外连接查找每个客户的客户编号、名称、订货日期、订单金额,其中订货日
期不要显示时间,日期格式为“yyyy-mm-dd”,按客户编号排序,同一客户再按订单金额降序排序输出。

SELECT a.customerNo,customerName,
convert(char(10),orderDate,120) orderDate,orderSum FROM Customer a LEFT OUTER JOIN OrderMaster b ON
a.customerNo=
b.customerNo
ORDER BY a.customerNo,orderSum desc。

相关文档
最新文档