MySQL 高级(二)一条SQL语句的执行顺序 SQL中的七种JOIN图解
MySQL 高级(二)一条SQL语句的执行顺序 SQL中的七种JOIN图解
MySQL 高级(二)一条SQL语句的执行顺序 SQL中的七种JOIN图解
人的书写思路:
1 SELECT DISTINCT
2 FROM
3 JOIN ON
4 WHERE
5 GROUP BY
6 HAVING
7 ORDER BY
8 LIMIT
MySQL的解析思路:
1 FROM
2 ON
3 JOIN
4 WHERE
5 GROUP BY
6 HAVING
7 SELECT
8 DISTINCT
9 ORDER BY
10 LIMIT
总结:SQL的执行顺序
七种Join的维恩图帮助理解:
测试用例:
部门表tbl_dept
CREATE TABLE tbl_dept (
id INT4 NOT NULL auto_increment,
dept_name VARCHAR ( 255 ) DEFAULT NULL,
ioc_add VARCHAR ( 255 ) DEFAULT NULL,
PRIMARY KEY ( id )
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
员工表tbl_emp
CREATE TABLE tbl_emp (
id INT4 NOT NULL auto_increment,
`name` VARCHAR ( 255 ) DEFAULT NULL,
dept_id INT4 DEFAULT NULL,
PRIMARY KEY ( id ),
KEY fk_dept_id ( dept_id )
#CONSTRAINT fk_dept_id FOREIGN KEY(dept_id) REFERENCES tbl_dept(id)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
测试数据
INSERT INTO tbl_dept ( dept_name, ioc_add ) VALUES ( 'RD', 11 );
INSERT INTO tbl_dept ( dept_name, ioc_add ) VALUES ( 'HR', 12 );
INSERT INTO tbl_dept ( dept_name, ioc_add ) VALUES ( 'MK', 13 );
INSERT INTO tbl_dept ( dept_name, ioc_add ) VALUES ( 'MIS', 14 );
INSERT INTO tbl_dept ( dept_name, ioc_add ) VALUES ( 'FD', 15 );
INSERT INTO tbl_emp ( name, dept_id ) VALUES ( 'e1', 1 );
INSERT INTO tbl_emp ( name, dept_id ) VALUES ( 'e2', 1 );
INSERT INTO tbl_emp ( name, dept_id ) VALUES ( 'e3', 1 );
INSERT INTO tbl_emp ( name, dept_id ) VALUES ( 'e4', 2 );
INSERT INTO tbl_emp ( name, dept_id ) VALUES ( 'e5', 2 );
INSERT INTO tbl_emp ( name, dept_id ) VALUES ( 'e6', 3 );
INSERT INTO tbl_emp ( name, dept_id ) VALUES ( 'e7', 4 );
INSERT INTO tbl_emp ( name, dept_id ) VALUES ( 'e8', 51 );
3.1 内连接 inner join
内连接 inner join 查询获取a和b表中满足on条件的记录
SELECT
*
FROM
tbl_emp a
INNER JOIN tbl_dept b ON a.dept_id = b.id
3.2 全连接 full jion
mysql 不支持全连接full jion 写法,会报sql语句错误
解决方法:可以通过unoin关键字,将左连接和右连接合并并去重实现
SELECT
*
FROM
tbl_emp a
LEFT JOIN tbl_dept b ON a.dept_id = b.id
UNION
SELECT
*
FROM
tbl_emp a
RIGHT JOIN tbl_dept b ON a.dept_id = b.id
3.3 全外连接
SELECT
*
FROM
tbl_emp a
LEFT JOIN tbl_dept b ON a.dept_id = b.id
WHERE
b.id IS NULL
UNION
SELECT
*
FROM
tbl_emp a
RIGHT JOIN tbl_dept b ON a.dept_id = b.id
WHERE
a.dept_id IS NULL
MySQL 高级(二)一条SQL语句的执行顺序 SQL中的七种JOIN图解相关教程
虚拟机安装tomcat、mysql、定时任务、时钟同步
虚拟机安装tomcat、mysql、定时任务、时钟同步 ** ** 1、软件包的上传与解压 tar zxvf apache-tomcat-6.0.53.tar.gz -C …/servers/ 2、直接启动,并查看启动日志 ./startup.sh tail -100f …/logs/catalina.out 3、验证,在浏览器访问http://192.168.10.132:
Python-高级:元类
Python-高级:元类 1.类也是对象,globals查看所有的全局对象引用 globals() Python运行流程,现在globals里面找,找不到的话就在globals里的__builtins__里找: 例子:使用print 解释:globals()返回一个全局变量与其对应指向的dict,其中print在__builtins_
MySQL 高级(四)索引性能分析 索引单表优化 索引两表优化 索引
MySQL 高级(四)索引性能分析 索引单表优化 索引两表优化 索引三表优化 索引优化案例 规律 索引面试题分析 优化总结口诀 MySQL 高级(四)索引优化分析 4.7 索引性能分析 前景知识 :MySQL中有专门负责优化SELECT语句的优化器模块,可以通过计算分析系统中收
【Jenkins】一条简单的“java -jar jenkins.war“,轻松实现Jenk
【Jenkins】一条简单的“java -jar jenkins.war“,轻松实现Jenkins部署 文章目录 准备工作 部署 上传文件 启动脚本 启动 修改文件 文件路径 修改内容 重启 准备工作 下载war包: 下载地址 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上
解决mysql建立的数据库名字不能带大写字母
解决mysql建立的数据库名字不能带大写字母 1、在安装目录下,找到 my.ini文件 2、找到 [mysqId]节点 3、在它下面添加 lower_case_table_names=2 如果设置为0的话,我的Mysql服务不能重启 4、重启Mysql 直接手动重启即可,在服务中,找到Mysql服务,先停止,然
MySQL 高级(六)查询截取分析 慢查询日志 MySQL dump slow 慢查
MySQL 高级(六)查询截取分析 慢查询日志 MySQL dump slow 慢查询日志分析工具 show profile 全局查询日志 MySQL 高级(六)查询截取分析 问题 :在开发环境中,分析出SQL并优化的步骤是什么? 流程 : 观察,至少跑1天,看看生产的慢SQL情况 开启慢查询日志
MySQL 高级(五)排序索引优化 永远小表驱动大表 Order by 关键
MySQL 高级(五)排序索引优化 永远小表驱动大表 Order by 关键字的排序优化 Group by 关键字的优化 MySQL 高级(五)排序索引优化 5.1 永远小表驱动大表 优化原则 :小表驱动大表,即小的数据集驱动大的数据集 案例 : SELECT * FROM A WHERE id in (select
Springboot+Mybatis +Mysql 实现登录功能以及遇到的一些问题
Springboot+Mybatis +Mysql 实现登录功能以及遇到的一些问题 本文参考自博客https://blog.csdn.net/baidu_39298625/article/details/98102453 在根据上面博客写功能实现的时候遇到了不少问题,现将遇到的问题描述出来,避免以后再遇到。 1,在没有配置yml文件