MySQL面试常问问题(基础) —— 赶快收藏

news2024/11/15 16:02:23

目录

1. 什么是内连接、外连接、交叉连接、笛卡尔积呢?

2. 那MySQL 的内连接、左连接、右连接有有什么区别?

3.说一下数据库的三大范式?

4.varchar与char的区别?

5.blob和text有什么区别?

6.DATETIME和TIMESTAMP的异同?

7.MySQL中 in 和 exists 的区别?

8.MySQL里记录货币用什么字段类型比较好?

9.MySQL怎么存储emoji😊?

10.drop、delete与truncate的区别?

11.UNION与UNION ALL的区别?

12.count(1)、count(*) 与 count(列名) 的区别?

13.一条SQL查询语句的执行顺序?


1. 什么是内连接、外连接、交叉连接、笛卡尔积呢?

  • 内连接(inner join):取得两张表中满足存在连接匹配关系的记录。

  • 外连接(outer join):不只取得两张表中满足存在连接匹配关系的记录,还包括某张表(或两张表)中不满足匹配关系的记录。

  • 交叉连接(cross join):显示两张表所有记录一一对应,没有匹配关系进行筛选,它是笛卡尔积在SQL中的实现,如果A表有m行,B表有n行,那么A和B交叉连接的结果就有m*n行。

  • 笛卡尔积:是数学中的一个概念,例如集合A={a,b},集合B={1,2,3},那么A✖️B={<a,o>,<a,1>,<a,2>,<b,0>,<b,1>,<b,2>,}。

2. 那MySQL 的内连接、左连接、右连接有有什么区别?

MySQL的连接主要分为内连接和外连接,外连接常用的有左连接、右连接。

  • inner join 内连接,在两张表进行连接查询时,只保留两张表中完全匹配的结果集

  • left join 在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。

  • right join 在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录。

3.说一下数据库的三大范式?

  • 第一范式:数据表中的每一列(每个字段)都不可以再拆分。例如用户表,用户地址还可以拆分成国家、省份、市,这样才是符合第一范式的。

  • 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。例如订单表里,存储了商品信息(商品价格、商品类型),那就需要把商品ID和订单ID作为联合主键,才满足第二范式。

  • 第三范式:在满足第二范式的基础上,表中的非主键只依赖于主键,而不依赖于其他非主键。例如订单表,就不能存储用户信息(姓名、地址)。

三大范式的作用是为了控制数据库的冗余,是对空间的节省,实际上,一般互联网公司的设计都是反范式的,通过冗余一些数据,避免跨表跨库,利用空间换时间,提高性能。

4.varchar与char的区别?

char

  • char表示定长字符串,长度是固定的;

  • 如果插入数据的长度小于char的固定长度时,则用空格填充;

  • 因为长度固定,所以存取速度要比varchar快很多,甚至能快50%,但正因为其长度固定,所以会占据多余的空间,是空间换时间的做法;

  • 对于char来说,最多能存放的字符个数为255,和编码无关

varchar

  • varchar表示可变长字符串,长度是可变的;

  • 插入的数据是多长,就按照多长来存储;

  • varchar在存取方面与char相反,它存取慢,因为长度不固定,但正因如此,不占据多余的空间,是时间换空间的做法;

  • 对于varchar来说,最多能存放的字符个数为65532

日常的设计,对于长度相对固定的字符串,可以使用char,对于长度不确定的,使用varchar更合适一些。

5.blob和text有什么区别?

  • blob用于存储二进制数据,而text用于存储大字符串。

  • blob没有字符集,text有一个字符集,并且根据字符集的校对规则对值进行排序和比较

6.DATETIME和TIMESTAMP的异同?

相同点

  1. 两个数据类型存储时间的表现格式一致。均为 YYYY-MM-DD HH:MM:SS

  2. 两个数据类型都包含「日期」和「时间」部分。

  3. 两个数据类型都可以存储微秒的小数秒(秒后6位小数秒)

区别

  1. 日期范围:DATETIME 的日期范围是 1000-01-01 00:00:00.000000 到 9999-12-31 23:59:59.999999;TIMESTAMP 的时间范围是1970-01-01 00:00:01.000000 UTC 到 ``2038-01-09 03:14:07.999999 UTC

  2. 存储空间:DATETIME 的存储空间为 8 字节;TIMESTAMP 的存储空间为 4 字节

  3. 时区相关:DATETIME 存储时间与时区无关;TIMESTAMP 存储时间与时区有关,显示的值也依赖于时区

  4. 默认值:DATETIME 的默认值为 null;TIMESTAMP 的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP)

7.MySQL中 in 和 exists 的区别?

MySQL中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop循环,每次loop循环再对内表进行查询。我们可能认为exists比in语句的效率要高,这种说法其实是不准确的,要区分情景:

  1. 如果查询的两个表大小相当,那么用in和exists差别不大。

  2. 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in。

  3. not in 和not exists:如果查询语句使用了not in,那么内外表都进行全表扫描,没有用到索引;而not extsts的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。

8.MySQL里记录货币用什么字段类型比较好?

货币在数据库中MySQL常用Decimal和Numric类型表示,这两种类型被MySQL实现为同样的类型。他们被用于保存与货币有关的数据。

例如salary DECIMAL(9,2),9(precision)代表将被用于存储值的总的小数位数,而2(scale)代表将被用于存储小数点后的位数。存储在salary列中的值的范围是从-9999999.99到9999999.99。

DECIMAL和NUMERIC值作为字符串存储,而不是作为二进制浮点数,以便保存那些值的小数精度。

之所以不使用float或者double的原因:因为float和double是以二进制存储的,所以有一定的误差。

9.MySQL怎么存储emoji😊?

MySQL可以直接使用字符串存储emoji。

但是需要注意的,utf8 编码不行的,MySQL中的utf8是阉割版的 utf8,它最多只用 3 个字节存储字符,所以存储不了表情。那该怎么办?

需要使用utf8mb4编码

alter table blogs modify content text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci not null;

10.drop、delete与truncate的区别?

三者都表示删除,但是三者有一些差别:

deletetruncatedrop
类型属于DML属于DDL属于DDL
回滚可回滚不可回滚不可回滚
删除内容表结构还在,删除表的全部或者一部分数据行表结构还在,删除表中的所有数据从数据库中删除表,所有数据行,索引和权限也会被删除
删除速度删除速度慢,需要逐行删除删除速度快删除速度最快

因此,在不再需要一张表的时候,用drop;在想删除部分数据行时候,用delete;在保留表而删除所有数据的时候用truncate。

11.UNION与UNION ALL的区别?

  • 如果使用UNION ALL,不会合并重复的记录行

  • 效率 UNION 高于 UNION ALL

12.count(1)、count(*) 与 count(列名) 的区别?

执行效果

  • count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL

  • count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL

  • count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。

执行速度

  • 列名为主键,count(列名)会比count(1)快

  • 列名不为主键,count(1)会比count(列名)快

  • 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)

  • 如果有主键,则 select count(主键)的执行效率是最优的

  • 如果表只有一个字段,则 select count(*)最优。

13.一条SQL查询语句的执行顺序?

  1. FROM:对FROM子句中的左表<left_table>和右表<right_table>执行笛卡儿积(Cartesianproduct),产生虚拟表VT1

  2. ON:对虚拟表VT1应用ON筛选,只有那些符合<join_condition>的行才被插入虚拟表VT2中

  3. JOIN:如果指定了OUTER JOIN(如LEFT OUTER JOIN、RIGHT OUTER JOIN),那么保留表中未匹配的行作为外部行添加到虚拟表VT2中,产生虚拟表VT3。如果FROM子句包含两个以上表,则对上一个连接生成的结果表VT3和下一个表重复执行步骤1)~步骤3),直到处理完所有的表为止

  4. WHERE:对虚拟表VT3应用WHERE过滤条件,只有符合<where_condition>的记录才被插入虚拟表VT4中

  5. GROUP BY:根据GROUP BY子句中的列,对VT4中的记录进行分组操作,产生VT5

  6. CUBE|ROLLUP:对表VT5进行CUBE或ROLLUP操作,产生表VT6

  7. HAVING:对虚拟表VT6应用HAVING过滤器,只有符合<having_condition>的记录才被插入虚拟表VT7中。

  8. SELECT:第二次执行SELECT操作,选择指定的列,插入到虚拟表VT8中

  9. DISTINCT:去除重复数据,产生虚拟表VT9

  10. ORDER BY:将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10。11)

  11. LIMIT:取出指定行的记录,产生虚拟表VT11,并返回给查询用户

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SCSS学习笔记

文章目录1.安装scss2.选择器嵌套3.属性嵌套4.父选择器&5.变量5.1变量的规范5.2变量的作用域5.3给变量设置默认值(!default)6数据类型7.运算符8.插值语法9.流程控制语句9.1 条件语句9.2循环语句9.2.1for9.2.2each9.2.3while10import10.1引入scss不编译10.2嵌套引入scss11.mi…

【软件测试】概念篇

目录 一、需求 1.1用户需求 1.2软件需求 1.3需求的重要性 二、测试用例 三、BUG 3.1什么是BUG 3.2如何描述一个BUG 4.3BUG优先级 四、软件开发模型 4.1软件生命周期 4.2开发模型 定义&#xff1a;软件测试就是一系列活动&#xff0c;这些活动是为了评估一个程序或者…

新店速递 | IU酒店带您领略“东方古罗马”

淄博&#xff0c;位处鲁中&#xff0c;是黄河三角洲生态经济和蓝色经济区的交汇处。四季分明的气候造就了这座齐国故都的生态多样性&#xff0c;南高北低的地理位置使其峻岭平原兼具&#xff0c;鲁中的位置又赋予他交通枢纽的重要性。这里历史气息浓厚&#xff0c;社会文化自由…

中文语法纠错全国大赛获奖分享:基于多轮机制的中文语法纠错

中文语法纠错任务旨在对文本中存在的拼写、语法等错误进行自动检测和纠正&#xff0c;是自然语言处理领域一项重要的任务。同时该任务在公文、新闻和教育等领域都有着落地的应用价值。但由于中文具有的文法和句法规则比较复杂&#xff0c;基于深度学习的中文文本纠错在实际落地…

新能源汽车市场渗透率不断提高,锂电设备需求空间较大

根据观研报告网发布的《中国新能源汽车行业发展深度研究与投资趋势调研报告&#xff08;2022-2029年&#xff09;》显示&#xff0c;近年来&#xff0c;随着各国开启能源转型&#xff0c;在汽车领域&#xff0c;由于电动汽车具有高效节能、零排放等优点&#xff0c;已逐渐成为汽…

配置小型公司网络WLAN基本业务(AC通过三层口管理AP)

组网需求&#xff1a; 某小型企业由于业务需要&#xff0c;希望员工能在企业内部随时随地的访问Internet&#xff0c;进行移动办公。该企业部署了一台AR路由器作为出口网关&#xff0c;希望同时在AR路由器上部署WLAN功能&#xff0c;为企业员工提供无线网络接入服务&#xff0c…

JDK,JRE,JVM的作用及关系

1.定义JDK(Java Development Kit): 是Java语言的软件开发工具包&#xff0c;内部包含了代码的编译工具和运行工具。JRE(Java Runtime Environment): 指Java运行时环境&#xff0c;包含java虚似机、以及核心类库(java帮我们写好的程序)等java运行所需的东西。JVM(Java Virtual M…

必须要学习的源码--ConcurrentHashMap

并发安全的集合&#xff1f; 并发不安全的集合 在 Java 中&#xff0c;有一些集合是不安全的&#xff0c;因为它们不是线程安全的。这意味着如果多个线程同时访问这些集合&#xff0c;那么它们可能会出现不可预料的行为。 Java 中的并发不安全的集合包括&#xff1a; ArrayLi…

花房集团上市,走向元宇宙新征程

12月12日&#xff0c;花房集团在港交所成功上市&#xff0c;首日便受到追捧&#xff0c;当日最高涨幅达28.75%。 继360、360数科、鲁大师后&#xff0c;这是“红衣教主”周鸿祎收获的第四个IPO。 花房集团作为直播界元老之一&#xff0c;两年内三次申请IPO&#xff0c;终于在…

(GCC)STM32进阶详解之栈回溯

接上一篇&#xff1a; 函数调用 由上一篇大概了解了函数是如何被调用&#xff0c;中断或者说异常又是如何被调用&#xff0c;而这一篇相当于上一篇知识的一个应用&#xff0c;也是上一篇遗留的思考&#xff0c;即在hardfault中如何判断是从何处触发这个异常的。本来打算自己写…

GO09:整型、浮点、字符类型的介绍和使用细节

基本类型的使用 基本介绍 3.8整数的各个类型 func main(){var i int 1 fmt.Println("i", i) var j int8 127 fmt.Println("j", j) }int的无符号的类型&#xff1a; 整型的使用细节 一、Golang各整数部分&#xff1a;有符号和无符号&#xff0c;int u…

信而泰RENIX 802.1ag功能介绍-网络测试仪实操

一、EOAM概述​ 1.以太网​ 1.1以太网优点​ 简单易用​ 价格低廉​ 高拓展性​ 大势所趋&#xff0c;一统天下​ 1.2以太网缺点​ 可管理性差​ 定位故障手段少​ 定位故障速度慢​ 维护成本高​ 2.以太网OAM​ ■EOAM​ 为运营商服务​ 提高以太网可靠性、可维…

非零基础自学Golang 第15章 Go命令行工具 15.6 性能分析 15.6.2 通过文件方式 15.6.3 通过HTTP方式 15.7 小结

非零基础自学Golang 文章目录非零基础自学Golang第15章 Go命令行工具15.6 性能分析15.6.2 通过文件方式15.6.3 通过HTTP方式15.7 小结第15章 Go命令行工具 15.6 性能分析 15.6.2 通过文件方式 为了能分析Go程序的性能&#xff0c;我们需要在程序中导入runtime/pprof来生成性…

飞鹤揭榜“十四五”项目,牵头研制新一代婴配粉

12月22日&#xff0c;在“鲜萃活性营养&#xff0c;更适合中国宝宝体质”中国飞鹤60周年战略升级发布会上&#xff0c;飞鹤对外公布&#xff0c;其牵头申报的——“基于中国母乳研究的新一代婴配乳粉制造技术研究与示范”项目成功获批。 这是继去年飞鹤与江南大学、大连工业大…

大数据基础平台搭建-(二)Hadoop集群搭建

大数据基础平台搭建-&#xff08;二&#xff09;Hadoop集群搭建 大数据平台系列文章&#xff1a; 1、大数据基础平台搭建-&#xff08;一&#xff09;基础环境准备 2、大数据基础平台搭建-&#xff08;二&#xff09;Hadoop集群搭建 大数据平台是基于Apache Hadoop_3.3.4搭建的…

不同存储资源的应用场景及优缺点介绍

容器应用应当根据应用系统的特点&#xff0c;综合考虑容器应用对存储类型、存储性能及数据高可用等方面的要求&#xff0c;选择最适合的存储资源类型。常见的存储资源应用场景包括三类&#xff1a;将存储挂载在外部宿主机上、将存储放置于容器内部和使用外部共享存储。下面对每…

MySQL面试常问问题(数据库架构+存储引擎) —— 赶快收藏

目录 1.说说 MySQL 的基础架构? 2.一条 SQL 查询语句在 MySQL 中如何执行的&#xff1f; 3.MySQL有哪些常见存储引擎&#xff1f; 4.那存储引擎应该怎么选择&#xff1f; 5.InnoDB和MylSAM主要有什么区别&#xff1f; 1.说说 MySQL 的基础架构? MySQL逻辑架构图主要分三…

浅谈古建筑电气火灾成因及防控对策

摘要: 我国古建筑多为砖木结构&#xff0c;当发生火灾事故时具有蔓延快、扑救难的特点&#xff0c;而火灾对古建筑的损害性很大&#xff0c;电气火灾事故在我国火灾事故中比重居高不下。本文通过对古建筑电气火灾成因进行分析&#xff0c;有针对性地提出了古建筑电气火灾防控对…

Java工厂企业工艺管理系统源码 springboot2+vue2前后端分离架构 工艺路线 加工工序管理源码

工艺系统是对车间现场加工工序的管理&#xff0c;根据生产成品或者半成品的工单&#xff0c;以及产品标准工艺路线&#xff0c;系统可以自动生成产品工序加工命令 并且可以根据实际情况再进行工序调整.系统可以根据每道工序&#xff0c;打印工序派工单。工序之间物料转移&#…

【推荐】华为顶级认证HCIE-RS培训教材全套合集

HCIE是华为认证系统中的专家级认证。候选人必须通过笔试&#xff0c;LAB考试和面试&#xff0c;才能最终获得HCIE认证。困难还从另一方面解释了证书的含金量。 该认证具有很高的含金量和行业认可度。此外&#xff0c;获得HCIE证书的工程师将优先获得华为和华为合作伙伴的聘用&a…