数据库
编程题
1.设有如下关系表R、S和T:
R(BH,XM,XB,DWH)
S(SWH,DWM)
T(BH,XM,XB,DWH)
实现R∪T的SQL语句是。
答案示例:
SELECT * FROM R UNION SELECT * FROM T
SELECT * FROM R UNIO SELECT * FROM T
2.考虑如下表结构,写出建表语句
ID(自增主键) NAME(非空) Blance(非空)
1 A 19.50
2 A 20.50
3 B 100.00
create table text (id int primary key,NAME varchar(10) not null,Blance double not null);
3.有表list,并有字段A,B,C, 类型都是整数,表中有如下几条记录
A B C
2 7 9
5 6 4
3 11 9
现在对该表一次完成以下操作
1.查出B和C列的值,要求按B列升序排列
select B,C from list order by B ;
2.写出一条新的记录,值为(7,9,8)
insert into list values(7,8,9);
3.查询C列,要求消除重复的值,按降序排列
select distinct C from list order by C desc;
+
| C |
+
| 9 |
| 4 |
+
理论简答题
1.order by与group by的区别
答案:
order by 排序查询、asc升序、desc降序 group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。
使用group by 子句的查询语句需要使用聚合函数。
2.简述关系型数据库和非关系型数据库的区别,以及常见的关系型数据库和非关系型数据库
答案:
当前主流的关系型数据库有Oracle、MySQL等;
非关系型数据库有Redis,MongoDB等;
关系型数据库通过外键关联来建立表与表之间的关系,非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定
3.什么是事务?及其特性?
答案:
事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。
事务特性:
(1)原子性:即不可分割性,事务要么全部被执行,要 么就全部不被执行。
(2)一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态
(3)隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,
(4)持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。
4.MySQL的常用类型有哪些?
字符串类型
char
varchar
text
数值类型
TINYINT
INT
BIGINT
DECIMAL
日期和时间类型
DATE YYYY-MM-DD 1000-01-01 -> 9999-12-31
TIME HH:MM:AA
DATETIME YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:00 ->9999-12-31 23:59:59
5.MySQL的char varchar text的区别?
• char 定长字符串 长度范围是 0-255字节
• varchar 变长字符串 长度范围 0-65535 字节 mysql5.0之前 最大长度为255
• text 长文本数据 长度范围 0-65535字节 与varchar的区别是不能设置默认值
6.如何对查询语句进行优化
• 开启慢查询日志
• 通过慢查询日志找到执行较慢的sql语句
• 使用 explain 或 desc 具体分析sql语句
优化的方案:
• 通过使用或建立索引提高sql的执行效率
• 1,给经常作为查询条件的字段添加索引
• 2,添加索引的字段,尽量保持一定的唯一性,
• 3,在使用索引时,注意类型,防止出现有索引,用不上
• 4,注意在使用like模糊查询时,如果%或_出现在前面,则用不上索引
7.为什么以下SQL语句在执行时不能命中phone的索引?
解读:
多数情况下的手机号字段都是使用字符串类型进行存储,因为普通的int类型最大的数值为4 294 967 295(就是说存不了11位数字),而且推荐使用varchar(20)
1,有可能出现国家代号如+86
2,手机号通常不会用来做运算
因此上题sql语句不能命中phone的索引主要原因是因为 phone是字符串类型,而sql语句中的phone给的是数字类型
所以是类型错误,导致sql语句不能命中phone的索引
8.NoSQL了解么,和关系数据库的区别?
关系型数据库:
• 高度组织化结构化数据
• 结构化查询语言(SQL)
• 数据和关系都存储在单独的表中。
• 事务,join关联查询,
Nosql数据库:
• 非结构化的存储。
• 没有声明性查询语言
• 支持高并发
• 基本支持分布式,易于扩展,可伸缩
9.redis有几种常用存储类型?
字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型
10.假设订单表orders用来存储订单信息,cid代表客户编号,money代表单词订购额,现要查询每个客户的订购次数和每个客户的订购总金额,下面()sql语句可以返回正确结果。
A: select cid,count(money),sum(cid)from orders group by cid
B: select cid,count(money),sum(cid)from orders order by cid
C: select cid,count(cid),sum(money)from orders order by cid
D: select cid,count(cid),sum(money)from orders group by cid
答案:D
11.现有客户表customers(主键:客户编号cid),包含10行数据,订单表orders(外键:客户编号cid),包含6条数据。
执行sql语句:select * from customers right outer join orders on customers.cid=orders.cid。最多返回()条记录。
A:10
B:6
C:4
D:0
答案: B
12.索引是什么?有什么作用以及优缺点?
答案:
索引是对数据库表中一或多个列的值进行排序的结构,是帮助MySQL高效获取数据的数据结构。
你也可以这样理解:索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在 数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。
MySQL数据库几个基本的索引类型:普通索引、唯一索引、主键索引、全文索引
索引加快数据库的检索速度
索引降低了插入、删除、修改等维护任务的速度
唯一索引可以确保每一行数据的唯一性
通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能
索引需要占物理和数据空间
13.索引的优缺点,什么时候使用索引,什么时候不能使用索引?
答案:
索引最大的好处是提高查询速度, 缺点是更新数据时效率低,因为要同时更新索引。
对数据进行频繁查询进建立索引,如果要频繁更改数据不建议使用索引。
14.事务四大特性。
答案:
原子性,要么执行,要么不执行
隔离性,所有操作全部执行完以前,其它会话不能看到过程
一致性,事务前后,数据总额一致
持久性,一旦事务提交,对数据的改变就是永久的
15.MySQL数据库的有几种引擎?和使用场景
MYISAM 不支持事务,不支持外键,表锁,插入数据时,锁定整个表,查表总行数时,不需要全表扫描
INNODB 支持事务,支持外键,行锁,查表总行数时,全表扫描
16.什么是事务?
事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将一组语句作为事务考虑,就需要通过ACID测试(事务的四大特性),即原子性,一致性,隔离性和持久性。
17.索引都有哪几种分类?
答:
普通索引:最基本的索引,没有任何限制
唯一索引:与”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。
主键索引:它是一种特殊的唯一索引,不允许有空值。
全文索引:针对较大的数据,生成全文索引很耗时好空间。
组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则
18.关系型数据库和非关系型数据库区别是什么?
答:
查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库
存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是
集合等各种格式,而数据库则只支持基础类型。
19.简单比较一下RDBMS和noSQL(不超过三句话)?
答案:
1.Nosql(not only sql) 不是用于关系型数据库管理系统(RDBMS)
2.RDBMS分布式困难,noSQL则比较容易
20.MySQL中myisam与innodb的区别,至少5点?
答案:
1.InnoDB支持事物,而MyISAM不支持事物
2.InnoDB支持行级锁,而MyISAM支持表级锁
3.InnoDB支持MVCC, 而MyISAM不支持
4.InnoDB支持外键,而MyISAM不支持
5.InnoDB不支持全文索引,而MyISAM支持
21.varchar和char的使用场景
用来存储字符
varchar适用字符长度经常变的
char适用字符长度固定的
22.什么样的字段适合建索引
唯一、不为空、经常被查询的字段
23.简单说一说drop、delete与truncate的区别
SQL中的drop、delete、truncate都表示删除,但是三者有一些差别
delete和truncate只删除表的数据不删除表的结构
速度,一般来说: drop> truncate >delete
delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;
如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
24.drop、delete与truncate分别在什么场景之下使用?
不再需要一张表的时候,用drop
想删除部分数据行时候,用delete,并且带上where子句
保留表而删除所有数据的时候用truncate