MySQL进阶,秒变大神(四)

创建视图sql语句:

CREATE VIEW view_name AS

SELECT column_name(s)

FROM table_name

WHERE condition

视图与表的区别:

1、视图是已经编译好的sql语句,而表不是。

2、视图没有实际的物理记录,而表有。

3、表是内容,视图是窗口。

4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能由创建的语句来修改。

5、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。

6、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。

7、视图的建立和删除只影响视图本身,不影响对应的基本表。

8、不能对视图进行update或者insert into操作。

白嫖资料

28、数据库三大范式?

第一范式(1NF)

(在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。)

所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,第一范式就是无重复的列。强调的是列的原子性,即列不能够再分成其他几列。

第二范式(2NF)

满足第二范式(2NF)必须先满足第一范式(1NF)。另外包含两部分内容,一是表必须有主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。

第三范式(3NF)

满足第三范式(3NF)必须先满足第二范式(2NF)第三范式就是非主键列必须直接依赖于主键,不能存在传递依赖。

29、sql优化

  1. explain sql 分析sql语句,这个语句可以打印出的各种item的意义:

select_type :表示查询中每个select子句的类型

type :表示MySQL在表中找到所需行的方式,又称“访问类型”

possible_keys :指出MySQL能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用。

key :显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL。

key_len :表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度

ref :表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

Extra :包含不适合在其他列中显示但十分重要的额外信息

2. 查询语句不同元素(where、jion、limit、group by、having等等)执行先后顺序?

查询中用到的关键词主要包含6个,并且他们的顺序依次为 select–from–where–group by–having–order by–limit。

其中select和from是必须的,其他关键词是可选的。

白嫖资料

(使用having字句对分组后的结果进行筛选,所以having只能用在group by之后;

limit 起始记录位置:取记录的条数对记录进行选取,主要用来实现分页功能)

30、非关系型数据库和关系型数据库区别,优势比较?

非关系型数据库的优势:

性能:NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。

可扩展性:同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

关系型数据库的优势:

复杂查询:可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。

事务支持:使得对于安全性能很高的数据访问要求得以实现。

其他:

1.对于这两类数据库,对方的优势就是自己的弱势,反之亦然。

2.NOSQL数据库慢慢开始具备SQL数据库的一些复杂查询功能,比如MongoDB。

3.对于事务的支持也可以用一些系统级的原子操作来实现例如乐观锁之类的方法来曲线救国,比如Redis set nx。

白嫖资料

31、什么是 内连接、外连接、交叉连接、笛卡尔积等?

内连接: 只连接匹配的行

左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行

右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行

例如1:

SELECT a.,b. FROM luntan LEFT JOIN usertable as b ON a.username=b.username

例如2:

SELECT a.,b. FROM city as a FULL OUTER JOIN user as b ON a.username=b.username

全外连接: 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。

交叉连接: 生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配

例如:

SELECT type,pub_name FROM titles CROSS JOIN publishers ORDER BY type

1.以A,B两张表为例

A left join B

选出A的所有记录,B表中没有的以null 代替

right join 同理

2.inner join

A,B的所有记录都选出,没有的记录以null代替

3.cross join (笛卡尔积)

A中的每一条记录和B中的每一条记录生成一条记录

例如A中有4条,B中有4条,cross join 就有16条记录

32、SQL语言分类

数据查询语言DQL :基本结构是由SELECT子句、FROM子句、WHERE子句组成的查询块。

数据操纵语言DML :1)插入INSERT 2) 更新:UPDATE 3) 删除:DELETE

数据定义语言DDL :用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等如:CREATE TABLE/VIEW/INDEX/SYN/CLUSTER

DDL操作是隐性提交的!不能rollback

数据控制语言DCL :用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。ROLLBACK/COMMIT

(1) 显式提交

用COMMIT命令直接完成的提交为显式提交。其格式为:SQL>COMMIT;

(2) 隐式提交

用SQL命令间接完成的提交为隐式提交。这些命令是:ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。

(3) 自动提交

若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交。其格式为:SQL>SET AUTOCOMMIT ON;

33、like %和-的区别

% 通配符:表示任何字符出现任意次数 (可以是0次)。

_ 通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符。

使用通配符进行模糊查询需要用 like操作符,例:

SELECT * FROM products WHERE products.prod_name like ‘%es%’;

SELECT * FROM products WHERE products.prod_name like ‘_es’;

【注】如果在使用like操作符时,后面的没有使用通用匹配符效果是和 = 是一致的。

SELECT * FROM products WHERE products.prod_name like ‘1000’:只能匹配的结果为1000,而不能匹配像JetPack 1000这样的结果。

34、count(*)、count(1)、count(column)的区别

count(*) :对行的数目进行计数,包含NULL

count(column) :对特定的列的值具有的行进行计数,不包含NULL值。

count(1)这个用法和count(*)的结果是一样的,包含null。

性能问题:

白嫖资料

任何情况下SELECT COUNT(_) FROM tablename是最优选择;

尽量减少SELECT COUNT(_) FROM tablename WHERE COL = ‘value’ 这种查询;

杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 = ‘value’ 的出现。

如果表没有主键,那么count(1)比count(_)快。

如果有主键,那么count(主键,联合主键)比count(_)快。

如果表只有一个字段,count(_)最快。

count(1)跟count(主键)一样,只扫描主键;count(_)跟count(非主键)一样,扫描整个表。明显前者更快一些。

如何快速更新自己的技术积累?

  • 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
  • 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
  • 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
  • 学习以后不知道有没有学成,则可以通过面试去检验。

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目

八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享

八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享

如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。

  • 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
  • 学习以后不知道有没有学成,则可以通过面试去检验。

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目

[外链图片转存中…(img-oJhG2x5b-1718864642840)]

[外链图片转存中…(img-I7elRNGX-1718864642841)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值