软件开发----SQL基础每日刷题(转载于牛客)

1.        Mysql中表student_table(id,name,birth,sex),插入如下记录:

('1001' , ' ' , '2000-01-01' , '男');
('1002' , null , '2000-12-21' , '男');
('1003' , NULL , '2000-05-20' , '男');
('1004' , '张三' , '2000-08-06' , '男');
('1005' , '李四' , '2001-12-01' , '女');

执行 select count(name) from student_table 的结果是()?

A        5

B        4

       3

D        2

正确答案:C

解析:

count()函数有两种使用方式:

1、使用count(*)对表中的行数进行计数,此种用法不忽略null值;

2、使用count(column)对特定列中具有值的行进行计数,此种用法忽略null值。 ... 展开
 


2.        有三张表,分别是departments部门表(注:dept_no是主键):

dept_emp部门-员工表:

以及salaries工资表:

现在统计各个部门的工资条数,按照dept_no、dept_name、sum(工资条数)输出,并按dept_no升序排列会得到如下结果:

所以下列MySQL语句正确的是:

A

SELECT 
d.dept_no,d.dept_name,COUNT(salary) sum 
FROM 
departments d,dept_emp e,salaries s 
WHERE 
d.dept_no=e.dept_no AND e.emp_no=s.emp_no
GROUP BY d.dept_no;

B

SELECT 
d.dept_no, d.dept_name, COUNT(s.salary) AS sum 
FROM 
salaries s 
JOIN 
dept_emp e 
ON 
s.emp_no = e.emp_no 
JOIN 
departments d
 ON 
d.dept_no = e.dept_no 
GROUP BY 
d.dept_no,d.dept_name 
ORDER BY 
d.dept_no;

C

SELECT 
d.dept_no, d.dept_name, SUM(s.salary) AS sum 
FROM 
salaries s 
JOIN 
dept_emp e 
ON 
s.emp_no = e.emp_no 
JOIN 
departments d 
ON 
d.dept_no = e.dept_no 
GROUP BY 
d.dept_no
ORDER BY 
d.dept_no;

D

SELECT 
d.dept_no, d.dept_name, COUNT(s.salary) AS sum 
FROM 
salaries s 
JOIN 
dept_emp e 
ON 
s.emp_no = e.emp_no 
JOIN 
departments d 
ON 
d.dept_no = e.dept_no 
GROUP BY 
d.dept_no;

正确答案:B

解析:

由于要统计各个部门的工资条数,

  • 首先要把三张表连接起来,而连接三张表的点就是salaries的emp_no对应dept_emp表格的emp_no,这样就拿到了每个员工所在的部门id和对应的工资;
  • 接下来用department的dept_no连接dept_emp表的dept_no,就能拿到员工对应所在的部门名称;
  • 然后对各个部门分组并统计salary条数,就会用到GROUP BY dept_no方法(这里因为dept_no是主键,所以可以用它进行分组)和COUNT(salary);
  • 最后是利用ORDER BY 进行升序排序即可。

因此B是正确的;

A和D选项没有进行最后的排序;

C错在用错统计函数,统计数目应该用COUNT()而不是SUM()求和。


3.        积分result表中有A B C D四列,要求:
1)当A列值大于等于B列时,选择A列否则选择B列
2)当C列值大于等于D列时,选择C列否则选择D列
用SQL语句实现正确的是:(      )

       select ( when A >=B then A else B ) MAX_AB, ( when C>=D then C else D ) MAX_CD from result

B        select (case when A>=B then A else B ) MAX_AB, (case when C>=D then C else D ) MAX_CD from result

C        select (case when A>=B then A else B end) MAX_AB, (case when C>=D then C else D end) MAX_CD from result

D        select case when A>=B then A else B end MAX_AB, case when C>=D then C else D end MAX_CD from result

正确答案:CD

解析:

case when 判断条件 then 成功结果 then 不成功结果 end


4.        在SQL中如何删除触发器?

A        DROP TRIGGER

B        DISABLE TRIGGER

C        REMOVE TRIGGER

       DELETE TRIGGER

正确答案:A

解析:

删除触发器: DROP TRIGGER

输入 : DROP TRIGGER newproduct;

      newproduct :触发器名称


5.        Mysql中表student_table(id,name,birth,sex),插入如下记录:

('1004' , '张三' , '2000-08-06' , '男');
('1005' , NULL , '2001-12-01' , '女');

('1006' , '张三' , '2000-08-06' , '女');

('1007' , ‘王五’ , '2001-12-01' , '男');

('1008' , '李四' , NULL, '女');

('1009' , '李四' , NULL, '男');

('1010' , '李四' , '2001-12-01', '女');

执行

select count(t1.birth) as c1
from (
select * from student_table where sex = '男' ) t1 
right  join 
(select * from student_table where sex = '女') t2 
on t1.birth = t2.birth and t1.name = t2.name ; 


的结果行数是()?

A        2

       1

C        3

       4

正确答案:B

解析:

  • 连接后的新表只有一条数据相同。
  • null=null不算,所以李四不在。

  • student_table_right_join

6.        查询运动员表中运动员的所有信息,按照年龄升序,成绩降序排列。下列SQL语句正确的是()

A        SELECT * FROM 运动员 ORDER BY 年龄,成绩

       SELECT * FROM 运动员 ORDER BY 1 ASC,2 DESC

       SELECT * FROM 运动员 ORDER BY 年龄 ASC,成绩 DESC

D        SELECT * FROM 运动员 ORDER BY 年龄 DESC,成绩 ASC

正确答案:C

解析:

关键字DESC指降序,ASC为升序,默认为升序。A选项,皆为默认升序,不符题意;B选项为按位排序,但题目中未指明年龄和成绩两个字段的具体位置;D选项,所得结果与题意相反。


7.        有一张订单表orders,包含如下数据:

现要查找order_num不为NULL的所有数据,下面语句正确的是:

A        SELECT * FROM orders WHERE order_num != NULL;

B        SELECT * FROM orders WHERE order_num <> NULL;

C        SELECT * FROM orders WHERE order_num IS NOT NULL;

       SELECT * FROM orders WHERE order_num NOT IS NULL;

正确答案:C

解析:

在MySQL中不能使用 = NULL 或 != NULL 等比较运算符在列中查找 NULL 值 。

要用IS NULL 或 IS NOT NULL才会进行NULL值或非NULL值得查找。

所以上面AB错在使用了比较运算符;

D错在对NULL语法不熟悉,应该是IS NOT NULL才对


8.        下列命令中,可以删除视图的是()

A        DELETE

       DROP

C        CLOSE

D        REVOKE

正确答案:B

解析:

A选项,可用于删除表中的行数据;C选项,可用于关闭游标;D选项,可用于收回语句或对象许可。


9.        Mysql中表student_table(id,name,birth,sex),查询name重复的id最大的记录,比如'张三'重复2次,id分别是1、2,则结果是id=2的记录。如下SQL错误的是()?

A

select t4.*
from (
select t2.*
from
(select name,count(*) as c1 from student_table GROUP BY name having c1 > 1)t1
inner join
(select name, max(id) as id from student_table group by name ) t2
on t1.name = t2.name
)t3
right join
student_table t4
on t3.id = t4.id ;

B

select t4.*
from (
select t2.*
from
(select name,count(*) as c1 from student_table GROUP BY name having c1 > 1)t1
inner join
(select name, max(id) as id from student_table group by name ) t2
on t1.name = t2.name
)t3
inner join
student_table t4
on t3.id = t4.id ;

C

select t4.*
from (
select t2.*
from
(select name,count(*) as c1 from student_table GROUP BY name having c1 > 1)t1
inner join
(select name, max(id) as id from student_table group by name ) t2
on t1.name = t2.name
)t3
left join
student_table t4
on t3.id = t4.id ;

D

select t4.*
from (
select t2.*
from
(select name,count(*) as c1 from student_table GROUP BY name having c1 > 1)t1
left join
(select name, max(id) as id from student_table group by name ) t2
on t1.name = t2.name
)t3
left join
student_table t4
on t3.id = t4.id ;

正确答案:A

解析:

A中【right join 】是以右表为主表,结果会包含name不重复的记录,则A错误。BCD结果均正确。


10.        批处理是指包含一条或多条T-SQL语句的语句组,下列选项中,关于批处理的规则描述正确的是()

A        定义一个check约束后,可以在同一个批处理中使用

B        修改一个表中的字段名后,不可以在同一个批处理中引用这个新字段

C        Create default,Create rule等语句同一个批处理中可以同时提交多个

       把规则和默认值绑定到表字段或自定义字段上之后,可以在同一个批处理中使用

正确答案:B

解析:

A选项

不能定义一个CHECK约束后,立即在同一个批处理中使用。

这意味着当你在SQL批处理中定义了一个表的CHECK约束后,你不能在同一组SQL命令中立即尝试插入或更新数据来测试这个约束是否生效。这是因为SQL Server需要先完成整个批处理的编译和执行计划准备,包括约束的创建,之后才能应用这些改变。因此,如果你想测试刚创建的约束,需要在新的批处理中执行数据操作语句。

C选项

Create default, Create rule, Create trigger, Create procedure, Create view等语句同一个批处理中只能提交一个。

这条说明在同一个SQL批处理中,你不能连续编写多个创建不同数据库对象(如默认值约束、规则、触发器、存储过程、视图等)的语句。每个这样的创建语句必须单独提交执行。这是因为每种创建操作都是数据库结构的一个更改,数据库需要分别处理并确认这些更改,而不是作为一个整体。尽管在某些数据库版本或环境下可能存在例外,但通常遵循这一原则以避免潜在的编译或执行错误。

D选项

不能把规则(Rules)和默认值(Defaults)绑定到表字段或自定义字段上之后,立即在同一个批处理中使用。

这类似于A选项的解释,指出在为表字段添加规则或默认值约束后,不能立刻在同一批处理中尝试利用这些约束进行数据操作。数据库需要先完成约束的创建和应用,之后新的约束才能在后续的查询或数据操作中生效。因此,任何测试新约束的行为都应放在一个新的批处理中执行。

总结来说,这些选项强调了在SQL Server中进行数据库设计和管理时,对批处理中操作顺序和执行时机的限制,特别是涉及到数据库对象创建和约束定义时,需要注意操作的隔离性和顺序性

上一篇:八卦GPT-5的一切


下一篇:3D Slicer 教程二 ---- 数据集