数据库SQL习题练习Day1

1.SQL查询中使用WHere子句指出的是
A. 查询目标
B. 查询结果
C. 查询视图
D. 查询条件

where后接的是用来筛选结果的查询条件

2.在SQL中用条件表示价格在在30至40之间,应该如何表达?
A. in (30,40)
B. BETWEEN 30 AND 40
C. BETWEEN 30 OR 40
D. BETWEEN 30 TO 40

本题考察的是:BETWEEN之间用AND来连接起始值和终止值,包括 起始值和终止值;
而 in(xx,xx,...)里面的值通常是不连续的

3.SQL语言可以分为多个类别,那么不属于数据操纵语言DML的是()
A. update
B. grant
C. delete
D. insert

数据库 SQL 语言分为四大类:DQL、DML、DDL、DCL、TCL
数据查询语言(DQL):是由SELECT子句,FROM子句,WHERE子句组成的查询块
数据操纵语言(DML): SELECT(查询)、 INSERT(插入)、 UPDATE(更新)、 DELETE(删除)
数据定义语言(DDL):CREATE(创建数据库或表或索引)、ALTER(修改表或者数据库)、DROP(删除表或索引)
数据控制语言(DCL):GRANT(赋予用户权限) 、REVOKE(收回权限)、 DENY(禁止权限)
事务控制语言(TCL):SAVEPOINT (设置保存点)、ROLLBACK (回滚) 、COMMIT(提交)

4.将成绩表(grade)按成绩(point)升序排列,下列语句错误的是()
A. SELECT * FROM grade ORDER BY point;
B. SELECT point FROM grade ORDER BY point;
C. SELECT * FROM grade ORDER BY point ASC;
D. SELECT * FROM grade ORDER BY point DESC;

在没有特殊要求的情况下,记录默认按升序排列(ASC)
DESC 特指降序排列

5.小李在创建完一张数据表后,发现少创建了一列,此时需要修改表结构,应该用哪个语句进行操作?
A. MODIFY TABLE
B. INSERT TABLE
C. ALTER TABLE
D. UPDATE TABLE

对表的结构修改属于DDL语句。常用公式:
添加列:ALTER TABLE 表名 add 字段名 字段类型(长度)
修改列:ALTER TABLE 表名 modify 字段名 字段类型(长度)
删除列:ALTER TABLE 表名 drop 字段名 字段类型(长度)

6.现在有一个学生表student,需要回收所有机器的nkw用户对学生表student所在数据库user的update和insert权限,则下列语句中能够实现这一功能的语句是()
A. revoke update,insert on user.* to ‘nkw’@‘%’;
B. revoke update,insert on . to ‘nkw’@‘%’;
C. revoke update,insert on user. from ‘nkw’@‘%’;*
D. revoke update,insert on . from ‘nkw’@‘%’;

回收表的操作功能语句格式为:revoke...on...from
题目要求的是从数据库 user 进行实现

7.下列关于视图的相关概念描述不正确的是()
A. 视图可以解决检索数据时一个表中得不到一个实体所有信息的问题
B. 视图是一种数据库对象,是从数据库的表或其他视图中导出的基表
C. 若基表的数据发生变化,则变化也会自动反映到视图中
D. 数据库存储的是视图的定义,不存放视图对应的数据

视图是虚拟表,是一个依赖于别的表上的寄生表,
不存储数据,对视图的操作最终都会转化为其对表的操作;
视图所引用的表称为视图的基表。

8.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’ , NULL , ‘2001-12-01’ , ‘女’);
(‘1006’ , ‘张三’ , ‘2001-12-02’ , ‘女’);
执行
select t1.name from
(select * from student_table where sex = ‘女’)t1
inner join
(select * from student_table where sex = ‘男’)t2
on t1.name = t2.name;
的结果行数是()?
A. 4
B. 3
C. 2
D. 1

内连接、自连接、外连接(左、右、全)、交叉连接 。
内连接(inner join/join):只有两个元素表(非 NULL)相匹配的才能在结果集中显示。
外连接outer join:可进一步分为左外连接left outer join和右外连接right outer join,(简称左连接left join,右连接 right join)。
左外连接:左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。
右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。
全外连接(full join/full outer join):连接的表中不匹配的数据全部会显示出来。
交叉连接(cross join): 笛卡尔效应,即不加任何条件,达到 M*N 的结果集。

9.Mysql中表student_info(id,name,birth,sex),字段类型都是varchar,插入:1018 , 赵六 , 2003-08-02 , 男;
SQL正确的是()?
A. insert overwrite student_info values(‘1018’ , ‘赵六’ , ‘2003-08-02’ , ‘男’);
B. insert into student_info values(1018 , ‘赵六’ , ‘2003-08-02’ , ‘男’);
C. insert into student_info(birth,id,name,sex) values(‘2003-08-02’ ,‘1018’ , ‘赵六’ , ‘男’);
D. insert into student_info value(‘1018’ , ‘赵六’ , ‘2003-08-02’ , ‘男’);

插入时是 insert into 不是 insert overwrite
在插入数据时,字符类型需要带上单引号
同时,再插入数据时,需要保持字段名和字段值的顺序一致

10.Mysql中表student_table(id,name,birth,sex),score_table(stu_id,subject_name,score),查询多个学科的总分最高的学生记录明细以及总分,如下SQL正确的是()?
A. select t2.*,c1 as 最高分 from (
select stu_id,sum(score) as c1 from score_table group by stu_id order by c1 desc limit 1) t1
join student_table t2
on t1.stu_id = t2.id ;

B. select t2.,c1 as 最高分 from (
select stu_id,max(score) as c1 from score_table group by stu_id order by c1 desc limit 1) t1
join student_table t2
on t1.stu_id = t2.id ;
C. select t2.
,c1 as 最高分 from (
select stu_id,max(sum(score)) as c1 from score_table group by stu_id order by c1 desc limit 1) t1
join student_table t2
on t1.stu_id = t2.id ;
D. select t2.*,c1 as 最高分 from (
select stu_id,max(sum(score)) as c1 from score_table group by stu_id) t1
join student_table t2
on t1.stu_id = t2.id ;

SQL语句执行顺序:from->where->group by->having->select后面->order by
聚合函数之间不可以直接嵌套使用。

11.下列说法错误的是?
A. 模糊查询中,*表示全部信息
B. 可以用统计函数avg()计算平均值
C. 在使用insert语句插入数据时,表达式的数据类型和表格中对应各列的数据类型不一定需要一致
D. 视图是数据库对象,可以使用SELECT等语句

在使用insert语句插入数据时,表达式的数据类型和表格中对应各列的数据类型必须一一对应

12.Mysql中表student_table(id,name,birth,sex),查询张姓、李姓的学生总人数,错误的是()?
A. select sum(case when name like ‘张%’ then 1 else 0 end) as zhang_first_name ,
sum(case when name like ‘李%’ then 1 else 0 end) as li_first_name
from student_table;
B. select count(case when name like ‘张%’ then 2 else null end) as zhang_first_name ,
count(case when name like ‘李%’ then 2 else null end) as li_first_name
from student_table;
C. select count(case when name like ‘张%’ then 1 else 0 end) as zhang_first_name ,
count(case when name like ‘李%’ then 2 else 0 end) as li_first_name
from student_table;

D. select sum(case when name like ‘张%’ then 1 else null end) as zhang_first_name ,
sum(case when name like ‘李%’ then 1 else null end) as li_first_name
from student_table;

在sql 中,只要有null,参与计算结果就是null,但是对于分组函数来说。自动排除null。
因为count分组函数,计算的总记录条数,所以在返回为null 的时候,count自动忽略;
而如果不存在就返回0,则总记录条数,就不准确。

13.Mysql中表student_info(id,name,birth,sex),字段类型都是varchar,插入:1016 , 王五 , 2003-03-01 , 男;
SQL错误的是()?
A. insert into student_info(name,id,sex,birth) values(‘王五’, ‘1016’ , ‘男’, ‘2003-03-01’ );
B. insert into student_info(id,name,birth,sex) values(‘1016’ , ‘王五’ , ‘2003-03-01’ , ‘男’);
C. insert into student_info(‘id’,‘name’,‘birth’,‘sex’) values(‘1016’ , ‘王五’ , ‘2003-03-01’ , ‘男’);
D. insert into student_info(id,name,birth,sex) values(‘1016’ , ‘王五’ , ‘2003-03-01’ , ‘男’);

字段名顺序与字段值顺序一致即可,可以给部分或所有字段名加``,不能加''

14.在MySql中进行数据查询时,如果要对查询结果的列名重新命名,将sno列重新命名为学号,则下列语句正确的是( )
A. select sno as 学号 from T
B. select 学号= sno from T
C. select sno 学号 from T
D. select sno=学号 from T

as只用于mysql语言中,as可以为列或者表起别名,as可以省略,但是要用空格代替

15.要求删除商品表中价格大于3000的商品,下列SQL语句正确的是()
A. DELETE FROM 商品 WHERE 价格>3000
B. DELETE * FROM 商品 WHERE 价格>3000
C. DELETE FROM 商品
D. UPDATE 商品 SET * =NULL WHERE 价格>3000

删除操作格式为DELETE FROM <表名> [WHERE <条件>];
修改操作的格式为UPDATE<表名> SET <列名>=<值表达式>[<列名>=<值表达式>]...[WHERE<条件>]

16.一张学生成绩表score,部分内容如下:
name course grade
张三 操作系统 67
张三 数据结构 86
李四 软件工程 89
用一条SQL 语句查询出每门课都大于80 分的学生姓名,SQL语句实现正确的是:( )
A. Select distinct name from score where name not in(Select name from score where grade <= 80);
B. Select distinct name from score where name in(Select name from score where grade <= 80);
C. Select name from score where name not in(Select name from score where grade <= 80);
D. Select name from score where name in(Select name from score where grade <= 80);

由于题目中给出的表,含有张三的两门课程,所以为了避免返回学生姓名重复,
使用 distinct 关键字,用于返回唯一不同的值,这样就解决了问题

17.在下列sql语句错误的是?
A. name IS NULL
B. name == NULL
C. name IS NOT NULL
D. NOT(name IS NULL)

在sql中若要取得NULL,则必须通过IS NULL或者IS NOT NULL进行获取,无法直接使用等号

你可能感兴趣的:(SQL,数据库,sql,mysql)