百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> MySQL面试题附答案-2019
分享文章到:

MySQL面试题附答案-2019

发布时间:09/01 来源:未知 浏览: 关键词:
随着技术的进步和开展,面试官们对面试者的请求越来越高,此刻只有是后端开发的职位,面试确定会问数据库的相干见识,而mysql作为当前最为流行的免费的关系型数据库治理技术,面试时问到与之相干的题目也就不够为奇了。

create table table1(id int,name varchar(10))
create table table2(id int,score int)
insert into table1 select 1,'lee'
insert into table1 select 2,'zhang'
insert into table1 select 4,'wang'
insert into table2 select 1,90
insert into table2 select 2,100
insert into table2 select 3,70

如表

-------------------------------------------------
table1 | table2 |
-------------------------------------------------
id name |id score |
1 lee |1 90|
2 zhang| 2 100|
4 wang| 3 70|
-------------------------------------------------

下列均在查询剖析器中施行
一、外连贯
1.概念:包含左向外联接、右向外联接或完备外部联接

2.左连贯:left join 或 left outer join

  (1)左向外联接的效果集包含 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。要是左表的某行在右表中没有匹配行,则在相干联的效果集行中右表的所有选中列表列均为空值(null)。
  (2)sql 语句

select * from table1 left join table2 on table1.id=table2.id
-------------效果-------------
idnameidscore
------------------------------
1lee190
2zhang2100
4wangNULLNULL
------------------------------

注释:包括table1的所有子句,依据指定前提返回table2响应的字段,不相符的以null显示

3.右连贯:right join 或 right outer join

  (1)右向外联接是左向外联接的反向联接。将返回右表的所有行。要是右表的某行在左表中没有匹配行,则将为左表返回空值。

  (2)sql 语句

select * from table1 right join table2 on table1.id=table2.id
-------------效果-------------
idnameidscore
------------------------------
1lee190
2zhang2100
NULLNULL370
------------------------------

注释:包括table2的所有子句,依据指定前提返回table1响应的字段,不相符的以null显示

4.完备外部联接:full join 或 full outer join

  (1)完备外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选中列表列包括空值。要是表之间有匹配行,则整个效果集行包括基表的数据值。

  (2)sql 语句

select * from table1 full join table2 on table1.id=table2.id
-------------效果-------------
idnameidscore
------------------------------
1lee190
2zhang2100
4wangNULLNULL
NULLNULL370
------------------------------

注释:返回摆布连贯的和(见上左、右连贯)

二、内连贯

  1.概念:内联接是用比拼运算符比拼要联接列的值的联接

  2.内连贯:join 或 inner join

  3.sql 语句

select * from table1 join table2 on table1.id=table2.id
-------------效果-------------
idnameidscore
------------------------------
1lee190
2zhang2100
------------------------------

注释:只返回相符前提的table1和table2的列

  4.等价(与以下施行结果雷同)

  A:select a.*,b.* from table1 a,table2 b where a.id=b.id

  B:select * from table1 cross join table2 where table1.id=table2.id (注:cross join后加前提只能用where,不克不及用on)

三、穿插连贯(完全)

  1.概念:没有 WHERE 子句的穿插联接将发生联接所波及的表的笛卡尔积。首先个表的行数乘以第二个表的行数等于笛卡尔积效果集的大小。(table1和table2穿插连贯发生3*3=9笔记录)

  2.穿插连贯:cross join (不带前提where...)

  3.sql语句

select * from table1 cross join table2
-------------效果-------------
idnameidscore
------------------------------
1lee190
2zhang190
4wang190
1lee2100
2zhang2100
4wang2100
1lee370
2zhang370
4wang370
------------------------------

注释:返回3*3=9笔记录,即笛卡尔积

  4.等价(与以下施行结果雷同)

  A:select * from table1,table2

7、数据库范式

  1) 首先范式(1NF)

  在任何一个关系数据库中,首先范式(1NF)是对关系模式的根本请求,谴责脚首先范式(1NF)的数据库就不是关系数据库。
所谓首先范式(1NF)是指数据库表的每一列都是不成分割的根本数据项,统一列中不克不及有多个值,即实体中的某个属性不克不及有多个值或者不克不及有反复的属性。要是涌现反复的属性,就可能需要定义一个新的实体,新的实体由反复的属性形成,新实体与原实体之间为一对多关系。在首先范式(1NF)中表的每一行只包括一个实例的信息。简而言之,首先范式就是无反复的列。

  2 )第二范式(2NF)

  第二范式(2NF)是在首先范式(1NF)的根基上创立起来的,即知足第二范式(2NF)必需先知足首先范式(1NF)。第二范式(2NF)请求数据库表中的每个实例或行必需可以被惟一地区分。为实现区分平常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键、主码。

  第二范式(2NF)请求实体的属性完全依赖于主关键字。所谓完全依赖是指不克不及存在仅依赖主关键字一局部的属性,要是存在,那么这个属性和主关键字的这一局部应当别离出来构成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分平常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是非主属性非局部依赖于主关键字。

  3 )第三范式(3NF)

  知足第三范式(3NF)必需先知足第二范式(2NF)。简而言之,第三范式(3NF)请求一个数据库表中不包括已在其它表中已包括的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不克不及再将部门名称、部门简介等与部门有关的信息再参加员工信息表中。要是不存在部门信息表,则依据第三范式(3NF)也应当构建它,不然就会有批量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。(我的了解是消弭冗余)

8、数据库优化的思绪

  这个我借鉴了慕课上对于数据库优化的课程。

一、SQL语句优化

  1)应尽量以免在 where 子句中运用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

  2)应尽量以免在 where 子句中对字段进行 null 值推断,不然将致使引擎舍弃运用索引而进行全表扫描,如:

select id from t where num is null

  可以在num上设定默许值0,确保表中num列没有null值,然后这样查询:

select id from t where num=0

  3)许多时候用 exists 取代 in 是一个好的选中

  4)用Where子句替代HAVING 子句 由于HAVING 只会在检索出所有记载之后才对效果集进行过滤

二、索引优化

  看上文索引

三、数据库构造优化

  1)范式优化: 比方消弭冗余(节俭空间。。)

   2)反范式优化:比方恰当加冗余等(减少join)

   3)拆分表: 分区将数据在物理上分隔开,不一样分区的数据可以拟定保留在处于不一样磁盘上的数据文件里。这样,当对这个表进行查询时,只需要在表分区中进行扫描,而无须进行全表扫描,显明缩短了查询工夫,别的处于不一样磁盘的分区也将对这个表的数据传输分散在不一样的磁盘I/O,一个精心设定的分区可以将数据传输对磁盘I/O竞争平均地分散开。对数据量大的不时表可采取此办法。可按月主动建表分区。
  4)拆分其实又分垂直拆分和水平拆分: 案例: 简略购物系统暂设波及如下表: 1.产品表(数据量10w,不乱) 2.订单表(数据量200w,且有增长趋势) 3.会员表 (数据量100w,且有增长趋势) 以mysql为例讲述下水平拆分和垂直拆分,mysql能容忍的数目级在百万静态数据可以到千万 垂直拆分:解决题目:表与表之间的io竞争 不解决题目:单表中数据量增长涌现的压力 方案: 把产品表和会员表放到一个server上 订单表独自放到一个server上 水平拆分: 解决题目:单表中数据量增长涌现的压力 不解决题目:表与表之间的io争夺

  方案: 会员表通过性别拆分为男会员表和女会员表 订单表通过已完成和完成中拆分为已完成订单和未完成订单 产品表 未完成订单放一个server上 已完成订单表盒男会员表放一个server上 女会员表放一个server上(女的爱购物 哈哈)

四、办事器硬件优化

  这个么多花钱咯!

9、存储历程与触发器的区别

  触发器与存储历程非常类似,触发器也是SQL语句集,两者独一的区别是触发器不克不及用EXECUTE语句调取,而是在会员施行Transact-SQL语句时主动触发(激活)施行。触发器是在一个修改了指定表中的数据时施行的存储历程。平常通过新建触发器来强迫实现不一样表中的逻辑相干数据的援用完备性和一致性。因为会员不克不及绕过触发器,所以可以用它来强迫实施复杂的业务法则,以确保数据的完备性。触发器不一样于存储历程,触发器主如果通过事件施行触发而被施行的,而存储历程可以通过存储历程名称名字而直接调取。当对某一表进行诸如UPDATE、INSERT、DELETE这些操纵时,SQLSERVER就会主动施行触发器所定义的SQL语句,从而确保对数据的处置必需相符这些SQL语句所定义的法则。

原文地址:https://www.cnblogs.com/frankielf0921/p/5930743.html

以上就是MySQL面试题附答案-2019的细致内容,更多请关注 百分百源码网 其它相干文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有158人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板