sqlserver教程网

当前位置: 主页 > sql语言 >

SQL测试题1

时间:2015-04-02 15:25来源:www.sqlserver.net.cn 作者:admin 点击:
一、问答题 1、数据库包含哪些哪几种后缀名的文件必须,这些文件分别存放在什么的信息? 主要数据文件(.mdf) 包含数据用户收集的信息,还有数据库其他相关的信息, 日志数据文件(.n
一、问答题
1、数据库包含哪些哪几种后缀名的文件必须,这些文件分别存放在什么的信息?
主要数据文件(.mdf) 包含数据用户收集的信息,还有数据库其他相关的信息,
日志数据文件(.ndf)  存放用户对数据库的增删改查的信息,用于备份恢复使用

2、TRUNCATE TABLE命令是什么含义?和DELETE表名有什么区别?
TRUNCATE TABLE命令是DDL删除命令,能把表中的数据全部删除,和DELETE区别在于,TRUNCATE 删除的数据不能恢复,DELETE是DML命令,删除的数据可以通过日志文件恢复;如果一个表中数据记录很多,TRUNCATE相对DELETE速度快。

3、说出以下聚合数的含义:avg,sum,max,min,count,count(*)
Avg:求某一列值的平均值,Sum: 求某一列值的总和,Max:求某一列值的最大值,Min: 求某一列值的最小值,count: 对某一列中的值计算个数,count*):计算元组个数

4、inner join是什么意思?作用是什么?写出基本语法结构
inner join:内联接,用于返回两个表中要查询的列数据通信
Select * from 表名1 inner join 表名2 on 条件表达式

5左向外联接,右向外联接,全联接的关键字如何写
Left outer join  左向外联接
Right outer join 右向外联接
Full outer join  全联接

6、视图可以更新吗?会影响到实际表吗?
视图是可以更新的,视图只是基于基本表上的虚拟表,对视图的更新会直接影响到实际表

7、什么是存储过程?为什么存储过程要比单纯的SQL语句执行起来要快?
存储过程:是一组预先编译好的T-SQL代码。在创建存储过程时经过了语法和性能优化,执行不必重复的步骤,使用存储过程可提高运行效率。

8、什么是inserted表?什么是deleted表?
inserted表:存放由于执行insert或update语句而要向表中插入的所有行。在执行insert或update操作时,新的行同时添加到激活触发器的表和insertd表中,insertd表的内容是激活触发器的表中新行的备份。deleted表:存放由于执行delete或update语句而要从表中删除的所有行。在执行delete或update操作时,被删除的行从激活触发器的表中被移动到deleted表,这两个表不会有共同的行。

9、怎么把下面的表(tab)
Year      month      amount
1991       1          1.1
1991       2          1.2
1991       3          1.3
1991       4          1.4
1992       1          2.1
1992       2          2.2
1992       3          2.3
1992       4          2.4
查成这样1个结果
Year  m1   m2   m3    m4
1991  1.1   1.2   1.3    1.4
1992  2.1   2.2   2.3    2.4
select year,
(select amount from test as m where month='1' and test.year=m.year) as m1,
(select amount from test as m where month='2' and test.year=m.year) as m2,
(select amount from test as m where month='3' and test.year=m.year) as m3,
(select amount from test as m where month='4' and test.year=m.year) as m4,
from test group by year

10、用一条SQL语句查询每门课都大于80分的学生姓名
Name       kecheng       fengshu
张三         语文          81
张三         数学          75
李四         语文          76
李四         数学          90
王五         语文          81
王五         数学          100
王五         英语          90
select distinct [Name] from [表] where [Name] not in (select [Name] from [表] where[fengshu]<=80)或者
select distinct [Name] from [表] where [Name] in (select [Name] from [表] where [fengshu]>80)

二、简答题,按要求写出SQL语句,使用SQL标准语句
Create table dept
(
Deptno varchar(10) primary key
Dname varchar(10)
);
Create table emp
(
Empno varchar(10) primary key
Ename varchar(10)
Job varchar(10)
Mgr varchar(10)
Sal varchar(10)
Deptno varchar(10) references dept(deptno)
);
Drop table dept;
Drop table emp;
Insert into dept values(‘1’,’事业部’);
Insert into dept values(‘2’,’销售部’);
Insert into dept values(’3’,’技术部’);
Insert into emp values(‘01’,’jacky’,’clerk’,’tom’,’1000’,’1’);
Insert into emp values(‘02’,’tom’,’clerk’,’’,’2000’,’1’);
Insert into emp values(‘07’,’biddy’,’clerk’,’’,’2000’,’1’);
Insert into emp values(‘03’,’jenny’,’sales’,’prety’,’600’,’2’);
Insert into emp values(‘04’,’pretty’,’sales’,’’,’800’,’2’);
Insert into emp values(‘05’,’buddy’,’jishu’,’canndy’,’1000’,’3’);
Insert into emp values(‘06’,’canndy’,’jishu’,’’,’1500’,’3’);
Select*from dept;
Select*from emp;

1、 列出emp表中各部门的部门号,最高工资,最低工资
select deptno as 部门号,max(sal) as 最高工资,min(sal) as 最低工资 from
emp group by deptno;

2、 列出emp表中各部门job为’CLERK’的员工的最低工资,最高工资。
select max(sal) as 最高工资,min(sal) as 最低工资,deptno as 部门号 from emp where
job='clerk' group by deptno;

3、 对于emp中最低工资小于2000的部门。列出job为’CLERK’的员工的部门号,最低工资,最高工资
select b.deptno as 部门号,max(sal) as 最高工资,min(sal) as 最低工资 from emp as b
where job='clerk' and (select min(sal)from emp as a where a.deptno=b.deptno)<2000 group by
b.deptno;

4、 根据部门号由高到低,工资由低到高对应每个员工的姓名,部门号,工资
select ename as 姓名,deptno as 部门号,sal as 工资 from emp order by deptno desc,sal asc;

5、 列出’buddy’所在部门中每个员工的姓名与部门号
select b.ename as 姓名,b.deptno as 部门号 from emp as b where b.deptno=
(select a.deptno from emp as a where a.ename='buddy');

6、 列出每个员工的姓名,工资,部门号,部门名
select ename as 姓名,job as 工作,dept.deptno as 部门号,dept.dname as 部门名 from emp,dept
where emp.deptno=dept.deptno;

7、 列出emp中工作为’CLERK’的员工的姓名,工作,部门号,部门名
select ename as 姓名,job as 工作,dept.deptno as 部门号,dept.dname as 部门名 from emp,dept
where emp.deptno=dept.deptno and job='clerk';

8、 对于emp中有管理者的员工,列出姓名,管理者姓名(管理者外键为mgr)
select a.deptno as 部门号,a.ename as 员工,b.ename as 管理者 from emp as a,emp as b where a.mgr is not null and a.mgr=b.ename;

9、 对于dept表中,列出所有部门名,部门号,同时列出各部门工作为’CLERK’的员工名与工作
select a.deptno as 部门号,a.dname as 部门名,b.ename as 员工名,b.job as 工作 from dept as a,
emp as b where a.deptno=b.deptno and b.job='clerk';

10、对于工资高于本部门平均水平的员工,列出部门号,姓名,工资,按部门号排序
select b.deptno as 部门号,b.ename as 姓名,b.sal as 工资 from emp as b
where b.sal>(select avg(a.sal) from emp as a where a.deptno=b.deptno) order by b.deptno;

11、对于emp,列出各个部门中工资高于本部门平均工资的员工数和部门号,按部门号排序
select a.deptno as 部门号,count(a.sal) as 员工数 from emp as a
where a.sal>(select avg(b.sal) from emp as b where a.deptno=b.deptno) group by a.deptno order
by a.deptno;

12、对于emp中工资高于本部门平均水平,人数多于1人的,列出部门号,人数,平均工资,按部门号排序
select count(a.empno) as 员工数,a.deptno as 部门号,avg(sal) as 平均工资
from emp as a where (select count(c.empno) from emp as c where c.deptno=a.deptno and
c.sal>(select avg(sal) from emp as b where c.deptno=b.deptno))>1
group by a.deptno order by a.deptno;

13、对于emp中低于自己工资至少5人的员工,列出其部门号,姓名,工资,以及工资少于自己的人数
select a.deptno as 部门号,a.ename as 姓名,a.sal as 工资,(select count(b.ename) from emp as b
where b.sal<a.sal) as 人数 from emp as a
where (select count(b.ename) from emp as b where b.sal<a.sal)>=5

三、按要求写出SQL语句
TableX有三个字段Code,Name,Age,其中Code为主键;
TableY有三个字段Code,Class,Score,其中Code+Class为主键,两表记录如下:
Code    Name    Age    Code   Class    Score
97001   张三     22     97001   数学    80
97002   赵四     21     97002   计算机  59
97003   张飞     20     97003   计算机  60
97004   李五     22     97004   数学    55


1、 请写出SQL,列出所有姓张的学生,并按年龄从小到大排列;
select * from TableX where name like '张%' order by age

2、 请写出SQL,取出计算机科考成绩不及格的学生;
select * from tableX where code in (select code from tableY WEHRE class='计算机' and score <60)

3、 通过等值联接,取出Name,Class,Score,请写出SQL即输出结果
select a.name,b.class,b.score from tableX a,tableY b where a.code=b.code

4、 通过外联接,取出每个学生的Name,Class,Score,请写SQL输出结果
select a.name,b.class,b.score from tableX full join tableY on a.code=b.code

5、 请写SQL,在TableX表中增加一条学生记录(学号:97005 姓名:赵六 年龄:20);
insert into tablex values('97005','赵六',20) 或insert into tablex ('Code','Name',Age)
values('97005','赵六',20)

6、 李五的年龄记录错了,应该是21,请写SQL,根据主键进行更新;
update tablex set age=21 where code='97004'

7、 请写SQL,删除TableX中没有考试成绩的学生记录,请使用not in条件
delete tablex where code not in (select code from tabley)
(责任编辑:admin)
顶一下
(6)
85.7%
踩一下
(1)
14.3%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
栏目列表
推荐内容
  • SQL TOP 的用法

    SQL Server 的语法: SELECT TOP number|percent column_name(s)FROM table_name 等...

  • SQL测试题1

    一、问答题 1、数据库包含哪些哪几种后缀名的文件必须,这些...