MySql面试题(持续更新)
1. 左连接,右连接,内连接的概念。
左连接:以左表为主,保留左表的所有数据,并且依次拿每行数据去匹配右表所有行,如果没匹配的,右边表的数据为null。
右连接:以右表为主,保留右表的所有数据,并且依次拿每行数据去匹配左表的所有行,如果没有匹配的,左边表的数据为null。
内连接:左表和右表相互匹配的记录。(左连接∩右连接)
全连接:两张表的所有数据都有保留,并且相互去匹配对方表的所有行,如果没有匹配的,另一部表的数据为null。(左连接+右连接-内连接)MySql没有全连接。
例子:
有员工表:

员工部门中间表:

左连接例子:
SELECT * from employee t1 LEFT JOIN employee_department t2 ON t1.id = t2.employee_id

分析:可以看出左表的记录都还在,并且每行数据依次去匹配右表所有行的记录。
右连接例子:
SELECT * from employee t1 RIGHT JOIN employee_department t2 ON t1.id = t2.employee_id

分析:可以看出右表的数据都在,并且每行依次去匹配左表所有行的数据。
内连接例子:
SELECT * from employee t1 INNER JOIN employee_department t2 ON t1.id = t2.employee_id

分析:左表和右表相互匹配的数据,相当于左连接∩右连接
2. 设计表及实现查询
面试题一:
问:公司内部的系统设计表,有部门和员工,多对多关系,要求设计表。
答:设计员工表(表:employee,字段:id,name),部门表(表:department,字段:id,name),员工-部门中间表(表:employee_department,字段:employeeId,departmentId)
问:要求写出SQL,实现查询员工属于A但是不属于B的集合。
答:先理清逻辑,查询出属于A的集合,然后剔除掉属于B的集合,这样就会去使用in查询。但是in的查询效率太低了,不能过滤。MySql针对这种情况,有exists关键字,来判断是否存在,而且可以在where条件里面过滤。
SELECT
t1.employee_id
FROM
employee_department t1
LEFT JOIN department t2 ON t1.department_id = t2.id
WHERE
t2.`name` = 'A'
AND NOT EXISTS ( SELECT
1
FROM
employee_department t3
LEFT JOIN department t4 ON t3.department_id = t4.id
WHERE
t4.`name` = 'C'
AND t3.employee_id = t1.employee_id )
MySql面试题(持续更新)的更多相关文章
- 史上最全的spark面试题——持续更新中
史上最全的spark面试题——持续更新中 2018年09月09日 16:34:10 为了九亿少女的期待 阅读数 13696更多 分类专栏: Spark 面试题 版权声明:本文为博主原创文章,遵循C ...
- 2020年腾讯实习生C++面试题&持续更新中(3)
2020年腾讯实习生C++面试题&持续更新中(3) hello,大家好,我是好好学习,天天编程的天天. 来给大家大家分享腾讯实习生面经了. 天天希望大家看到面经后一定要做充分的准备,结合自己掌 ...
- 2020年腾讯实习生C++面试题&持续更新中(2)
2020年腾讯实习生C++面试题&持续更新中(2) hello,大家好~ 我是好好学习天天,天天编程的天天,一个每天都死磕技术,及时分享的技术宅~ 昨天分享的题目不知道大家是否看过了,以后我计 ...
- 2020年腾讯实习生C++面试题&持续更新中(1)
2020年腾讯实习生C++面试题&持续更新中(1) 腾讯面试整理(1) 最近大三的学生找实习生的同学非常多,给大家分享一篇腾讯实习生的面试题,关于面试题,会持续更新~~~ 也算是今天开通博客的 ...
- 2020年腾讯实习生C++面试题&持续更新中(5)
2020年腾讯实习生C++面试题&持续更新中(5) 大家好呀,我是好好学习天天编程的天天~ 昨天一位小伙伴反馈已经拿到了腾讯offer,很是替小伙伴的激动~ 那今天还是持续给大家分享面经,希望 ...
- MySQL问题总结(持续更新)
CHAR和VARCHAR的区别 存储方式和检索方式不同: 1.CHAR固定长度字符类型.CHAR存储定长数据,CHAR字段上的索引效率高,比如定义char(10),那么不论你存储的数据是否达到了10个 ...
- mysql问题汇总——持续更新
1.this is incompatible with sql_mode=only_full_group_by set @@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_ ...
- mysql日常笔记(持续更新)
常用场景 sql_mode问题:http://blog.csdn.net/ccccalculator/article/details/70432123 连续日期补全/数据补零操作 在不使用存储过程和函 ...
- Redis 面试题(持续更新)
前言 看了一圈,发现Redis的面试题主要问的是如下几块: 原理 用处(缓存/队列 包括Pub.Sub/计数器/排行榜等) 基本操作与数据类型 消息队列 且与其它消息队列的区别 主从备份 宕机如何处理 ...
- MySql报错(持续更新)
目录 MySql报错 1. 重复键报错1062- duplicate entry '0' for key 'xxx' 1.1 报错场景 1.2 报错原因 1.3 解决方法 1.4 具体举例 2. VS ...
随机推荐
- 阅读 CloudDPI:Cloud+DPI+Reversible Sketch
CloudDPI: Cloud-Based Privacy-Preserving Deep Packet Inspection via Reversible Sketch 与sketch的结合点:将修 ...
- CORS support for ASP.NET Web API (转载)
CORS support for ASP.NET Web API Overview Cross-origin resource sharing (CORS) is a standard that al ...
- NIO高并发基础
NIO高并发 是jdk1.4出现的新的流. NIO - New IO - 同步式非阻塞式IO BIO - Blocking IO - 同步式阻塞式IO ---UDP/TCP ==AIO - Async ...
- tomcat启动超时, Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds...
本文转自于:http://www.cnblogs.com/yjhrem/articles/2955207.html
- parseInt("08")或parseInt("09")转换返回0的解决办法
在javascript中使用parseInt()函数转换成整数时会遇到以下这种情况: 使用parseInt()转换'01'~'07'时可以转换成整数1~7,而转换'08'和'09'时,就会出现转换结果 ...
- 【postgresql的使用】
#安装: #初始化: #允许远程登录: #创建数据库并指定用户 #创建用户 #列出数据库 #进入数据库 #查询数据 #or(或)查询 #and ,or(和,或查询) #表连接 #内,外(左右),交叉连 ...
- vue bus方式解决非父子组件间的传值
对于非父子组件之间的传值 通常使用VUEX 和总线等方式解决 这里我聊聊发布订阅模式(总线) <body> <div class="app"> <ch ...
- c#开发微信公众号——关于c#对象与xml的转换
在成为微信公众号开发者以后,整个交互流程:用户->微信服务器->自己的服务器->返回微信服务器->用户: 举个例子:用户在微信公众号里面发了个“您好!”,微信服务器会以特定的x ...
- linux几个重要的组合键
我们在用Windows系统时,有没有感觉快键键让我们工作更有效率,在Linux系统中仍有很好用的快捷键,这些快捷键可以辅助我们进行指令的编写与程序的中断呢,下面介绍几个经常用到的快捷键. 一.Tab- ...
- java入门---循环结构 - for, while 及 do...while&break&continue
顺序结构的程序语句只能被执行一次.如果您想要同样的操作执行多次,,就需要使用循环结构.Java中有三种主要的循环结构: while 循环 do…while 循环 for 循环 在Jav ...