文档库 最新最全的文档下载
当前位置:文档库 › SQL练习题

SQL练习题

SQL练习题
SQL练习题

①查询雇员表中工资最高的雇员的员工号、员工姓名、工资和部门号。

select empno,ename,sal,deptno from emp

where sal = (select max(sal) from emp);

②单条查询语句综合练习题:

薪水大于1200的雇员,按照部门编号进行分组,分组后的平均薪水必须大于1500,查询各分组的平均工资,按照工资的倒序进行排列。

select avg(sal) avg_sal, deptno

from emp

where sal > 1200

group by deptno

having avg_sal > 1500

order by avg_sal desc;

说明:此句基本上包含了SQL语句的子语句和排列顺序:select(要查询的字段)->from (从哪一张或哪几张表或视图)->where(过滤条件)->group by(having)(分组及条件)->order by(按哪个或哪几个字段进行升序或降序排列)。

注意:SqlServer4.1中可能不支持在order语句中使用组函数avg,报错说:invalid use of group function(错误提示和现象有点对不上)

解决办法:给avg(sal)起个别名avg_sal,这样在order语句中就直接使用这个别名

查询每个雇员和其所在的部门名

select ename,dname from emp,dept where (emp.deptno = dept.deptno);

或者(推荐)(on中就写连接条件,where中就写过滤条件,各司其职)

select ename,dname from emp join dept on(emp.deptno = dept.deptno);

④非等值连接:

查询每个雇员姓名及其工资所在的等级

select ename,grade from emp e join salgrade s on(e.sal between s.losal and s.hisal);

⑤查询雇员名第2个字母不是a的雇员的姓名、所在的组名、工资所在的等级。

三张表的连接查询(先连接,再加上where语句进行过滤)

select ename,dname,grade

from emp e join dept d on(e.deptno = d.deptno)

join salgrade s on(e.sal between s.losal and s.hisal)

where ename not like '_a%';

⑥查询每个雇员和其经理的姓名

自连接:(事实上只有一张表,但把它当成两张表来用,使用别名来进行区分)

select e1.ename,e2.ename from emp e1,emp e2 where (e1.mgr = e2.empno);

或者:(推荐用join语句)

select e1.ename,e2.ename from emp e1 join emp e2 on(e1.mgr = e2.empno);

⑦查询每个雇员和其经理的姓名(包括公司老板本身(他上面没有经理))

左外连接(会把左表中不符合连接条件的记录也显示出来):

select e1.ename,e2.ename from emp e1 left join emp e2 on(e1.mgr = e2.empno);

⑧查询每个雇员的姓名及其所在部门的部门名(包括没有雇员的部门)

右外连接(会把右表中不符合连接条件的记录也显示出来):

select ename,dname from emp e right join dept d on(e.deptno = d.deptno);

⑨子查询1:查询每个部门中工资最高的人的姓名、薪水和部门编号

先求出每个部门中的最高工资:

select max(sal) max_sal,deptno from emp group by deptno

在使用连接查询:

select ename,sal,e.deptno

from emp e join

(select max(sal) max_sal,deptno from emp group by deptno) t

on(e.sal = t.max_sal and e.deptno = t.deptno);

⑩子查询2:查询每个部门平均工资所在的等级

select deptno,avg_sal,grade from salgrade

join(select deptno,avg(sal) avg_sal from emp group by deptno) t

on(t.avg_sal between salgrade.losal and salgrade.hisal);

或者:

select deptno,avg_sal,grade from

(select deptno,avg(sal) avg_sal from emp group by deptno) t

join salgrade s on(t.avg_sal between s.losal and s.hisal);

?子查询3:查询每个部门内平均的薪水等级

先求每个人的薪水等级

select ename,deptno,grade from emp join salgrade s

on(emp.sal between s.losal and s.hisal);

再按组进行分组求平均

select deptno,avg(grade) from

(select ename,deptno,grade from emp join salgrade s

on(emp.sal between s.losal and s.hisal)) t

group by deptno;

?子查询4:查询雇员中有哪些人是经理人:

select ename from emp where empno in(select distinct mgr from emp); 或者:

select ename from emp join

(select distinct mgr from emp) t

on(emp.empno=t.mgr);

?子查询5:不准用库函数,求雇员表中薪水的最高值。

思路:两张完全相同的雇员表,左边一张,右边一张。拿左表中的薪水和右表中的薪水进行比较,左表中的最高薪水值必定不可能小于右表中的某一薪水值。

先求出emp表中最高薪水以下的所有薪水值

select distinct e1.sal from emp e1 join emp e2 on(e1.sal < e2.sal);

不在此列的薪水值即为最高薪水值

select distinct sal from emp where sal not in(select distinct e1.sal from emp e1 join emp e2 on(e1.sal < e2.sal));

?子查询6:平均薪水最高的部门的部门编号

①:先求出每个部门的平均薪水和部门号(把这个看成一张表)

select avg(sal) avg_sal,deptno from emp group by deptno;

②:再求出平均薪水最高值(把这个看成一个值)

select max(avg_sal) from (select avg(sal) avg_sal,deptno from emp group by deptno) t;

③:对①表使用②条件进行查询即可

select avg_sal,deptno from

(select avg(sal) avg_sal,deptno from emp group by deptno) t1

where avg_sal=

(select max(avg_sal) from (select avg(sal) avg_sal,deptno from emp group by deptno) t2);

说明:在Oracle中可以使用组函数嵌套来稍微简化SQL语句的复杂程度(最多是两层嵌套):select max(avg(sal)) from emp group by deptno;来求出平均薪水最高值

注意:这种组函数嵌套在MySQL中不可以用

?子查询7:求平均薪水最高的部门的部门名称(在子查询6的基础之上)

说明:在实际应用中,达到这种程度的SQL语句已经算比较复杂了。

select dname from dept where deptno =

( select deptno from

(select avg(sal) avg_sal,deptno from emp group by deptno) t1

where avg_sal=

(select max(avg_sal) from (select avg(sal) avg_sal,deptno from emp group by deptno) t2)

);

-----------------------------------------------------------------------------------------------------

?子查询8:查询平均薪水的等级最低的部门名称

说明:在实际应用中,很少使用到如此复杂的SQL语句。但要掌握一步步的思路,本例是为了锻炼逻辑能力。

①求平均薪水

select avg(sal) avg_sal,deptno from emp group by deptno;

②求平均薪水的等级

select avg_sal,deptno,grade from

(select avg(sal) avg_sal,deptno from emp group by deptno) t

join salgrade s on(t.avg_sal between s.losal and hisal);

③求平均薪水的等级最低的那个值

select min(grade) from

( select avg_sal,deptno,grade from

(select avg(sal) avg_sal,deptno from emp group by deptno) t join salgrade s on(t.avg_sal between s.losal and hisal)

) t3;

④平均薪水的等级最低的部门的部门编号(将②和③组合起来,将②看成要查询的表,将③看成查询条件)

select deptno from

( select avg_sal,deptno,grade from

(select avg(sal) avg_sal,deptno from emp group by deptno) t join salgrade s on(t.avg_sal between s.losal and hisal)

) t2

where grade=

( select min(grade) from

( select avg_sal,deptno,grade from

(select avg(sal) avg_sal,deptno from emp group by deptno) t

join salgrade s on(t.avg_sal between s.losal and hisal) ) t3

);

⑤平均薪水的等级最低的部门名称

select dname from dept where deptno=

( select deptno from

( select avg_sal,deptno,grade from

(select avg(sal) avg_sal,deptno from emp group by deptno) t join salgrade s on(t.avg_sal between s.losal and hisal)

) t2

where grade=

( select min(grade) from

( select avg_sal,deptno,grade from

(select avg(sal) avg_sal,deptno from emp group by deptno) t join salgrade s on(t.avg_sal between s.losal and hisal) ) t3

)

);

或者:还有种思路,使用join连接多张表(效果同上面的④和⑤,但比上面的稍微简单些)④查询平均薪水的等级最低的部门的部门名、部门编号、平均工资和等级

(将②和③组合起来,将②和dept表join起来,将③看成查询条件)

select dname,t2.deptno,avg_sal,grade from

( select avg_sal,deptno,grade from

(select avg(sal) avg_sal,deptno from emp group by deptno) t

join salgrade s on(t.avg_sal between s.losal and hisal)

) t2

join dept on(t2.deptno=dept.deptno)

where t2.grade=

( select min(grade) from

( select avg_sal,deptno,grade from

(select avg(sal) avg_sal,deptno from emp group by deptno) t

join salgrade s on(t.avg_sal between s.losal and hisal)

) t3

);

说明:本例中有个待改进的地方,就是有重复的语句段(出现了两次):

select avg_sal,deptno,grade from

(select avg(sal) avg_sal,deptno from emp group by deptno) t

join salgrade s on(t.avg_sal between s.losal and hisal)

sql练习题+答案

(一)新建以下几个表 student(学生表): 其中约束如下: (1)学号不能存在相同的 (2)名字为非空 (3)性别的值只能是’男’或’女’ (4)系包括这几个:信息系,计算机科学系,数学系,管理系,中文系,外语系,法学系 (5)出生日期为日期格式 (6)年龄为数值型,且在0~100之间

cs(成绩表): 其中约束如下: (1)sno和cno分别参照student和course表中的sno,cno的字段(2)cj(成绩)只能在0~100之间,可以不输入值 course(课程表)

其约束如下: (1)课程号(cno)不能有重复的 (2)课程名(cname)非空 (三)针对学生课程数据库查询 (1)查询全体学生的学号与姓名。 (2)查询全体学生的姓名、学号、所在系,并用别名显示出结果。 (3)查询全体学生的详细记录。 (4)查全体学生的姓名及其出生年份。 (5)查询学校中有哪些系。

(6)查询选修了课程的学生学号。 (7)查询所有年龄在20岁以下的学生姓名及其年龄。 (8)查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。 (9)查询年龄不在20~23岁之间的学生姓名、系别和年龄。 (10)查询信息系、数学系和计算机科学系生的姓名和性别。 (11)查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。 (12)查询所有姓刘学生的姓名、学号和性别。

(13)查询学号为2009011的学生的详细情况。(具体的学号值根据表中数据确定) (14)查询姓“欧阳”且全名为三个汉字的学生姓名 (15)查询名字中第2个字为“晨”字的学生的姓名和学号 (16)查询所有不姓刘的学生姓名。 (17)查询sql课程的课程号和学分。 (18)查询以"DB_"开头,且倒数第3个字符为 i的课程的详细情况。 (19)查询缺少成绩的学生的学号和相应的课程号。

SQL 操作练习题

SQL Server(三级)操作练习题 1数据库运行监控 1.1使用SQL语句实现DMV查询,查找当前挂起的I/O 请求,将结果保存在 “c:\gatDoc\SQL3J2.1.1\2.1.1.doc”文档中。(提示:查询数据库master中的系统 视图sys.dm_io_pending_io_requests和系统函数 sys.dm_io_virtual_file_stats) 1.2以SA身份登录数据库,在Master数据库上执行SQL语句:Select * from sysobjects 。利用SQL Server Manangement Studio监控数据库服务器,观察每个 登录用户在数据库执行的命令,请在“c:\gatDoc\SQL3J2.1.1\2.1.1.doc”文档内写 出操作步骤,并在该文档内将下列操作界面截屏后保存:阅读进程信息,sa执行 的命令。(提示:启动活动监视器) 1.3打开SQL Server Profiler,建立跟踪,对数据库活动进行监视,同时打开性能监视 器,利用SQL Server: Memory对象监视数据库的一般活动,运行3分钟后,观察 重合时段内SQL Serve的活动和上述性能计数器的值,请在“2.1.1.doc”文档内 写出操作步骤,并在该文档内将下列三个操作界面截屏后依次保存: 1)在SQL Server Profiler中新建跟踪mytrace。 2)在性能监视器中新建SQL Server: Memory计数器。 3)在SQL Server Profiler中查看指定性能计数器的情况。 2数据库备份计划 2.1利用维护计划功能,设置每天1:00自动执行增量备份(差异备份)数据库model 到文件夹C:\Backup,并将操作步骤写在c:\gatDoc\SQL3J2.2.1\2.2.1.doc文档里面, 将下面两个操作界面截屏后依次保存在同一个文档里: 1)设置备份数据库任务的界面 2)维护计划设置完成的界面 2.2利用SQL Server Agent功能(作业功能),创建作业job1,设置每天4:00完成 以下步骤:先删除备份文件c:\gatDoc\SQL3J2.2.1\model.bak,然后对数据库model 进行完全备份,保存为c:\gatDoc\SQL3J2.2.1\model.bak,请在2.2.1.doc文档里写 出操作步骤,并将下面三个操作界面截屏后依次保存:

SQL复习题答案

SQL Server数据库应用管理-习题集 说明:本习题集所涉及的数据库,名为Student,其数据表有3个,分别是学生(学号,,性别,年龄),课程(课号,课名,学分),选修(学号,课号,成绩)。 一、单项选择题 1.下列属于SQL Server系统数据库的是。 A.master B.Sysbase C.student D.Database 2.SQL Server中,数据库主数据文件扩展名为。 A.ldf B.mdf C.ndf D.dbf 3.SQL Server中,索引类型按结构划分,包括。 A.聚集索引和非聚集索引B.主索引和次索引C.单索引和复合索引D.索引和外索引4.SQL Server的数据定义语句是。定义:创建 A.CREATE,DROP,ALTER B.INSERT,UPDATE,DELETE C.SELECT,DELETE,UPDATE D.CREATE,GRANT,INSERT 5.下面的描述正确的是。 A.每个数据文件中可以有多个主数据文件 B.只允许有一个次数据文件。 C.一个数据库有主数据库文件即可。 D.一个数据库至少由一个主数据文件和一个日志文件组成。 6.下面字符串能与通配符表达式 ABC%a 进行匹配的是。 A. BCDEF B.A_BCD C. ABCDa D. ACBDE 7.下列属于数据库管理系统的是。 A.SQL Server 2005 B.Excel

C.Windows 2000 D.IE6 8.实体完整性要求主属性不能取空值,这一点通常是通过实现。A.定义外部键来保证 B.定义主键来保证 C.用户定义的完整性来保证 D.关系系统自动保证 9.SQL Server的数据操纵命令是。 A.SELECT,INSERT,UPDATE,DELETE B.CREATE,INSERT,UPDATE,DELETE C.GRANT,CREATE,REVOKE D.SELECT,CREATE,DROP,ALTER 10.下面的描述错误的是。 A. 每个数据文件中有且只有一个主数据文件 B.可以有多个次数据文件。 C.一个数据库有主数据库文件即可。 D.一个数据库至少由主数据文件和日志文件组成。 11.对于查询语句的结果,有时会出现重复的数据行,可以使用以下哪个关键字可消去重复记录行。 A. Only B. Select C. Distinct D. Order by 12.下列说法中正确的是。 A.SQL 中局部变量可以不声明就使用 B.SQL 中全局变量必须先声明再使用 C.SQL 中所有变量都必须先声明后使用 D.SQL 中只有局部变量先声明后使用;全局变量是由系统提供的用户不能自己建立。 13.下面对索引的相关描述正确的是:。 A. 经常被查询的列不适合建索引。

SQL查询练习题

--练习题01:查找出已修学分低于20分的学生的姓名、性别和班主任。 select 姓名,性别,班主任 from 学生,班级 where 学生.班级编号=班级.班级编号 and 已修学分<20 --练习题02:查找出学生“王林”的班主任。 select 班主任 from 班级 where 班级编号 in(select 班级编号 from 学生 where 姓名='王林') --练习题03:查找出班主任“刘成河”班的全部男生的信息。 select 学生.* from 学生,班级 where 性别='男' and 班主任='刘成河' and 学生.班级编号=班级.班级编号 --练习题04:查找出课程“中国历史”考试及格的全部学生的学号、姓名、班级名称和分数。Select 学生.学号,姓名,班级名称,分数 from 学生,成绩,课程,班级 where 课程名称='中国历史' and 课程.课程编号=成绩.课程编号 and 学生.学号=成绩.学号 and 学生.班级编号=班级.班级编号 and 分数>=60 --练习题05:查找出全部同学的所有考试的姓名、课程名称、分数,查找结果的格式如下:Select 姓名,课程名称,分数 from 学生,课程,成绩 where 课程.课程编号=成绩.课程编号and 学生.学号=成绩.学号 --练习题01:查找出班主任“刘成河”班的全部男生的信息。 Select*from 学生 where 性别='男' and 班级编号 in(select 班级编号 from 班级 where 班主任='刘成河') --练习题02:查找出考试全及格的课程名称。 Select 课程名称 from 课程 where 课程编号 not in (select 课程编号 from 成绩 where 分数<60) select 课程名称 from 课程 where not exists (select * from 成绩 where 成绩.课程编号=课程.课程编号 and 分数<60) --练习题03:查找出所有学生的考试都及格的班级,并排除那些没有学生的班级。 select 班级名称 from 班级 where 总人数>0 and 班级编号 not in (select 班级编号 from 学生 where 学号 in (select 学号 from 成绩 where 分数<60))

SQLServer综合练习题

SQL Server综合练习题 说明: 请在做题前找到随题文件北风贸易.mdf和北风贸易.ldf,附加数据库并指定数据库名为“w+学号最后两位+姓名”,如“w23张三”,以下所有的操作均完成在这个数据库中,请严格按照题目要求答题,包括字段次序。 一、基础设计(共40分) 业务介绍: ●Sporting Goods是一家美国批发公司,接收来自世界范围内的运动产品零售商店的定单。 该公司的客户遍布国内外,每一个客户都有一个唯一标识号。 ●公司必须保存有客户的商店名称和电话号码、地址、所在城市、州、国家、邮政编码、 信誉等级以及对客户喜好的总体评论。 ●公司需跟踪每一份定单的标识号、订货日期及付款方式。 ●客户所在区域有唯一的名称及标识号。 ●每个区域有一个仓库,仓库具有唯一的标识号及其它信息,包括地址、城市、州、、国 家、邮政编码、经理ID及电话号码等。 ●库存中每一件商品具有唯一的标识号,还必须跟踪产品价格、订购的数量及已发送的数 量。 ●公司对每一种产品,必须知道它唯一的产品标识号及名称。 ●公司有一些雇员或销售代表被派往多个地区,对每一雇员,公司备有其姓、名、唯一的 标识号及计算机登录ID,其他信息包括该雇员进入公司的时间、评语、职务、工资及佣金百分率。 ●对每一个仓库及它存储的产品,公司货单记录有每个产品的存储量、再订货点等。 1) 建立下列9张表 (1)s_customer表(描述客户信息) 列名描述/数据类型 ID Name Phone Address City State County Zip_code Credit_rating Sales_rep_id Region_id comments 客户唯一的标识号,最长3字符 客户名,最长20字符 客户的电话号码,最长20字符 客户地址,最长20字符 客户所在城市,最长20字符 客户居住地所在州,最长15字符 客户居住的国家,最长20字符 客户的邮政编码,最长15字符 客户的信誉等级,最长9字符 客户的销售代表,最长3字符 客户居住的国家所在的区域,最长3字符客户喜好的产品,最长255字符

sql查询练习题含答案

--(1)查询20号部门的所有员工信息。 select * from emp e where e.deptno=20; --(2)查询奖金(COMM)高于工资(SAL)的员工信息。 select * from emp where comm>sal; --(3)查询奖金高于工资的20%的员工信息。 select * from emp where comm>sal*0.2; --(4)查询10号部门中工种为MANAGER和20号部门中工种为CLERK的员工的信息。select * from emp e where (e.deptno=10 and e.job='MANAGER') or (e.deptno=20 and e.job='CLERK') --(5)查询所有工种不是MANAGER和CLERK, --且工资大于或等于2000的员工的详细信息。 select * from emp where job not in('MANAGER','CLERK') and sal>=2000; --(6)查询有奖金的员工的不同工种。 select * from emp where comm is not null; --(7)查询所有员工工资和奖金的和。 select (e.sal+nvl(https://www.wendangku.net/doc/bd15242688.html,m,0)) from emp e; --(8)查询没有奖金或奖金低于100的员工信息。 select * from emp where comm is null or comm<100; --(9)查询员工工龄大于或等于10年的员工信息。 select * from emp where (sysdate-hiredate)/365>=10; --(10)查询员工信息,要求以首字母大写的方式显示所有员工的姓名。 select initcap(ename) from emp; select upper(substr(ename,1,1))||lower(substr(ename,2)) from emp; --(11)显示所有员工的姓名、入职的年份和月份,按入职日期所在的月份排序, --若月份相同则按入职的年份排序。 select ename,to_char(hiredate,'yyyy') year,to_char(hiredate,'MM') month from emp order by month,year; --(12)查询在2月份入职的所有员工信息。 select * from emp where to_char(hiredate,'MM')='02' --(13)查询所有员工入职以来的工作期限,用“**年**月**日”的形式表示。 select e.ename,floor((sysdate-e.hiredate)/365)||'年' ||floor(mod((sysdate-e.hiredate),365)/30)||'月' ||floor(mod(mod((sysdate-e.hiredate),365),30))||'日' from emp e; --(14)查询从事同一种工作但不属于同一部门的员工信息。

数据库sql练习题

use test /* 问题及描述: --1.学生表 Student(S#,Sname,Sage,Ssex) --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表 Course(C#,Cname,T#) --C# --课程编号,Cname 课程名称,T# 教师编号 --3.教师表 Teacher(T#,Tname) --T# 教师编号,Tname 教师姓名 --4.成绩表 SC(S#,C#,score) --S# 学生编号,C# 课程编号,score 分数 select * from Student select * from Course select * from Teacher select * from SC */ --创建测试数据 create table Student(S# varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10)) insert into Student values('01', N'赵雷','1990-01-01', N'男') insert into Student values('02', N'钱电','1990-12-21', N'男') insert into Student values('03', N'孙风','1990-05-20', N'男') insert into Student values('04', N'李云','1990-08-06', N'男') insert into Student values('05', N'周梅','1991-12-01', N'女') insert into Student values('06', N'吴兰','1992-03-01', N'女') insert into Student values('07', N'郑竹','1989-07-01', N'女') insert into Student values('08', N'王菊','1990-01-20', N'女') create table Course(C# varchar(10),Cname nvarchar(10),T# varchar(10)) insert into Course values('01', N'语文','02') insert into Course values('02', N'数学','01') insert into Course values('03', N'英语','03') create table Teacher(T# varchar(10),Tname nvarchar(10)) insert into Teacher values('01', N'张三') insert into Teacher values('02', N'李四') insert into Teacher values('03', N'王五') create table SC(S# varchar(10),C# varchar(10),score decimal(18,1)) insert into SC values('01','01', 80) insert into SC values('01','02', 90) insert into SC values('01','03', 99) insert into SC values('02','01', 70) insert into SC values('02','02', 60) insert into SC values('02','03', 80)

SQL server 查询语句 练习题

SQL server 查询语句练习题 用SQL语句创建四个表: create database tongji go use tongji go create table student ( Sno varchar(20) not null primary key ,--学号 Sname varchar(20) not null,--学生姓名 Ssex varchar(20) not null, --学生性别 Sbirthday datetime,--学生出生年月 Class varchar(20)--学生所在班级 ) go create table teacher--老师 ( Tno varchar(20) not null primary key ,--教工编号(主码) Tname varchar(20) not null,--教工姓名 Tsex varchar(20) not null, --教工性别 Tbirthday datetime,--教工出生年月 Prof varchar(20),--职称 Depart varchar(20) not null--教工所在部门 ) go create table Course--课程 ( Cno varchar(20) not null primary key ,--课程号 Cname varchar(20) not null,--课程名称 Tno varchar(20) not null references teacher(Tno), --教工编号(外码)) go create table Score--分数 ( Sno varchar(20) not null references student(Sno), --学号(外码)Cno varchar(20) not null references Course(Cno), --课程号(外码)primary key(Sno,Cno), Degree Decimal(4,1),--成绩 ) 表中数据如下: 表(一)Student

SQL SERVER练习题及答案学习资料

S Q L S E R V E R练习题 及答案

题目1: 问题描述: 为管理岗位业务培训信息,建立3个表: S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄 C (C#,CN ) C#,CN 分别代表课程编号、课程名称 SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩 1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名--实现代码: SELECT SN,SD FROM S WHERE [S#] IN( SELECT [S#] FROM C,SC WHERE C.[C#]=SC.[C#] AND CN=N\'税收基础\') 2. 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位 --实现代码: SELECT S.SN,S.SD FROM S,SC WHERE S.[S#]=SC.[S#] AND SC.[C#]=\'C2\' 3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位--实现代码: SELECT SN,SD FROM S WHERE [S#] NOT IN( SELECT [S#] FROM SC WHERE [C#]=\'C5\') 4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位 --实现代码: SELECT SN,SD FROM S

WHERE [S#] IN( SELECT [S#] FROM SC RIGHT JOIN C ON SC.[C#]=C.[C#] GROUP BY [S#] HAVING COUNT(*)=COUNT([S#])) 5. 查询选修了课程的学员人数 --实现代码: SELECT 学员人数=COUNT(DISTINCT [S#]) FROM SC 6. 查询选修课程超过5门的学员学号和所属单位 --实现代码: SELECT SN,SD FROM S WHERE [S#] IN( SELECT [S#] FROM SC GROUP BY [S#] HAVING COUNT(DISTINCT [C#])>5) 题目2 问题描述: 本题用到下面三个关系表: CARD 借书卡。 CNO 卡号,NAME 姓名,CLASS 班级 BOOKS 图书。 BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数 BORROW 借书记录。 CNO 借书卡号,BNO 书号,RDATE 还书日期 备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。 要求实现如下15个处理: 1.写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束。

sql语句练习题及答案

一在数据库 school 中建立student , sc, course 表。 学生表、课程表、选课表属于数据库 School ,其各自的数据结构如下:学生 Student (Sno,Sname,Ssex,Sage,Sdept) 课程表 course(Cno,Cname,Cpno,Ccredit) 学生选课 SC(Sno,Cno,Grade) 二设定主码 1 Student表的主码:sno 2 Course表的主码:cno 3 Sc表的主码:sno,cno 1写出使用 Create Table 语句创建表 student , sc, course 的SQL语句create table student (sno char(6), sname varchar(8), ssex char(2), sage smallint, sdept varchar(15), primary key(sno)); Create table course( Cno char(4) primary key, Cname varchar(20), Cpno char(4),

Ccredit tinyint) create table sc (sno char(6), cno char(4), grade decimal(12,2), primary key(sno,cno)); c 2 insert into student values( ’4001’,’赵茵’,’男’,20,’SX’) insert into student values( ’4002’,’杨华’,’女’,21,’JXJ’) Delete 1 删除所有 JSJ 系的男生 delete from Student where Sdept=’JSJ’ and Ssex=’男’; 2 删除“数据库原理”的课的选课纪录 delete from SC where Cno in (select Cno fromCourse where Cname=’数据库原理’); Update 1 修改 0001 学生的系科为: JSJ Update student set sdept=’JSJ’ where sno=’0001’ 2 把陈小明的年龄加1岁,性别改为女。 Update student set age=age+1,ssex=’女’ where sname=’陈小明’ Select 查询语句 一单表 1查询年龄在19至21岁之间的女生的学号,姓名,年龄,按年龄从大到小排列。 select sno, sname, sage from student where ssex=’女’ and sage between 19 and 21 order by sage desc; 2查询姓名中第2个字为“明”字的学生学号、性别。 select sno, ssex from student where sname like ’_明% ’ ; 3查询 1001课程没有成绩的学生学号、课程号

vfp6SQL练习题

SQL综合练习题一 一、单项选择题 1.下列说法正确的是()。 A)SQL 语言不能直接以命令方式交互使用,而只能嵌入到程序设计语言中以程序方式使用 B)SQL 语言只能直接以命令方式交互使用,而不能嵌入到程序设计语言中以程序方式使用 C)SQL 语言不可以直接以命令方式交互使用,也不可以嵌入到程序设计语言中以程序方式使用,是在一种特殊的环境下使用的语言D)SQL 语言既可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用 2.SQL 语言具有()的功能。 A)关系规范化,数据操纵,数据控制 B)数据定义,数据操纵,数据控制 C)数据定义,关系规范化,数据控制 D)关系规范化,数据操纵,数据查询 3.SQL 语言中使用最多的功能是()。 A)数据查询 B)数据修改 C)数据定义 D)数据控制 4.SQL 语句中,Select 命令的分组操作配套使用的条件短语应使用()引导。 A)Where B)like C)Having D)In 5.Sql 语句中删除表中记录的语句是()。 A)Drop B)Erase C)Cancle D)Delete 6.用SQL 语句建立表时为属性定义主索引,应在SQL 语句中使用短语()。 A)Default B)Primary Key C)Check D)Unique 7.SQL 语句的where短语中可以使用通配符是()。 A)* B)? C)% D)— 8.SQL 语句中条件短语的关键字是()。 A)Where B)For C)While D)as 9.SQL 中可以使用的通配符有()。 A)* B)% C)_ D)B 项和c 项 10.SQL 的数据操纵语句不包括()。 A)Insert B)Delete C)Update D)Change 11.字符串匹配运算符是()。 A)Like B)And C)In D)= 12.将查询结果放在数组中应使用()短语。 A)Into Cursor B)To Array C)Into Table D)Into Array 13.SQL 实现分组查询的短语是()。 A)Order By B)Group By C)Having D)Asc 14.用Sql 语句建立表时为属性定义有效性规则,应使用短语是()。 A)Default B)Primary Key C)Check D)Unique 15.书写SQL 语句,若语句要占用多行,在行的末尾要加续行符()。 A): B); C), D)” 16.用于更新表中数据的SQL 语句是()。

sql语句练习50题

sql语句练习50题 Student(Sid,Sname,Sage,Ssex) 学生表 Course(Cid,Cname,Tid) 课程表 SC(Sid,Cid,score) 成绩表 Teacher(Tid,Tname) 教师表 练习内容: 1.查询“某1”课程比“某2”课程成绩高的所有学生的学号; SELECT a.sid FROM (SELECT sid,score FROM SC WHERE cid=1) a,(SELECT sid,score FROM SC WHERE cid=3) b WHERE a.score>b.score AND a.sid=b.sid; 此题知识点,嵌套查询和给查出来的表起别名 2.查询平均成绩大于60分的同学的学号和平均成绩; SELECT sid,avg(score) FROM sc GROUP BY sid having avg(score) >60; 此题知识点,GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。group by后面不能接where,having代替了where 3.查询所有同学的学号、姓名、选课数、总成绩 SELECT Student.sid,Student.Sname,count(SC.cid),sum(score)FROM Student left Outer JOIN SC on Student.sid=SC.cid GROUP BY Student.sid,Sname 4.查询姓“李”的老师的个数; select count(teacher.tid)from teacher where teacher.tname like'李%' 5.查询没学过“叶平”老师课的同学的学号、姓名; SELECT Student.sid,Student.Sname FROM Student WHERE sid not in (SELECT distinct( SC.sid) FROM SC,Course,Teacher WHERE SC.cid=Course.cid AND Teacher.id=Course.tid AND Teacher.Tname='叶平'); 此题知识点,distinct是去重的作用 6.查询学过“```”并且也学过编号“```”课程的同学的学号、姓名; select a.SID,a.SNAME from (select student.SNAME,student.SID from student,course,sc where cname='c++'and sc.sid=student.sid and sc.cid=course.cid) a, (select student.SNAME,student.SID from student,course,sc where cname='english'and sc.sid=student.sid and sc.cid=course.cid) b where a.sid=b.sid; 标准答案(但是好像不好使)SELECT Student.S#,Student.Sname FROM Student,SC WHERE Student.S#=SC.S# AND SC.C#='001'and exists( SELECT * FROM SC as SC_2 WHERE SC_2.S#=SC.S# AND SC_2.C#='002'); 此题知识点,exists是在集合里找数据,as就是起别名 7.查询学过“叶平”老师所教的所有课的同学的学号、姓名; select a.sid,a.sname from (select student.sid,student.sname from student,teacher,course,sc where teacher.TNAME='杨巍巍' and teacher.tid=course.tid and course.cid=sc.cid and student.sid=sc.sid) a 标准答案:SELECT sid,Sname FROM Student WHERE sid in (SELECT sid FROM SC ,Course ,Teacher WHERE SC.cid=Course.cid AND Teacher.tid=Course.tid AND Teacher.Tname='杨巍巍' GROUP BY sid having count(SC.cid)=(SELECT count(cid) FROM Course,Teacher WHERE Teacher.tid=Course.tid AND Tname='杨巍巍')) 8.查询课程编号“”的成绩比课程编号“”课程低的所有同学的学号、姓名;

SQl练习题及答案

18、假设使用如下命令建立了一个grade表: create table grade(low number(3,0),upp number(3),rank char(1)); insert into grade values(90,100,’A’); insert into grade values(80,89,’B’); insert into grade values(70,79,’C’); insert into grade values(60,69,’D’); insert into g rade values(0,59,’E’); commit; 现查询所有同学的Sno、Cno和rank列。 19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 20、查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。 31、查询所有教师和同学的name、sex和birthday. 32、查询所有“女”教师和“女”同学的name、sex和birthday. 33、查询成绩比该课程平均成绩低的同学的成绩表。 34、查询所有任课教师的Tname和Depart. 35 查询所有未讲课的教师的Tname和Depart. 36、查询至少有2名男生的班号。 37、查询Student表中不姓“王”的同学记录。 38、查询Student表中每个学生的姓名和年龄。 39、查询Student表中最大和最小的Sbirthday日期值。 40、以班号和年龄从大到小的顺序查询Student表中的全部记录。 41、查询“男”教师及其所上的课程。 42、查询最高分同学的Sno、Cno和Degree列。 43、查询和“李军”同性别的所有同学的Sname. 44、查询和“李军”同性别并同班的同学Sname. 45、查询所有选修“计算机导论”课程的“男”同学的成绩表 参考答案 查询‘3-105’号课程的平均分。 11、select avg(degree)as 课程平均分 from score where cno='3-105'; 查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。 12、select cno,avg(degree) from score where cno like'3%'group by cno having count(*) >5; 查询最低分大于70,最高分小于90的Sno列。 13、select Sno from score group by Sno having min(degree)>70 and max(degree)<90; 查询所有学生的Sname、Cno和Degree列。 14、select student.Sname,https://www.wendangku.net/doc/bd15242688.html,o,score.degree from student,score where student.Sno=score.Sno; 查询所有学生的Sno、Cname和Degree列。 15、select x.Sno,https://www.wendangku.net/doc/bd15242688.html,ame,x.degree from score x,course y where https://www.wendangku.net/doc/bd15242688.html,o=https://www.wendangku.net/doc/bd15242688.html,o;

Oracle的sql语句练习题含复习资料

Oracle的sql语句练习题含答案(二)Oracle_SQL练习题1 1.选择部门30中的所有员工. 2.列出所有办事员(CLERK)的姓名,编号和部门编号. 3.找出佣金高于薪金的员工. 4.找出佣金高于薪金的60%的员工. 5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料. 6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料. 7.找出收取佣金的员工的不同工作. 8.找出不收取佣金或收取的佣金低于100的员工. 9.找出各月倒数第3天受雇的所有员工. 10.找出早于12年前受雇的员工. 11.以首字母大写的方式显示所有员工的姓名. 12.显示正好为5个字符的员工的姓名. 13.显示不带有"R"的员工的姓名. 14.显示所有员工姓名的前三个字符. 15.显示所有员工的姓名,用a替换所有"A" 16.显示满10年服务年限的员工的姓名和受雇日期. 17.显示员工的详细资料,按姓名排序. 18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面. 19.显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序. 20.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面. 21.显示在一个月为30天的情况所有员工的日薪金,忽略余数. 22.找出在(任何年份的)2月受聘的所有员工。 23.对于每个员工,显示其加入公司的天数. 24.显示姓名字段的任何位置包含"A"的所有员工的姓名. 25.以年月日的方式显示所有员工的服务年限. 答案: 1.select ename,job,mgr,hiredate,sal,comm ,deptno from emp where deptno=30; 2.select ename,empno,deptno from emp where job='CLERK'; 3.select * from emp where comm>sal; 4.select * from emp where comm>sal*0.6; 5.select empno ,ename, job,hiredate,sal,comm,deptno from emp where( job='MANAGER' and deptno=10) or( job='CLERK' and deptno=20); 6.select empno,ename,job, hiredate,sal, deptno from emp where ( job='MANAGER' and deptno=10) or( job='CLERK' and deptno=20) or((job <>'MANAGER' and job<>'CLERK') and sal>=2000);

学生选课数据库SQL语句练习题

一、设有一数据库,包括四个表:学生表(Student)、课程表 (Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。 表1-1数据库的表结构 表(一)Student 含义 属性名数据类型可否为 空 Sno Char(3)否学号(主 键) Sname Char(8)否学生姓名 Ssex Char(2)否学生性别 Sbirthday datetime可学生出生年 月 Class Char(5)可学生所在班 级 表(二)Course 含义 属性名数据类型可否为 空 Cno Char(5)否课程号(主 键) Cname Varchar(10)否课程名称 Tno Char(3)否教师编号 (外键) 表(三)Score 含义 属性名数据类型可否为 空 Sno Char(3)否学号(外 键) Cno Char(5)否课程号(外 键)

Degree Decimal(4,1)可成绩 主码:Sno+ Cno 表(四)Teacher 含义 属性名数据类型可否为 空 Tno Char(3)否教师编号 (主键)Tname Char(4)否教师姓名Tsex Char(2)否教师性别Tbirthday datetime可教师出生年 月 Prof Char(6)可职称Depart Varchar(10)否教师所在部 门 表1-2数据库中的数据 表(一)Student Sno Sname Ssex Sbirthday class 95033 108曾华男1977-09- 01 105匡明男1975-10- 95031 02 95033 107王丽女1976-01- 23 95033 101李军男1976-02- 20 109王芳女1975-02- 95031 10 95031 103陆君男1974-06- 03 表(二)Course

sql练习题+答案

(一) 新建以下几个表 student(学生表): 其中约束如下: (1)学号不能存在相同的 (2)名字为非空 (3)性别的值只能是’男’或’女’ (4)系包括这几个:信息系,计算机科学系,数学系,管理系,中文系,外语系,法学系 (5)出生日期为日期格式 (6)年龄为数值型,且在0~100之间 create table student (

age smallint constraint d check (age between 0

cs(成绩表): 其中约束如下: (1)sno和cno分别参照student和course表中的sno,cno的字段 (2)cj(成绩)只能在0?100之间,可以不输入值 create table cs ( sno smallint not null references student ( sno ), ----定义成外键 cno smallint not null references course ( cno ), ----定义成外键 cj smallint constraint e check (cj between 0 and 100 ),---- 检查约束一—j(成绩)只能在~100 之间,可以不输入值 constraint f primary key ( sno , cno )---- 定 义学生学号和课程号为sc表的主键 ) course(课程表)

其约束如下: (1)课程号(cno)不能有重复的 (2)课程名(cname非空 (三)针对学生课程数据库查询 (1)查询全体学生的学号与姓名。 Select sno , sname from student (2)查询全体学生的姓名、学号、所在系,并用别名显示出结果。 (3)查询全体学生的详细记录。 select * from student (4)查全体学生的姓名及其出生年份。 select sname , birth from student (5)查询学校中有哪些系。

相关文档