第1章 数据库章节
1.1 选择
1.1.1 Having 子句的作用是©。
A.查询结果的分组条件
B.组的筛选条件
C.限定返回的行的判断条件
D.对结果集进行排序
1.1.2 最常用的一种基本数据模型是关系数据模型,它的表示采用(D)
A.树 B.网络
C.图 D.二维表
1.1.3 数据库系统的核心是(B)
A.数据模型 B.数据库管理系統
C.数据库 D.数据库管理员
1.1.4 关系表中每一横行称为(A)
A.元组 B.字段
C.属性 D.码
1.1.5 数据库管理系统维护中,最重要的是(数据维护)
程序维护 数据维护
编码维护 硬件维护
1.1.6 以下那些不是 NoSQL?
mssql memcached mongodb
postgresql cassandra
couchdb redis
1.1.7 PHP 和 MYSQL 的联合使用解决了(C)
A 在 proxy 上处理数据库访问问题
B 在 www 服务器上处理黑客的非法访问问题
C 在 www 服务器上处理数据库的访问问题
D 在 sendmail 邮件系统是上处理数据库的访问问题
1.1.8 以下哪个端口为远程登陆默认端口(3306)
1433 3389 33062
1.2 填空
1.2.1 如何通过 shell 登录 mysql?(mysql -u -p -h -P)
1.2.2 数据库触发器能监控的触发事件有 监视地点(table) 监视事件(insert/update/delete) 触发时间(after/before) 触发事件(insert/update/delete)
1.2.3 数据库系统的组成部分有:硬件、软件、数据库、用户、(数据库管理员)
1.2.4 实现多台交换机或集线器连接在一起只能通过级联的方式(级联复制)
1.2.5 远程连接 mysql 数据库的命令是什么__mysql -u -p -h -P__
1.2.6 当删除一个数据库后,仅能用__binlog , 物理备份__数据重建以前的数据库中的数据。
1.2.7 SQL 中定义别名的三种方法是___列 AS 别名___列 别名___别名= 列___
1.2.8 mysql 服务器默认的监听端口是:3306_ ,mysql 的配置文件是:_/etc/my.cnf__
1.3 简答
1.3.1 简述 mysql 单机安装过程
1.在官网下载二进制包
3.初始化数据
4.启动
1.3.2 mysql 登录命令
mysql -u -p -h -P
1.3.3 说明数据库内存结构中 SGA 和 PGA 的组成,以及这两个内存区存放信息的区别?
SGA 区由数据缓冲区、共享池、重做日志缓冲区、大型池、JAVA 池构成;PGA 区由排序区、私有 SQL 区以及堆栈构成。
SGA 区是由 Oracle 分配的共享内存结构,包含一个数据库实例共享的数据和控制信息。
当多个用户 同时连接同一个实例时,SGA 区数据供多个用户共享,所以 SGA 区又称为共享全局区。用户对数 据库的各种操作主要在 SGA 区中进行。
该内存区随数据库实例的创建而分配,随实例的终止而释 放。PGA 区是在用户进程连接数据库,创建一个会话时,由 Oracle 为用户分配的内存区域,
保存当 前用户私有的数据和控制信息,因此该区又称为私有全局区。每个服务器进程只能访问自己的 PGA 区,所有服务器进程 PGA 区总和即为实例的 PGA 区的大小。
1.3.4 说明数据库表空间的种类,以及不同类型表空间的作用
共享表空间,独立表空间。
共享表空间是一个库的数据都存放一个文件内,独立表空间是一个表一个 ibd 与 frm 文件
1.3.5 mysql 表中的中文字体乱码,原因可能是什么?如何修改 ?
字符集编码问题
ALTER TABLE 表名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
1.3.6 mysql 忘记密码如何操作?
–skip-grant-tables ----> 跳过授权表(mysql.user)
–skip-networking ----> 跳过网络用户连接
1.3.7 请写出目前市场上最常见的 2-5 种关系型数据库厂家,并注明他们产品的最新版和你熟悉的或 者解除过的版本:
厂家:最新版本:熟悉的版本:接触过的版本
mysql 5.6 5.7
Oracle、MsSQL(SQL Server)、PG
1.3.8 如何修改 mysql 的 root 密码
set password for 用户名@localhost = password(‘新密码’);
1.3.9 请举出几个你熟悉的关系型数据库管理系统和非关系型数据库管理系统,非关系型数据库相比 之下有什么不同之处(好处和不足)?
关系型:mysql,Oracle;
非关系型:redis,mongodb;
非关系快,操作简单,有几率丢数据
1.3.10 存储过程与函数的区别?
存储过程是用户定义的一系列 sql 语句的集合,涉及特定表或其它对象的任务,用户可以调用存储 过程,
而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户 表。
1.3.11 什么是视图,游标是什么?
视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,视图通常是 有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易, 相比多表查询。
游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结 果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理 数据的时候,游标显得十分重要。
1.3.12 你对数据库了解吗?你们公司的数据库是什么样的?
高可用 MySQL 及主从架构与读写分离,使用的 MySQL
1.3.13 你们公司数据库最大连接数是多少?
目前了解并发不到 2000
1.3.14 MySQL 数据库 storage engine 中的 myisam、innodb 有什么差别?
myisam 是表级锁,不支持事务,支持温备
innodb 是行级锁,支持事务,自动故障恢复,外键,热备
1.3.15 请列举几个常见的 nosql db 你最熟悉那个?
redis memcached mongodb
1.3.16 简述 where 和 having 的区别?
Where 子句是用来指定 “行” 的条件的,而 Having 子句是指定“组”的条件的
所以 Where 子句 = 指定行所对应的条件
所以 Having 子句 = 指定组所对应的条件
当在 Where 子句和 Having 子句中都可以使用的条件,从语句的执行效率来看,最好写在 Where 子句中。
在使用 Count 函数等对表中的数据进行聚合操作时,DBMS 内部会进行排序处理,而排序操作会增加机器的负担,减少排序的行数,可以增加处理速度。
使用 Where 子句指定条件时,由于排序之前就对数据进行了过滤,所以能够减少排序的数据量。但是 Having 子句是在排序之后才对数据进行分组的,因此与前者相比,需要排序的数据量就要多得多。
第三,使用 Where 子句更具速度优势的另一个理由是,可以对 Where 子句指定条件所对应的列创建 索引,这样可以大幅提高处理速度。
第四,Where 子句中不能使用聚合函数,而 Having 子句中可以
第2章 SQL 语句
2.1 选择
2.1.1 DELETE FROM S WHERE 年龄>60 语句的功能是( A )
A.从 S 表中彻底删除年龄大于 60 岁的记录
B.S 表中年龄大于 60 岁的记录被加上删除标记
C.删除 S 表
D.删除 S 表的年龄列
2.1.2 使用什么命令可以清除表中所有的内容? ( CD )
A.INSERT B.UPDATE
C.DELETE D.TRUNCATE
2.1.3 以下哪个表不用于 mysql 的权限管理( D )
A.HOST B.DB
C.COLUMNS_PRIV D.MANAGER
2.1.4 在 SOL 语法中,用于更新的命令是:( B )
A.INSERT B.UPDATE
C.DELETE D.CREATE
2.1.5 下面命令中不是数据库用来 DML 操作是( D )
A.SELECT B.UPDATE
C.INSERT D.DROUP
2.1.6 SQL 语言中,删除一个表的命令是(B )
A.DELETE B. DROP
C.CLEAR D.RI MORE
2.1.7 MySQL 语句中删除一个表(假如表名称是 t1)的命令是 C
A.rm table t1 B.delete table t1
C.drop table t1 D.truncate t1
2.1.8 下面哪个语句将 user 表的名称变更为 userinfo?( A )
A.alter table user rename as userinfo
B.rename to userinfo from user
C.rename user to userinfo
D.rename user as userinfo
2.1.9 sql 语句中修改表结构的命令是 ( C )
A.modify table B.modify structure
C.alter table D.alter structure
2.1.10 带有( B )子句的 select 语句可以在表的一行或多行上防止排他锁
A.FOR INSERT B.FOR UPDATE
C.FOR DELETE D.FOR REFRESH
2.1.11 在 SQL 中,建立表用的命令是( B )
A.CREATE SCHEMA B.CREATE TABLE
C.CREATE VIEW D.CREATE INDEX
2.1.12 SQL 语言是( C )语言
A.层次数据库 B.网络数据库
C.关系数据库 D.非数据库
2.1.13 SQL 语言中,条件年龄 BETWEEN 15 AND 35 表示年龄在 15 至 35 之间,且(A)
A.包括 15 岁和 35 岁
B.不包括 15 岁和 35 岁
C.包括 15 岁但不包括 35 岁
D.包括 35 岁但不包括 15 岁
2.1.14 在数据库管理系统能实现对数据库中的数据查询、插入、修改和删除,这类功能称为( C )
A.数据定义功能 B.数据管理功能
C.数据操纵功能 D.数据控制功能
2.1.15 下列执行数据的删除语法在运行时不会产生错误信息的选项是( B )
A.Delete * from pat_visit Where inp_no = ‘6’
B.Delete From pat_visit Where inp_no =‘6’
C.Delete pat_visit Where inp_no = ‘6’
D.Delete pat_visit Set inp_no = '6’7
2.2 填空
2.2.1 查询病人表中的所有内容,并以住院号倒序排序 SQL 代码为:Select * from pat_visit ___order by haoma ;desc
2.2.2 查询一根病人的信息。但忘记了该病人的名字,只记得该病人姓“张”,而且名字中有一个 “美”字,SQL 代码为:Select * from Pat_visit where name__like “张”____
2.2.3 在 SQL 中,用子句 DISTINCT 消除重复出现的元组。
2.2.4 标准的 SQL 语言语句类型可以分为 DML 、 DQL 、 DDL 、 DCL
2.2.5 SQL 语句中的查询语句是 select(DQL)
2.2.6 字符转换日期函数__select date_format(now(), ‘%Y-%m-%d’); ___
2.2.7 DML 包括_update_ _ delete _ _instert
2.2.8 在 SQL 中,建立数据库的命令是______,建立视图的命令是_______,建立索引的是________
create database 名字
create view v as (select * from table1) union all (select * from table2);
alter table student add index idx_name(name);
2.2.9 在 SQL 中,用___insert___命令向表中输入数据,用__select___命令检查和查询表中的内容
select
select * from table_name;
2.2.10 在 SQL 中,用_update__命令可以修改表中的数据,用_alter____命令可以修改表的结构
2.2.11 在 SQL 中,Alter 命令可以有两个选择项,______子命令用于修改表的性质,____子命令用 于增加列
alter table change/modify
alter table add
2.2.12 在 SQL 中,用___delete__命令可以从表中删除行,用_drop____命令可以从数据库中删除表
2.2.13 在 SQL 中,控制用保留字__NULL____,非空值用保留字___NOTNULL__
2.2.14 SELECT 命令中,表示条件表达式用____字句,分组用_____字句,排序用____字句
where
group by
order by
2.2.15 在 ORDER BY 字句的选项中,DESC 代表___大到小__序输出,若省略时,代表__从小到大 __序输出
2.2.16 合并多个查询结果集,应使用 _union__关键字
2.3 简答
2.3.1 在 mysql 客户端查询工具中,如何获取当前的所有连接信息。
show full processlist
2.3.2 如何利用 crontab 定期执行 mysql 语句。
mysql -uroot -p -e ‘show databases;’
2.3.3 查看缺省引擎
select @@default_storage_engine;
2.3.4 列举 SQL 常用命令:
use database
show processlist;
show tables;
show variables like ‘xx’;
select * from database.table_name where;
explian select * from table;
2.3.5 Mysql 查看 order 表的第 3 条到第 7 条的数据。
select * from order limit 2,5;
2.3.6 Mysql 授予用户 admin 通过 IP 为 192.168.0.10/24 对数据库的全部授权。
grant all on . to admin@‘192.168.0.%’ identified by ‘123’;
2.3.7 对 order 这个表的 name 字段数据进行 base64 编码
select to_base64(name) from order
2.3.8 为什么说 group by 和 order by 操作的是代价高昂的?
在没有合理索引情况下,需要大量 CPU 时间来做排序和分组。
2.3.9 写分组浏览,分组求和,分组求最大值的 sql 语句,每个只能用 1 句话
浏览:select group_concat(字段名 1) from db group by 字段 2;
求和:select sum(字段名 1) from db group by 字段名 2;
最大值:select max(字段名 1) from db group by 字段名 2;
2.3.10 如何列出所有数据库?(show databases;)
2.3.11 如何查看表内所有数据?(select * from table;)
2.3.12 如何知道表内行数?(select count(*) from table;)
2.3.13 用 SQL 实现以下统计结果
CSBH CSBH_COUNT
20 2
10 8
CSBH SUM_GJQJ
20 211.039900
10 871.317850
Select csbh,count(csbh) as CSBH_COUNT from table group by chbh;
Select csbh,sum(csbh) as CSBH_SUM from table group by chbh;
2.3.14 用 SQL 命令实现给主键添加索引
alter table a add primary key pri(id);
2.3.15 删除如下表中年龄大于 30,且住址为 nj 的员工
表A user_table
Name age city
Tom 20 bj
Jimmy 50 nj
Zhou 33 sh
Jing 30 nj
Nanan 28 sh
create table user_table(
id int(11) auto_increment primary key
name varchar(200),
age int(11),
city varchar(200))
engine=innodb;
insert into user_table(name,age,city) values(‘Tom’,20,‘bj’),
(‘Jimmy’,50,‘nj’),
(‘Zhou’,33,‘sh’),
(‘Jing’,30,‘nj’),
(‘Nanan’,28,‘sh’);
delete from user_table where age>30 and city=‘nj’;
2.3.16 根据上题的表,计算出每个城市的人数和平均年龄
select city,count(name),AVG(age) from user_table group by city;
2.3.17 查询下表平均成绩大于 60 分的同学的学号 s_d)和平均成绩(score)
表 Student 学生表
S_id Sname Ssex
1 Xiaoli 男
2 xiaowang 女
3 zhanglong 男
4 zhaohu 女 表 Course 课 程 表
C_id Cname T_id
1 语文 1
2 历史 3
3 数学 2
4 政治 4 表 SC 成绩表
sid C_id score
1 2 99
3 4 88
1 3 55
2 1 77
表 Teacher 教师表
T_id Tname
1 zhangsan
2 lisi
3 wangwu
4 zhaoliu
create table Student(
S_id int primary key auto_increment,
Sname char(100),
Ssex char(100))
engine=innodb;
insert into Student(S_id,Sname,Ssex) values(1,‘Xiaoli’,‘男’),
(2,‘xiaowang’,‘女’),
(3,‘zhanglong’,‘男’),
(4,‘zhaohu’,‘女’);
create table Course(
C_id int primary key auto_increment,
Cname char(100),
T_id int)
engine=innodb;
insert into Course(C_id,Cname,T_id) values
(1,‘语文’,1),
(2,‘历史’,3),
(3,‘数学’,2),
(4,‘政治’,4);
create table SC(
sid int,
C_id int,
score int)
engine=innodb;
insert into SC(sid,C_id,score) values
(1,2,99),
(3,4,88),
(1,3,55),
(2,1,77);
create table Teacher(
T_id int auto_increment primary key,
Tname char(100))
engine=innodb;
insert into Teacher(T_id, Tname) values
(1,‘zhangsan’),
(2,‘lisi’),
(3,‘wangwu’),
(4,‘zhaoliu’);
mysql> select sid,c from (select sid,avg(score) c from SC group by sid) a where c>60;
±-----±--------+
| sid | c |
±-----±--------+
| 1 | 77.0000 |
| 2 | 77.0000 |
| 3 | 88.0000 |
±-----±--------+
查询上所有同学的学号姓名、选课数、总成绩
mysql> select s.sname,s.S_id,count(s.S_id),sum(c.score) from Student s join SC c on s.S_id=c.sid group by
s.S_id;
±----------±-----±--------------±-------------+
| sname | S_id | count(s.S_id) | sum(c.score) |
±----------±-----±--------------±-------------+
| Xiaoli | 1 | 2 | 154 |
| xiaowang | 2 | 1 | 77 |
| zhanglong | 3 | 1 | 88 |
±----------±-----±--------------±-------------+
2.3.18 有两个表 A 和 B,表结构和字段分别为:
A:B
ID Name ID hobby
1 tim 1 football
2 Jimmy 2 tennis
3 John 3 soccer
请写出 Select A.Name, B.Hobbt from A,B where A.id = B.id 的结果
Select A.Name,B.Hobbt from A join B on A.ID = B.ID;
Tim football
Jimmy tennis
John soccer
2.3.19 写出 MySQL5.6 新建用户 dev,授权 op 库 test 表所有权限,任何地址的访问权限 SQL
grant all on op.* to dev@’%’ identfied by ‘123’;
2.3.20 写出一条 sql 语句:取出表 A 中满足时间 2006 年 1 月 1 日至 2006 年 1 月 31 日的记录(时间 字段为 time)
select * from A where time between ‘2006-01-01’ and ‘2006-01-31’;
2.3.21 写出一条 SQL 语句:清除 A 表中的数据,但不删除表
truncate table A;
2.3.22 查找在机关单位任职的人员姓名、性别、出生日期、单位名称、并且查询结果按照单位排 序;
select 姓名,性别,出生日期,单位名称 from table order by 单位名称;
2.3.23 查找性别为女的少数民族的非中共人员姓名、民族、出生日期;
select 姓名,民族,出生日期 from table where 性别=女 and 面貌!=中共人员
2.3.24 在事业单位查找具有研究生学历博士学位的在任人员,要求显示姓名、性别、出生日期、政 治面貌、单位名称、职务名称、批准任职日期,同时结果按照批准任职日期升序;
select 姓名,性别,出生日期,政治面貌,单位名称,职务名称,批准任职日期 from db1 order by 批准任职日期;
2.3.25 查询在不同单位性质类别的单位任职的人数;
select count(*) from db group by 单位;
2.3.26 请写出下列语句的执行结果:select replace (ltrim(rtrim(‘abc3453436’)),‘34’,‘abc’)
abcabc5abc3
2.3.27 写一个查询语句,从数据库表中取出年龄 age 最大的十个人
select * from table order by age desc limit 10;
2.3.28 编写 SQL 语句。统计计算机系 58 班每个月过生日的男生人数,井按月进行排序
表 dept (系):
dept_id(系编号),dept_name(系名称)
表 class(班级):
class_id(班编号),dept_i(系编号),class_name(班名)
表 setdent(学生):
setdent_id(学生编号),class_id(班编号), sex(性别),birthday(生日)
select dept.dept_name,class.class_name,count(student_id) date_format(student.birthday,%m)
from dept
join calss
on dept.dept_id=class.dept_i
join student
on class.calss_id=student.class_id
where student.sex=’m’
group by date_format(student.birthday,%m)
order by date_format(student.birthday,%m)
desc ;
2.3.29 现有 T 表:(字段:ID,NAME,ADDRESS,PHONE,LOGDATE)
查询 T 表中地址中包含“北京”的 SQL 语句
select * from T where ADDRESS like ‘%北京%’;
插入一条数据到 T 表中
insert into T(ID,NAME,ADDRESS,PHONE,LOGDATE) value(1,2,3,4,5);
请写出将 T 表中第 3~5 行数据列出来的 SQL 语句
select * from T limit 3,5;
2.3.30 Mysql 创建数据库的命令,创建表的命令,插入语句的命令?
create database
create table
insert into
2.3.31 数据库中的两个数据库表,定义如下:
表名 1:cardApply
字段(字段名/类型/长度):
applyNo varchar 8; //申请单号(关键字)
applyDate date 8; //申请日期
state varchar 2; //申请状态
表 2:cardApplyDetail
字段(字段名/类型/长度):
applyNo varchar 8; //申请单号(关键字)
name varchar 30; //申请人姓名
idCard varchar 5; //ID 卡号
applyNo varchar 8; //申请单号(关键字)
其中,两个表的关联字段为申请单号,依据上述信息完成 1-5 题目:
查询 ID 卡号为 11111 的申请日期
Select applyNo , applyDate from cardApply where applyNo=’1111’
查询同一个 ID 卡号有两条以上记录的 ID 卡号及记录个数
Select applyNo,count(applyNo) from cardApply group by applyNo having count(applyNo)>2;
将 ID 卡号为 11111 的记录在两个表中的申请状态均改为 02
Update cardApply set state=‘02’ where applyNo=‘1111’;
删除 cardApplyDetall 表中所有姓李的记录
Delete from cardApplyDetall where name like ‘李%’;
假如某一天有 10 个人申请,另外一天有 20 个人申请,还有一天有 30 个人申请,查询出申请卡最多的那一天日期
Select applyDate,count(applyNo) from cardApply group by applyDate order by count(applyNo) desc limit1;
2.3.32 第一题
Student S# Sname Sage Ssex 学生表
Course C# t# Cname () 课程表
SC S# C# score 成绩表
Teacher T# tname 教师表
写出学生表建表语句
Create table student(S# int not null primary key auto_increment comment ‘学号’,
Sname varchar(64) not null comment ‘姓名’,
Sage tinyint unsigned not null default 0 comment ‘年龄’,
Ssex enum(‘m’,’f’) not null default ‘m’ comment ‘性别’
)engine=innodb charset=utf8 comment ‘学生表’;
查询姓张的学生名单
Select * from student where sname like ‘张%’;
查询所有同学的学号、姓名、选课数、总成绩
Select s.s# ,s.sname,count(C#),sum(sc.score) from student as s
Join sc
On s.s#=sc.s#
Group by s.s#,s.sname
查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩
Select s.sname,sum(sc.socre) from student as s
Join sc
On s.s#=sc.s#
Join course as co
On sc.c#=co.c#
Join teacher as te
On co.t#=te.t#
Where te.tname=’叶平’
2.3.33 第二题
第一题中的教师表中哪个字段可以建立唯一索引?写出建立唯一索引的语句
Alter table teacher add unique key idx(t#);
2.3.34 第三题
如何检查第一题中学生表在数据库中所占的空间大小
Select table_name,(index_length+avg_row_length*table_rows)/1024/1024 from information_schema.tables
Where table_name=’student’;
如何将第一题中的 4 个表进行备份,数据库用户、密码为:admin/admin 数据库名为:dbschool
SELECT CONCAT(“mysqldump -uroot -p123 “,table_schema,”
“,table_name,” >/tmp/”,table_schema,"_",table_name,".sql" )
FROM information_schema.tables
WHERE table_schema NOT IN(‘information_schema’,‘performance_schema’,‘sys’)
INTO OUTFILE ‘/tmp/bak.sh’ ;
2.3.35 部门表:t_dept(deptid ,deptname)工资表:t_salary(id,employeeid,deptid,salary)要求:查出员工的平均工资大于 3000 的部门名称
Select td.deptname,avg(ts.salary) from t_dept as td join t_salary as ts
On td.deptid=ts.deptid
Group by td.deptname
Having avg(ts.salary)>3000;
2.3.36 student 表(Sno,Sname,Sage,Ssex)Course 表(Cno,Cname,Ccredit)SC 表(Sno, Cno,grade)
建表 student、course、SC(略)
查询年龄小于 20 的学生学号、年龄,并显示
Select s.sno,s.sage from student as s where s.sgae<20
查询年龄不在 20-23(包括 20,23)的学生的成绩
Select s.sname,s.sage,sc.score from student as s
Join sc
On s.sno=sc.sno
Where s.sage<20
Union all
Select s.sname,s.sage,sc.score from student as s
Join sc
On s.sno=sc.sno
Where s.sage>23
2.3.37 给出查询表 A(ID,Name)中存在 ID 重复三次以上的记录的 SQL 语句
Select id ,count(id) from a group by id having count(id)>3;
2.3.38 mysql 用户名:root,密码:123456,socket:/opt/mysql3306/mysql3306.sock,跑默认端口, 请使用一条命令更新该数据源 neutron 库中的 ipallocations 表中的 ip_address 字段等于 10.4.182.36 的记录为 202.113.14.92
mysql –uroot –p123456 –S /opt/mysql3306/mysql3306.sock –e “update neutron. Ipallocations set
ip_address=’ 202.113.14.92’ where ip_address=’ 10.4.182.36’”;
2.3.39 写出以下 SQL 语句(涉及到表名和字段自定义)
查询某一个表前 20 条记录
Delete from t where id<21;
某公司从下个月起,每个人工资在原有基础上上涨 10%
Update t set salary=salary+salary*.01 where date=date_format(now(),%m)+1;
删除某个表中日期为 2017-01-01 以前的数据
Delete from t where date<’ 2017-01-01’;
新增一条记录
Insert into t values(xxx)
备份数据库
Mysqldump –uroot –pxxx –A –master-data=2 –single-transaction –R –E –triggers >/bak.sql
2.3.40 有三张表分别为客户表 customers,账户表 accounts,用户表 users
客户表 customers (cust_id,cust_name,cust_opendate())
账户表 accounts(acc_id,acc_name,cust_id,acc_opendate(账户开通时间))
用户表 users(user_id,user_name,cust_id,lost_login_date(用户最后登录时间))
每个客户可以开通多个帐号,每个客户有多个用户,cust_id,acc_id,user_id 分别为客户、账户、用户的唯一标志,cust_opendate,acc_opendate,lost_login_date 类型为 date 按照要求用一条 sql 语句完成
统计每个月开通的客户数
Select date_format(a. acc_opendate,%m),count(c. cust_id)
From customers as c join accounts as a
On c. cust_id=a. cust_id
Group by date_format(a. acc_opendate,%m)
列出上个月开通客户列表,并输出这些客户所具有的账户和用户数量
Select a.acc_name,count(u. user_id) from accounts as a
Join users as u
On a. cust_id=u. cust_id
Where date_format(a. acc_opendate,%m) = date_format(now(),%m)-1;
统计三个月内登录过的客户数量
Select lost_login_date,count(user_id) from users
Where date_format (lost_login_date,%m) in (date_format(now(),%m),date_format(now(),%m)-1,
date_format(now(),%m)-2)
统计老客户今年开通账户的数量,老客户是指今年以前开通的账户
Select cust_opendate,count(cust_id) from customers
Where date_format (cust_opendate,%y)> date_format (now(),%y)
2.3.41 SQL
表名 user
Name Tel Content Date
张三 13333663366 大专毕业 2006-10-11
张三 13612312331 本科毕业 2006-10-15
张四 021-55665566 中专毕业 2006-10-15
(a) 有一新记录(小王 13254748547 高中毕业 2007-05-06)请用 SQL 语句新增至表中
Insert into user values(‘小王’,’ 13254748547’,’ 高中毕业’,’ 2007-05-06’)
(b) 请用 sql 语句把张三的时间更新成为当前系统时间
Update user set date=now() where name=’张三’;
© 请写出删除名为张四的全部记录
Delete from user where name=’张四’
2.3.42 创建一个用户并赋予权限
Grant all on . to root@’10.0.0.%’ indentified by ‘123’;
2.3.43 创建表空间 neuspace,数据文件命名为 neudata.dbf,存放在 d:\data 目录下,文件大小为 200MB,设为自动增长,增量 5MB,文件最大为 500MB
Create tablespace neuspace datafile ‘d:\data\neudata.dbf’size 200MB AUTOEXTEND ON NEXT 5M MAXSIZE 500M;
2.3.44 以系统管理员身份登录,创建账号 tom,设置 tom 的默认表空间为 neuspace.为 tom 分配 connect 和 resource 系统角色,获取基本的系统权限。然后为 tom 分配对用户 scott 的表 emp 的 select 权限和对 SALARY,MGR 属性的 update 权限
Create user tom identified by tom default tablespace account;
grant connect, resource to tom;
grant select on scott.emp to tom
grant update on SALARY.MGR to tom
2.3.45 按如下要求创建 class
属性 类型(长度) 默认值 约束 含义
CLASSNO 数值(2) 无 主键 班级编号
CNAME 变长字符(10)无 非空 班级名称
Create table class(classno int(2) not null primary key auto_increment comment ‘班级编号’,
CNAME varchar(10) not null comment ‘班级名称’)
2.3.46 学生表有四个字段:学号、姓名、年级、学分,统计出按年级降序同名同姓的数据情况(写 出 sql 语句)
Select name ,count(name) from user group by name order by class desc ;
2.3.47 在表 class 的 CNAME 属性上创建索引 class_sname_idx
Alter table class add index class_sname_idx(CNAME);
2.3.48 sql 类
学生信息表
姓名(Name) 学号(Code)
张三 001
李四 002
马五 003
甲六 004
考试信息表
学号 学科 成绩
001 数学 80
002 数学 75
001 语文 90
002 语文 80
001 英语 90
002 英语 85
003 英语 80
004 英语 70
查询各科成绩的平均分,显示栏位为学科、平均分,sql 怎么写
Select a.学科,avg(b.成绩) from student as a join course b on a.id=b.code group by a.学科;
查询所有学生各科成绩,显示栏位为姓名、学号、学科、成绩,并以学号与学科排序,没有成绩的学生也需要列出,sql 怎么编写
Select a.name,a.code,b.学科,b.成绩 from student as a join course as b on a.code=b.id order by a.学号,b.学科
查询出单科成绩最高的,显示栏位为:姓名、学号、学科、成绩,sql 怎么编写
Select a.name,a.code,b.id,b. 学科,max(b.成绩) from from student as a join course as b on a.code=b.id Group by b. 学科
列出每位学生各科成绩,要求输出格式:姓名、学号、语文成绩、数学成绩、英语成绩,sql 怎么写
Select a.name,a.code,b.id,
Case when b.学科=’ 语文’ then b.成绩 end as ‘语文成绩’,
Case when b.学科=’ 数学’ then b.成绩 end as ‘数学成绩’,
Case when b.学科=’ 英语’ then b.成绩 end as ‘英语成绩’,
from student as a join course as b on a.code=b.id
Group by 姓名,学号;
2.3.49 不借助第三方工具,如何获得 SQL 的执行计划?
explain select xxx from TAB where xxx