MySql面试题(持续更新)
2024-10-21 18:59:46
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 )
最新文章
- Atitit 常用二维码对比(QR、PDF417、DM、汉信码 Aztec code maxicode
- 源码安装ipython,并在ipython中整合spark
- 07-JAVA继承与接口
- Jquery对文本框的值、字符串的验证;正则表达式字符串的验证
- Asp.Net 三层架构之泛型应用
- Servlet获取参数
- Div样式查看器
- highcharts 结合phantomjs纯后台生成图片系列二之php
- Homework3
- Java并发——同步容器与并发容器
- HDOJ/HDU 1556 Color the ball(树状数组)
- Python自动化运维之25、Ajax
- rpm-bin
- css3中动画animation的应用
- Android UI法宝发展Angrytools
- hdu3480 Division(dp平行四边形优化)
- Django(三) ORM 数据库操作
- hdu4780 最小费用最大流
- input框输入金额显示千分位
- kafka 配置启动
热门文章
- (转)python类class中_init_函数以及参数self的简单解释
- unordered_map 遇到 vector subscript out of range 的错误提示
- Kubernetes(一)--简介
- 将Spring容器跟随系统启动并获取容器对象
- 【2008-2009 ICPC NEERC D】Deposits(暴力)
- CentOS6安装各种大数据软件 第十章:Spark集群安装和部署
- VUE 跳转另一页面返回之前页面刷新,但数据依然存在
- python学习第二天 -----2019年4月17日
- UART学习之路(一)基本概念
- Oracle入门第一天(下)——数据库的管理