牛客刷题错题(一)——SQL

这篇博客讨论了SQL操作语句的正确性和常见误区,包括雇员表查询、统计函数的应用、数据操纵与删除、表结构修改以及SQL注入防范等。通过分析错误答案,解释了SQL中BETWEEN、AVG、CASE WHEN、DELETE、ALTER TABLE等语句的正确用法和注意事项。
摘要由CSDN通过智能技术生成

1. 雇员表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 (‘经理’,‘普通员工’,‘销售员’);

 正确答案: A   你的答案: D (错误)

分析:

B选项因为between...and后面加日期的话,短日期默认time为00:00:00 因此查询日期只能截止到2012-12-31 00:00:00 并没有当天的记录

C选项的奖金可能是Null

D选项没有奖金不是说奖金是空值

2. 表结构如下:

1

2

3

4

5

6

7

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.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;

A. A,E,F       B. A,D,F      C. A,B,C,D       D. D,F       E. A,B,E,F       F. A,B,C,E

 正确答案: D F   你的答案: A (错误)

分析:

所有的统计函数都会忽略空值(null)。

A :统计所有学生的平均分,就算成绩为空的学生,最后计算count(*)时也作为分母基数,计算得到所有学生的平均分。

B :与A一样,因为id主键非空,count(id)所得分母基数是所有学生。

C : 与B一样,非空属性sno。

D :由于score字段的值可能是空,空值在统计时忽略,所以count(score)和sum(score)统计的只是score不为空的学生,计算得到的平均分也只是有成绩的学生的平均分,无法计算所有学生的平均分。

E: count(1)与count(*)一样。

F:avg(score)会忽略空值,故计算结果为有成绩的学生的平均分。

3. 积分result表中有A B C D四列,要求:
1)当A列值大于等于B列时,选择A列否则选择B列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值