① 某打车公司将驾驶里程(drivedistanced)超过5000里的司机信息转移到一张称为seniordrivers 的表中,他们的详细情况被记录在表drivers 中,正确的sql为()
A insert into seniordrivers drivedistanced>=5000 from drivers whereB insert seniordrivers (drivedistanced) values from drivers where drivedistanced>=5000C insert into seniordrivers(drivedistanced)values>=5000 from drivers whereD select * into seniordrivers from drivers where drivedistanced >=5000
② 雇员表EMP 结构如下
(雇员编号 EMPNO,姓名 ENAME ,
工作岗位 JOB,管理员编号 MGR ,
受雇时间 HIREDATE,工资 SAL ,
奖金 COMM,部门编号 DEPTNO );
下列操作语句正确的是:( )
A # 显示在10和30部门工作并且工资大于5500元的雇员的姓名和工资,列标题显示为Employee和Monthly Salary 语句:SELECT ENAME EMPLOYEE ,SAL "MONTHLY SALARY" FROM EMP WHERE DEPTNO IN(10,30)AND SAL > 5500;B # 显示受雇时间在2010年1月1日和2012年12月31日之间的雇员的姓名、工资、及受雇时间,并以受雇时间升序排列。语句:SELECT ENAME,SAL,HIREDATE FROM EMP WHERE HIREDATE BETWEEN '2010-01-01' AND '2012-12-31' ORDER BY HIREDATE;C # 显示奖金比工资多10%以上的雇员的姓名、工资及奖金。语句:SELECT ENAME,SAL ,COMM FROM EMP WHERE COMM > SAL*1.1;D # 查询没有奖金且工资低于6500并工作岗位是经理、普通员工、销售员的所有员工信息。语句:SELECT * FROM EMP WHERE SAL < 6500 AND COMM IS NULL AND JOB IN ('经理','普通员工','销售员');
③ 修改表test_tbl字段i的缺省值为1000,可以使用SQL语句():
A ALTER TABLE test_tbl ALTER i SET DEFAULT 1000;B ALTER TABLE test_tbl i SET DEFAULT 1000;C ALTER TABLE test_tbl MODIFY i SET DEFAULT 1000;D ALTER TABLE test_tbl CHANGE i SET DEFAULT 1000;
④ 使用SQL语句建个存储过程proc_stu,然后以student表中的学号Stu_ID为输入参数@s_no,返回学生个人的指定信息。下面创建存储过程语句正确的是:()
A CREATE PROCEDURE [stu].[proc_student]@s_no AS intASBEGINselect * from stu.student where Stu_ID=@s_noENDB CREATE PROCEDURE [stu].[proc_student]@s_no intASBEGINselect * from stu.student where Stu_ID=@s_noENDC CREATE PROCEDURE [stu].[proc_student]@s_no intASBEGINselect * from stu.student where s_no=@s_noENDD CREATE PROCEDURE [stu].[proc_student]@s_no AS intASBEGINselect * from stu.student where Stu_ID=@Stu_IDEND
⑤ 表结构如下:
CREATE TABLE `score` (`id` int(11) NOT NULL AUTO_INCREMENT,`sno` int(11) NOT NULL,`cno` tinyint(4) NOT NULL,`score` tinyint(4) DEFAULT NULL, PRIMARY KEY (`id`) ) ;
以下查询语句结果一定相等的是()
A A.SELECT sum(score) / count(*) FROM score WHERE cno = 2;B.SELECT sum(score) / count(id) FROM score WHERE cno = 2;C.SELECT sum(score) / count(sno) FROM score WHERE cno = 2;D.SELECT sum(score) / count(score) FROM score WHERE cno = 2;E.SELECT sum(score) / count(1) FROM score WHERE cno = 2;F.SELECT avg(score) FROM score WHERE cno = 2;
题解:
① 第一题考察的是向表格中插入数据,对于向表中插入数据有两种方式,
1、INSERT INTO语句用于向表格中插入新的行。
INSERT INTO table_name VALUES (值1, 值2,....)# 指定所要插入数据的列INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
2、SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。常用于创建表的备份复件或者用于对记录进行存档。
# 把所有的列插入新表 SELECT *INTO new_table_name [IN externaldatabase] FROM old_tablename# 只把希望的列插入新表SELECT column_name(s)INTO new_table_name [IN externaldatabase] FROM old_tablename
从题目的要求来看,应该用的是第二种方式,所以正确的答案为A。
② 对于第二题,需要逐一判断,A是无错的。
B #选项因为between...and后面加日期的话,短日期默认time为00:00:00。#因此查询日期只能截止到2012-12-31 00:00:00 并没有当天的记录C #选项是少了一个"="D #没有奖金并不完全是null,还有可能是0
③ 考察的是修改表字段默认值
alter table 表名 alter column 字段名 set default 默认值;(若本身不存在则可以直接设定)
则正确的答案为A
④ 第四题考察的是存储的过程,带有参数的存储过程模式是:
use db_student--创建存储过程create procedure proc_group@课程类别 varchar(20), --定义参数@学分 intasbeginselect * from coursewhere 课程类别=@课程类别 and 学分>@学分end
我们可以知道正确的答案是B,不过原题给的最终正确答案是A和B,对于参数变量的数据类型申明可以用as吗?本人不是很清楚。如有小伙伴知道,请留言告知,谢谢
⑤ 从题目中我们可以看到id和sno都是非空数值,所以对于count(*) 和count(id)、count(sno)和count(1)是相等的,所以ABCE 的值是相等的。
D和F是表示的同一个意思,所以D和F值肯定是相等的。