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

1.        查询语句select stuff('lo ina',3, 1, 've ch')结果为?

A        love

       love china

       china love

       china

正确答案:B

解析:

STUFF(原字符, 开始位置, 删除长度, 插入字符)

从指定的起点处开始删除指定长度的字符,并在此处插入另一组字符


2.        已知数据表STU,现需创建视图view_s,显示所有男同学的信息。下列SQL语句正确的是()

A        CREATE VIEW AS SELECT * FROM STU

B        CREATE VIEW view_s AS SELECT * FROM STU WHERE 性别='男'

C        CREATE view_s SELECT * FROM STU WHERE 性别='男'

D        CREATE view_s AS SELECT * FROM STU

正确答案:B

解析:

创建视图语句:

CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] AS SELECT语句 [ WITH [ CASCADED | LOCAL ] CHECK OPTION ] from 表名 [where 条件]


3.        下列关于视图说法错误的是?

A        视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据

       创建视图用CREATE VIEW

       修改视图用ALTER VIEW

D        删除视图用DELETE VIEW

正确答案:D

解析:

视图(子查询):是从一个或多个表导出的虚拟的表,其内容由查询定义。具有普通表的结构,但是不实现数据存储。单表视图一般用于查询和修改,会改变基本表的数据;多表视图一般用于查询,不会改变基本表的数据。

【例子】:   在一个班级里,作为班主任需要知道全班同学所有课程的成绩,便于全面指导;而数学老师只需要知道全班学生的数学成绩就行了。所以视图的一个重要作用就是区分权限。

由题意得,视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据符合题意,BC也符合视图的语法,而删除视图应该使用DROP VIEW进行,故选D


4.        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 t1.*,t2.*
from (
select * from student_table where sex = '男' ) t1 
left  join 
(select * from student_table where sex = '女')t2 
on t1.birth = t2.birth and t1.name = t2.name ; 


的结果行数是()?

A        4

       2

C        3

D        1

正确答案:C

解析:

题目中【left join ... on t1.birth = t2.birth and t1.name = t2.name ; 】left join意思是包含inner join的结果(左右表中的birth、name都不为NULL时才会匹配上),无法匹配t2中一个字段为NULL或两个字段都为NULL的记录(所以t2结果不含有'李四'、 '2001-12-01' ),查询结果如下图:


5.        下列选项关于游标的作用叙述正确的是()

A        不允许定位在结果集的特定行

B        从结果集的目标位置检索一行或一部分行

       不支持对结果集中当前位置的行进行数据修改

D        为由其他用户对显示在结果集中的数据所做的更改提供不同级别的可见性支持

正确答案:D

解析:

游标是一种从包括多条数据记录的结果集中每次提取一条记录以便处理的机制,可以看做是查询结果的记录指针。A选项,游标允许定位在结果集的特定行;B选项,从结果集的当前位置检索一行或一部分行;C选项,支持对结果集中当前位置的行进行数据修改。


6.        从学生信息表(student)中提取姓名(name)列值为NULL的记录,下列选项正确的是()

A        SELECT * FROM student WHERE name IS NOT NULL

       SELECT name FROM student WHERE IS NULL

C        SELECT name FROM student WHERE it IS NULL

D        SELECT * FROM student WHERE name IS NULL

正确答案:D

解析:A选项,为提取姓名列值为非NULL的记录,与题目所求不符;B选项的WHERE语句中缺少指定列名,条件不全;C选项试图用it指代列名,但SQL语句不支持该方法。


7.        下列操作在视图上无法完成的是?

A        视图数据查询

       更新视图数据

C        在视图中定义新的基本表

D        在视图中定义新视图

正确答案:C

解析:

由题意得,在视图中可以进行基本的增删改查故AB排除,在视图中也可以定义新的视图,却无法创建表,因为视图是个虚表,故C错误


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

('1003' , '' , '2000-01-01' , '男');
('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(t2.birth)  as c1
from (
select * from student_table where sex = '男' ) t1 
inner  join 
(select * from student_table where sex = '女')t2 
on t1.birth = t2.birth and t1.name = t2.name ; 


的结果行数是()?

A        1

B        2

C        3

D        4

正确答案:A

解析:

题目中【inner join ... on t1.birth = t2.birth and t1.name = t2.name ; 】inner join意思是左右表中的birth、name都不为NULL时才会匹配上,结果中不含有一个字段为NULL或两个字段都为NULL的记录,结果只有'张三'一条记录。所以选A.

查询结果如下图:


9.        比赛结果result表内容如下:
Date                     Win
2017-07-12               胜
2017-07-12               负
2017-07-15               胜
2017-07-15               负
如果要生成下列结果, 正确的sql语句是:(      )
比赛日期            胜     负
2017-07-12          1      1
2017-07-15          1      1

A

select Date As 比赛日期, (case when Win='胜' then 1 else 0 end) 胜, (case when Win='负' then 1 else 0 end) 负 from result group by Date

B

select Date As 比赛日期, SUM(case when Win='胜' then 1 else 0 end) 胜, SUM(case when Win='负' then 1 else 0 end) 负 from result

C

select Date As 比赛日期, SUM( when Win='胜' then 1 else 0 end) 胜, SUM( when Win='负' then 1 else 0 end) 负 from result group by Date

D

select Date As 比赛日期, SUM(case when Win='胜' then 1 else 0 end) 胜, SUM(case when Win='负' then 1 else 0 end) 负 from result group by Date

正确答案:D

解析:

由题意得,需要行转列按日期分组并对列求和,因此需要group by Date, sum(...胜/负)。

A中无sum,错;

B中无group by,错;

C中case when ... then ... else ... end用法不正确,错;

选D


10.        下列选项中不属于结构化查询语言的组成部分的是()

A        数据定义语言

B        数据处理语言

       数据字典

D        数据库事务

正确答案:C

解析:

SQL语言的组成部分有:数据定义语言、数据处理语言、数据控制语言、数据库事务。

数据字典是关于数据库中数据的描述,是元数据,而不是数据本身。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值