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进行获取,无法直接使用等号