当前位置:文档之家› SQL与HQL练习题

SQL与HQL练习题

SQL与HQL练习题
SQL与HQL练习题

SQL与HQL练习题要求,每一道题要写出SQL语句与HQL语句。

表结构定义:

员工表(emp){

员工编号empno

员工姓名ename

性别sex

职位job

主管mgr

参加工作时间hiredate

薪水sal

佣金comm

所在部门编号deptno

}

部门表(dept){

部门编号deptno

部门名称dname

备注loc

}

第一部分

1.选出部门30中的所有员工。

S: Select * from emp where deptno=’30’;

H: from Emp where deptno=’30’;

2.列出所有办事员(CLERK)的姓名、编号和部门编号。

S: select ename,empno,deptno from emp where job=’CLERK’;

H: select new Map(ename as name,empno as eno, deptno.deptno as dno) from Emp where job='CLERK';

3.找出佣金高于薪金的员工。

S: SELECT * FROM emp where comm > sal or (sal is NULL and comm is not null and comm !=0)

H: FROM Emp where comm > sal

4.找出佣金高于薪金的60%的员工。

S: select * from emp where comm>sal*0.6 OR (sal IS NULL and comm is not null and comm !=0);

H: from Emp where comm>0.6*sal OR sal IS NULL;

5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资

料。

S: select * from emp where (job ='MANAGER' and deptno = 10) or (job =

'CLERK' and deptno=20);

H: from Emp where (job ='MANAGER' and deptno = 10) or (job = 'CLERK' and deptno=20);

6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是

经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料。

S: select * from emp e where (job = 'MANAGER' and deptno = 10) or (job = 'CLERK' and deptno = 20) or (sal >= 2000 and job not in ('MANAGER','CLERK'));

H: from Emp where (job = 'MANAGER' and deptno = 10) or (job = 'CLERK' and deptno = 20) or (sal >= 2000 and job not in ('MANAGER','CLERK'));

7.找出收取佣金的员工的不同工作。

S: select distinct job from emp where comm is not null ;

H: select distinct job from Emp where comm != 'null' ;

8. 找出不收取佣金或收取的佣金低于1000的员工。

S: select * from emp where comm <1000 orcomm is null

H: from Emp where comm<1000;

9.查询所有部门名称和员工姓名,包括没有员工的部门名称也显示。

S: select d.dname ,e.ename from emp e RIGHT JOIN dept d ON

e.deptno=d.deptno;

H: select new map(d.dname as dname ,e.ename as ename) from Emp e RIGHT JOIN e.deptno d

10. 查询工资高于公司平均工资的所有员工信息。

S: select * from emp where sal >(select avg(sal) from emp );

H: from Emp where sal > (select avg(sal) from Emp;

11. 查询工资高于部门平均工资的所有员工。

S: select * from emp e1 where sal >(select avg(sal) from emp e2 where e1.deptno=e2.deptno)

H: from Emp e1 where sal >(select avg(sal) from Emp e2 where e1.deptno=e2.deptno)

12. 查询emp表的第1~3行。

S: select * from emp LIMIT 3

H: List elist =session.createQuery("from Emp").setMaxResults(3).list(); 13. 把员工姓名和工作类型连接在一起,中间用“-”分割显示(concat函数)。

S: select CONCAT_WS('-',ename,job) from emp;

H:

14. 截取员工姓名的前3个字符和第4个字符以后的内容显示。

S: select CONCAT(substr(ename,1,3),substr(ename,5))from emp;

H: select CONCAT(substr(ename,1,3),substr(ename,5))from Emp;

15. 查询员工编号,姓名和所在部门的名称。

S: SELECT empno ,ename ,dname FROM emp e ,dept d where e.deptno =

d.deptno

H: SELECT empno ,ename ,dname FROM Emp e ,dept d where e.deptno =

d.deptno

16. 查询部门的名称以及该部门的人数,要求没有员工的部门也要显示。

S: SELECT d.dname ,COUNT(e.empno) FROM emp e RIGHT JOIN dept d ON

e.deptno=d.deptno GROUP BY d.dname

H: select new Map (d.dname as name ,COUNT(e.empno) as no) FROM Emp e RIGHT JOIN e.deptno d GROUP BY d.dname

17. 查询员工姓名及其直接上级的姓名。

S: SELECT ename , mgr from emp

H: SELECT ename , mgr from Emp

18. 查询工资高于平均工资的员工姓名。

S: SELECT ename from emp WHERE sal > (select avg(sal) from emp );

H: SELECT ename from Emp WHERE sal > (select avg(sal) from emp );

19. 查询工资高于本部门平均工资的员工。

S: select * from emp e1 where sal >(select avg(sal) from emp e2 where e1.deptno=e2.deptno)

H: from Emp e1 where sal >(select avg(sal) from Emp e2 where e1.deptno=e2.deptno)

20. 查询每个部门中拥有最高工资的员工的信息。

S: select *from emp as e1,

(select max(sal)AS max from emp group by deptno) as e2

where e1.deptno=e2.deptno and e1.sal=e2.max;

H:

21. 统计“JONES”所带领的团队的工资总额。

S: SELECT sum(sal) FROM emp where mgr =(select empno from emp where ename='JONES')

H: SELECT sum(sal) FROM Emp where mgr =(select empno from Emp where ename='JONES')

22. 列出10号部门中有而20号部门中没有的工作。

S: select job from emp where deptno = 10 and job not IN (select job from emp e1 where deptno = 20)

H:

23. 记录并集(union)

第二部分

1.查询津贴为空的所有员工。

S: Select * from emp where sal is null

2.查询姓名以字母“S”开头的员工。

S: select ename from emp where ename like 'S_%'

3.查询所有的经理(MANAGER)和办事员(CLERK)的员工信息。

S: select * from emp where job = 'MANAGER' OR job = 'CLERK';

4.按参加工作时间从早到晚显示员工信息。

S: SELECT * from emp ORDER BY hiredate ASC;

5.增加一个部门“培训部”。

S: INSERT INTO dept VALUES(50,'TRAINING','CHINA');

6.给员工涨工资5%。

S: UPDATE emp SET sal = sal+sal*0.05

7.删除新增的部门“培训部”。

S: DELETE FROM dept WHERE dname = 'TRAINING';

8.查询系统时间。

S:SELECT CURRENT_TIMESTAMP

select CURTIME();

select TIME(CURRENT_TIME());

select TIME(CURRENT_TIME);

select TIME(CURRENT_TIMESTAMP());

select TIME(CURRENT_TIMESTAMP);

select CURRENT_TIME;

select CURRENT_TIME();

select CURTIME(CURRENT_TIME());

select CURTIME(CURRENT_TIME);

select CURTIME(CURRENT_TIMESTAMP());

select CURTIME(CURRENT_TIMESTAMP);

select CURTIME(CURRENT_TIMESTAMP);

9.查询系统日期。

select CURDATE();

select DATE(CURRENT_DATE());

select DATE(CURRENT_DATE);

select DATE(CURRENT_TIMESTAMP());

select DATE(CURRENT_TIMESTAMP);

select CURRENT_DATE;

select CURRENT_DATE();

一下四种方法不可用

select CURDATE(CURRENT_TIMESTAMP);

select CURDATE(CURRENT_TIMESTAMP());

select CURDATE(CURRENT_DATE);

select CURDATE(CURRENT_DATE());

10.查询在20年前参加工作的员工。

SELECT * FROM emp WHERE (SELECT YEAR(hiredate)) <(SELECT YEAR(CURDATE())-20);

11.查询在当月倒数第三天参加工作的员工。

12.查询每个员工的工作天数。

S: select to_days(CURDATE())-to_days(hiredate) from emp

13.显示系统时间是xxxx年xx月xx日,是一年中的第几天,是星期几。

S: select CONCAT(YEAR(CURDATE()),'年',MONTH(CURDATE()),'月',DAY(CURDATE()),'日','','是一年中的第',(select to_days(sysdate())-to_days('2014-01-01')),'天','星期',(select WEEKDAY(CURRENT_TIMESTAMP)+1));

统计天数:select to_days(sysdate())-to_days('2014-01-01');

14.按每月30天计算员工的日薪金,要求计算结果四舍五入到小数点后2位。S: select (sal/30) AS 每日工资from emp

15.计算每个员工已经工作了多少个月,要求忽略小数部分。

S: select ( TO_DAYS(SYSDATE()) - TO_DAYS(hiredate))/30 from emp

16.按年和月的格式显示员工参加工作的时间。

S: select empno,ename, CONCAT(YEAR(hiredate),'年',MONTH(hiredate),'月',DAY(hiredate),'日') as '参加工作的时间' from emp

17.查询在1987年2月到1987年5月之间(包括2月和5月)参加工作的员工。S: select * from emp where(hiredate>(select DATE('1987-02-00')))and (hiredate <(select DATE('1987-05-00')))

18.统计员工的人数,津贴不为空的人数。

S: SELECT COUNT(empno),COUNT(comm) from emp

19.统计部门最低工资大于900的部门和最低工资。

S: SELECT MIN(sal),deptno from emp where (select MIN(sal)>900) GROUP BY deptno;

20.统计每个部门工资在1400元以上的所有员工的工资总额。

S: SELECT SUM(sal) from emp where sal >1400 GROUP BY deptno

21.统计不同工作的个数。

S: SELECT COUNT(DISTINCT JOB) FROM emp;

22.找出各月倒数第3天受雇的所有员工。

23.找出早于12(30)年前受雇的员工。

24.以首字母大写的方式显示所有员工的姓名。

25.显示正好为5个字符的员工的姓名。

26.显示不带有“R”的员工的姓名。

27.显示所有员工姓名的前三个字符。

28.显示所有员工的姓名,用“a”替换所有“A”。

29.显示满10(30)年服务年限的员工的姓名和受雇日期。

30.显示员工的详细资料,按名称排序。

31.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面。

32.显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪

金排序。

33.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若

月份相同则将最早年份的员工排在最前面。

34.显示在一个月为30天的情况所有员工的日薪金,忽略余数。

35.找出在(任何年份的)2月受聘的所有员工。

36.对于每个员工显示其加入公司的天数。

37.显示姓名字段的任何位置包含“A”的所有员工的姓名。

38.以年月日的方式显示所有员工的服务年限(大概)。

39.列出至少有一个员工的所有部门信息。

40.列出薪金比“SMITH”多的所有员工。

41.列出所有员工的姓名及其直接上级的姓名。

42.列出受雇日期早于其直接上级的所有员工。

43.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。

44.列出所有“CLERK”(办事员)的姓名及其部门名称。

45.列出最低薪金大于1500的各种工作。

46.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门

编号。

47.列出与“SCOTT”从事相同工作的所有员工。

48.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。

49.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。

50.列出在每个部门工作的员工数量、平均工资和平均服务期限。

51.列出所有员工的姓名、部门名称和工资。

52.列出所有部门的详细信息和部门人数。

53.列出各种工作的最低工资。

54.列出各个部门的MANAGER(经理)的最低薪金。

55.列出所有员工的年工资,按年薪从低到高排序。

56.列出工资最高的员工信息。

第三章 SQL语言练习题和答案

第三章SQL语言 一、选择题 1. SQL语言是(B )的语言,容易学习。 A.过程化 B. 非过程化 C.格式化 D. 导航式 2. SQL语言的数据操纵语句包括SELECT、INSERT、UPDATE、DELETE等。其中最重要的,也是使用最频繁的语句是(A)。 A. SELECT B. INSERT C. UPDATE D. DELETE 3. 在视图上不能完成的操作是()。 A. 更新视图 B. 查询 C. 在视图上定义新的表 D. 在视图上定义新的视图 4. SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,CREATE、DROP、ALTER语句是实现哪种功能()。 A. 数据查询 B. 数据操纵 C. 数据定义 D. 数据控制 5. SQL语言中,删除一个视图的命令是()。 A.DELETE B.DROP C.CLEAR D.REMOVE 6. 在SQL语言中的视图VIEW是数据库的()。 A. 外模式 B. 模式 C. 内模式 D. 存储模式 7. 下列的SQL语句中,()不是数据定义语句。 A. CREATE TABLE B. DROP VIEW C. CREATE VIEW D. GRANT 8. 若要撤销数据库中已经存在的表S,可用()。 A. DELETE TABLE S B. DELETE S C. DROP TABLE S D. DROP S 9. 若要在基本表S中增加一列CN(课程名),可用()。 A.ADD TABLE S(CN CHAR(8)) B.ADD TABLE S ALTER(CN CHAR(8)) C.ALTER TABLE S ADD(CN CHAR(8)) D.ALTER TABLE S (ADD CN CHAR(8)) 10. 学生关系模式S(S#,Sname,Sex,Age),S的属性分别表示学生的学号、姓名、性别、年龄。要在表S中删除一个属性“年龄”,可选用的SQL语句是()。 A. DELETE Age from S B. ALTER TABLE S DROP Age C. UPDATE S Age D. ALTER TABLE S ‘Age’ 11. 有关系S(S#,SNAME,SAGE),C(C#,CNAME),SC(S#,C#,GRADE)。其中S#是学生号,SNAME是学生姓名,SAGE是学生年龄,C#是课程号,CNAME是课程名称。要查询选修“ACCESS”课的年龄不小于20的全体学生姓名的SQL语句是SELECT SNAME FROM S,C,SC WHERE子句。这里的WHERE子句的内容是()。

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)查询缺少成绩的学生的学号和相应的课程号。

MySQL练习题及答案

答案见参考下列黄色标记 一、下面所有题目中包括单选或多选 1.若MySQL Server运行在Linux系统上,那访问MySQL服务器的客 户端程序也必须运行在Linux系统吗? A.是 B. 否 2.MySQL与其他关系型数据库(SQL Server/Oracle)架构上最大的区别 是? A.连接层 B. SQL层 C.存储引擎层 3.MySQL使用磁盘空间来存储下面哪些信息? A.server和client程序、其他lib库文件 B.日志文件和状态文件 C.数据库 D.表格式(.frm)文件、数据文件、索引文件 E.当内部临时表超过控制设置时,由内存表形式转化为磁盘形式存储 F.上面所有 4.下面哪四种是mysql客户端程序的功能? A.创建、删除数据库 B.创建、删除、修改表和索引

C.使用shutdown命令关闭服务器 D.创建、管理用户 E.显示replication状态信息 F.使用start backup命令来进行数据库二进制备份 5.在MySQL内部有4种常见日志,哪种日志是不能直接cat或more 文本查阅日志内容? A.错误日志(error-log) B.二进制日志(bin-log) C.查询日志(query-log) D.慢查询日志(slow-log) 6.下面哪三种方式可以查看Country表的存储引擎? A.SHOW CREATE TABLE Country; B.SHOW ENGINE Country STATUS;; C.SHOW TABLE STATUS LIKE ‘Country’; D.SELECT ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME=’Country’; E.SELECT ENGINE FROM INFORMATION_SCHEMA.ENGINES WHERE TABLE_NAME =’County’; 7.在高并发、事务等场景下,MySQL5.6数据库默认使用哪种存储引

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查询练习题含答案

--(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.doczj.com/doc/6d8656303.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 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练习题

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练习题及答案

题目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#] HA VING 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#] HA VING COUNT(DISTINCT [C#])>5)

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课程没有成绩的学生学号、课程号

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.doczj.com/doc/6d8656303.html,o,score.degree from student,score where student.Sno=score.Sno; 查询所有学生的Sno、Cname和Degree列。 15、select x.Sno,https://www.doczj.com/doc/6d8656303.html,ame,x.degree from score x,course y where https://www.doczj.com/doc/6d8656303.html,o=https://www.doczj.com/doc/6d8656303.html,o;

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)查询学校中有哪些系。

SQL Server 基础练习题及答案

SQL Server 基础练习题及答案 【幻天火焰】 目录 一、单表查询练习 (1) 二、聚合函数练习 (3) 三、分组查询练习 (3) 四、嵌套查询练习 (4) 五、联接查询练习 (6) 六、外联接查询 (7) 七、补充提高 (7) 一、单表查询练习 1、查询<学生信息表>,查询学生"张三"的全部基本信息 Select * from A_studentinfo where sname='张三' 2、查询<学生信息表>,查询学生"张三"和”李四”的基本信息 Select * from A_studentinfo where sname='张三' or sname='李四' 3、查询<学生信息表>,查询姓"张"学生的基本信息 Select * from A_studentinfo where sname like '张%' 4、查询<学生信息表>,查询姓名中含有"四"字的学生的基本信息 Select * from A_studentinfo where sname like '%四%' 5、查询<学生信息表>,查询姓名长度为三个字,姓“李”,且最后一个字是“强”的全部学生信息。 select * from A_studentinfo where sname like '李_强'

6、查询<学生信息表>,查询姓"张"或者姓”李”的学生的基本信息。 Select * from A_studentinfo where sname like '张%' or sname like '李%' 7、查询<学生信息表>,查询姓"张"并且"所属省份"是"北京"的学生信息 Select * from A_studentinfo where sname like '张%' and province='北京' 8、查询<学生信息表>,查询"所属省份"是"北京"、”新疆”、”山东”或者"上海"的学生的信息 Select * from A_studentinfo where province in ('北京','上海','新疆','山东') 9、查询<学生信息表>,查询姓"张",但是"所属省份"不是"北京"的学生信息 Select * from A_studentinfo where sname like '张%' and province !='北京' 10、查询<学生信息表>,查询全部学生信息,并按照“性别”排序,性别相同的情况下按照“所属省份”排序,所属省份相同的情况下再按照“班级”排序 select * from A_studentinfo order by sex,province,class 11、查询<学生信息表>,查询现有学生都来自于哪些不同的省份 select distinct province as 省份 from A_studentinfo 12、查询<学生选修信息表>,查询没有填写成绩的学生的学号、课程号和成绩 Select * from A_studentcourse where score is null 13、查询<学生选修信息表>,查询全部填写了成绩的学生的选修信息,并按照“成绩”从高到低进行排序 Select * from A_studentcourse where score is not null order by score desc

SQL练习题及答案

选择题 (1)如果要查询所藏图书中,各个出版社图书的最高单价、平均单价和册数,所用的SQL 语句是 A)SELECT 出版单位,MAX(单价),AVG(单价),COUNT(*); FROM 图书; GROUP BY 出版单位 B)SELECT 出版单位,MAX(单价),AVG(单价),COUNT(*); FROM 图书; HAVING 出版单位 C)SELECT 出版单位,MAX(单价),AVG(单价),COUNT(*); FROM 图书 GROUP BY 出版单位 D)SELECT 出版单位,MIN(单价), AVG(单价),COUNT(*); FROM 图书; HAVING 出版单位 (2)为"运动员"表增加一个字段"得分"的SQL语句是 A)CHANGE TABLE运动员ADD得分I B)ALTER DATA运动员ADD得分I C)ALTER TABLE运动员ADD得分I D)CHANGE TABLE运动员IN得分I (3)利用SQL数据更新功能,自动计算更新每个"设备总金额"字段的字段值,该字段值等于"单价*设备数量"的值,正确命令为 A)UPDATE 设备表SET 设备总金额=单价*设备数量 B)UPDATE 设备表FOR 设备总金额=单价*设备数量 C)UPDATE 设备表WITH 设备总金额=单价*设备数量 D)UPDATE 设备表WHERE 设备总金额=单价*设备数量 (4)查找教师表中教师最高的工资值,下列SQL语句正确的是 A)SELECT MAX(工资) FROM 教师表 B)SELECT MIN(工资) FROM 教师表 C)SELECT AVG(工资) FROM 教师表 D)SELECT SUM(工资) FROM 教师表 (5)在当前目录下有数据表文件student.dbf,执行如下SQL语句后 SELECT * FORM student INTO DBF student ORDER BY 学号/D A)生成一个按"学号"升序的表文件,将原来的student.dbf文件覆盖 B)生成一个按"学号"降序的表文件,将原来的student.dbf文件覆盖 C)不会生成新的排序文件,保持原数据表内容不变 D)系统提示出错信息 (6)语句"DELETE FROM 成绩表WHERE 计算机<60"的功能是 A)物理删除成绩表中计算机成绩在60分以下的学生记录 B)物理删除成绩表中计算机成绩在60分以上的学生记录 C)逻辑删除成绩表中计算机成绩在60分以下的学生记录

SQL练习答案

1.实训题 根据人力资源管理系统数据库中数据信息,完成下列操作。 (1)查询100号部门的所有员工信息。 Selsect * from employees where department_id = 100(2)查询所有职位编号为“SA_MAN”的员工的员工号、员工名和部门号。 Select employee_id,first_name,last_name,department_id from employees where job_id= ‘SA_MAN’ (3)查询每个员工的员工号、工资、奖金以及工资与奖金的和。 Select employee_id,salary,commission_pct, salary*(1+nvl(commission_pct,0) from employees (4)查询40号部门中职位编号为“AD_ASST”和20号部门中职位编号为“SA_REP”的员工的信息。 Select * from employees where department_id=40 and job_id=’ AD_ASST’ OR department_id=20 and job_id=’ SA_REP’; (5)查询所有职位名称不是“Stock Manager”和“Purchasing Manager”,且工资大于或等于2000的员工的详细信息。 Select * from employees where job_id not in(’ Stock Manager’,’ Purchasing Manager’) and salary>=2000

(6)查询有奖金的员工的不同职位编号和名称。 Select distinct job_id, job_title from jobs where job_id in (select job_id from employees where job_id is not null)(7)查询没有奖金或奖金低于100元的员工信息。 Select * from employees where salary*commission_pct<100 or commission is NULL (8)查询员工名(first_name)中不包含字母“S”的员工。Select first_name from employees where first_name not like ‘%S%’ (9)查询员工的姓名和入职日期,并按入职日期从先到后进行排序。 Select first_name,last_name,hire_date from employees order by hire_date; (10)显示所有员工的姓名、职位、工资和奖金,按职位降序排序,若职位相同则按工资升序排序。 Select first_name,last_name,job_id,salary ,salary*commission_pet from employees order by job_id desc ,salary asc; (11)查询所有员工的姓名及其直接上级的姓名。 Select , from employees a join employees b on = (12)查询入职日期早于其直接上级领导的所有员工信息。

sql复习试题(含答案)

一、单项选择题(本大题共10小题,每小题2分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1、Northwind是(B)。 A、系统数据库 B、示例数据库 C、数据库管理系统 D、数据库操作系统 2、数据库中不同记录之间之所以不同是根据(B)的不同加以区分的。 A、主键 B、外键 C、属性的定义 D、名称 3、下列是数据操纵语言的是(D)。 A、CREATE B、WHERE C、GROUP D、DELETE 4、GROUP BY 语句用于(C)。 A、添加 B、查询 C、分组统计 D、控制 5、SQL中真正存储数据的对象是(A)。 A、表 B、查询 C、窗体 D、报表 6、RIGHT JION语句的作用是(D)。 A、自然连接两个表 B、用WHERE语句定义连接条件 C、左边的记录全显示 D、右边的记录全显示 7、假设姓名字段为文本,要想查到名字是两个字且姓王的职工,在准则中输入(答案错误)。 A、“LIKE 王” B、“LIKE 王*” C、“LIKE 王%” D、LIKE 王*

8、关于视图下列说法正确的是(A)。 A、视图是个虚表 B、试图可以存数据 C、视图不可以用语句查询 C、不能实现安全管理 9、存储过程是(D)。 A、函数 B、视图 C、表格 D、程序 10、下列触发器说法正确的是(B)。 A、函数 B、可以自动触发 C、不可以更改 D、都不是 二、填空题(本大题共5小题,每小题2分,共10分)请在每小题的空格中填上正 确答案。错填、不填均无分。 1、参照完整性是指外键 ; 2、ODBC的中文意思是开放式数据库连接; 3、存储过程是一组为完成特定功能的SQL语句集; 4、在教学系统中,学生和课程之间是一对多关系; 5、GRANT TO 语句可以向一个用户赋予访问权限。 三、名词解释(本大题共5小题,每小题5分,共15分) 1、实体完整性 主码非空且不能重复

SQL语句强化练习题及答案1

一、简单查询 1、列出全部学生的信息。 SELECT * FROM 学生 2、列出软件专业全部学生的学号及姓名。 SELECT 学号,姓名 FROM 学生 WHERE 专业="软件" 3、列出所有必修课的课号。 SELECT DISTINCT 课号 FROM 必修课 4、求1号课成绩大于80分的学生的学号及成绩,并按成绩由高到低列出。 SELECT 学号,成绩 FROM 选课 WHERE 课号="1" AND 成绩>80 ORDER BY 成绩DESC 5、列出非软件专业学生的名单。 方法一:SELECT 姓名 FROM 学生 WHERE 专业<>"软件" 方法二:SELECT 姓名 FROM 学生 WHERE NOT 专业="软件" 方法三:SELECT 姓名 FROM 学生 WHERE 专业!="软件" 6、查询成绩在70~80分之间的学生选课得分情况 方法一:SELECT * FROM 选课 WHERE 成绩>=70 AND 成绩<=80 方法二:SELECT * FROM 选课 WHERE 成绩 BETWEEN 70 AND 80 不在此范围内的查询:(注意写出和以下语句等价的语句) SELECT * FROM 选课 WHERE 成绩 NOT BETWEEN 70 AND 80 7、列出选修1号课或3号课的全体学生的学号和成绩。 方法一:SELECT 学号,成绩 FROM 选课 WHERE 课号="1" OR 课号="3" 方法二:SELECT 学号,成绩 FROM 选课 WHERE 课号 IN ("1","3") 相反条件查询:SELECT 学号,成绩 FROM 选课 WHERE 课号 NOT IN ("1","3") 8、列出所有98级学生的学生成绩情况。

SQL语句练习题答案

SQL练习题及答案: 请用SQL语句实现以下功能。(1至6题每题10分,7至8题每题20分) 1. 如何用SQL语句求带辅助核算206科目12月的余额在贷方的合计值?cendd_c为余额方向字段,字符型,me为余额。 SELECT sum(me) FROM gl_accass WHERE ccode="206" and cendd_c="贷" and iperiod=12 2.如何查找GL_accass中的科目在科目表中不是末级的?(如下3种写法均正确) SELECT https://www.doczj.com/doc/6d8656303.html,ODE ,B.BEND FORM GL_ACCASS AS A JOIN CODE AS B ON https://www.doczj.com/doc/6d8656303.html,ODE=https://www.doczj.com/doc/6d8656303.html,ODE WHERE B.BEND =0 select distinct ccode from gl_accass where ccode in(select ccode from code where bend=0) select distinct ccode from gl_accass where ccode not in(select ccode from code where bend=1)

3. 如何将AA库中的department表用语句把数据导入BB库中? INSERT INTO BB..DEPARTMENT SELECT * FROM AA..DEPARTMENT 4.如何查辅助总帐中的部门编号(cDEPT_ID)在部门目录(department 表cdepcode)中不存在的记录?SELECT cDEPT_ID FROM GL_ACCASS WHREE cDEPT_ID NOT IN (SELECT cdepcode FROM DEPARTMENT) 5. 如何在部门目录表中查找部门名称(CDEPNAME)重复的记录数? SELECT CDEPNAME, COUNT(CDEPNAME) FROM DEPARTMENT GROUP BY CDEPNAME HA VING COUNT(CDEPNAME)>1; 6. 已知有表R(sno, sname, age),其中sno表示学生的学号,类型为Char(8),前4位表示入学年份。查询所有2003年入学的学生姓名(sname),SQL语句是 SELECT sname FROM R WHERE sno LIKE ′2003%′ 7. 判断题:

相关主题
文本预览
相关文档 最新文档