mysql中where和and的区别
本文来说下mysql中where和and的区别
文章目录
- 概述
- 内连接的时候
- 左外连接的时候
- 本文小结
概述
多表查询语法结构:table_reference {[INNER] JOIN | {LEFT|RIGHT} [OUTER] JOIN} table_reference ON conditional_expr
- and条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。和右边的表关联不上,右边表的字段显示null;
- where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
内连接的时候
由于内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所有在内连接时on和where的结果是相同的。
SELECTT.id,T.content,T.create_time time,T.type,T.state,T.is_deleted t_is_deleted,k.is_deleted k_is_deleted
FROMp_alert TJOIN p_deal K ON T.alert_code = k.alert_code AND K.is_deleted = 0 AND T.is_deleted = 0
ORDER BYT.create_time DESC
结果信息
WHERE的情况
SELECTT.id,T.content,T.create_time time,T.type,T.state,T.is_deleted t_is_deleted,k.is_deleted k_is_deleted
FROMp_alert TJOIN p_deal K ON T.alert_code = k.alert_code WHERE K.is_deleted = 0 AND T.is_deleted = 0
ORDER BYT.create_time DESC
结果信息
左外连接的时候
在多表查询时,ON和where都表示筛选条件,on先执行,where后执行。
区别:
外连接时,on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。而where条件是在临时表生成好后,再对临时表进行过滤的条件。
左外连接,使用and的时候
SELECTT.id,T.content,T.create_time time,T.type,T.state,T.is_deleted t_is_deleted,k.is_deleted k_is_deleted
FROMp_alert TLEFT JOIN p_deal K ON T.alert_code = k.alert_code AND K.is_deleted = 0 AND T.is_deleted = 0
ORDER BYT.create_time DESC
结果
左外连接,使用where的时候
SELECTT.id,T.content,T.create_time time,T.type,T.state,T.is_deleted t_is_deleted,k.is_deleted k_is_deleted
FROMp_alert TLEFT JOIN p_deal K ON T.alert_code = k.alert_code AND K.is_deleted = 0 WHERE T.is_deleted = 0
ORDER BYT.create_time DESC
结果
来我们分析一下为什么会造成以上两种不同的结果。
and是生成临时表时使用的条件,上面我们采用的是左外连接,左外连接是以左表为基础的,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。也就是说p_alert是左表,p_deal是右表,条件是p_alert的alert_code与p_deal中的alert_code相等且K.is_deleted = 0 且T.is_deleted = 0 时才连接,而记录不足的地方均用NULL来补充。而where是在临时表生成好后,再对临时表进行过滤。也就是说p_alert的alert_code与p_deal中的alert_code相等,然后在对生成的临时表进行筛选,找到符合条件的记录。
本文小结
本文详细说明了mysql中where和and的区别。
mysql中where和and的区别相关推荐
- mysql''和null,mysql中NULL和null的区别
接触php的web开发一段时间了,在进行数据库操作的时候经常会遇到一个问题,使得同一字段在页面显示时有3种类型NULL,null以及数字,当时的解决办法是将这一字段定义为varchar类型,在插入数据 ...
- Mysql中的count()与sum()区别
Mysql中的count()与sum()区别 首先创建个表说明问题 CREATE TABLE `result` ( `name` varchar(20) default NULL, `subject` ...
- MySQL中interactive_timeout和wait_timeout的区别
2019独角兽企业重金招聘Python工程师标准>>> 在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误: ? 1 2 3 E ...
- mysql中的blob和text区别
mysql中的blob和text区别 经过查询资料发现 除了blob 还有tinyblob longblob mediumblob 当然text还有tinytext mediumtext longte ...
- mysql中char与varchar的区别分析
原文网址:http://www.jb51.net/article/23575.htm mysql中char与varchar的区别分析 作者: 字体:[增加 减小] 类型:转载 在mysql教程中cha ...
- 【038】MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义?
♣题目部分 MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义? ♣答案部分 (1).varchar与char的区别区别一,定长和变长char 表示定长,长度固定, ...
- MySQL中In与Exists的区别
MySQL中In与Exists的区别 1 例子 2 EXISTS和IN的介绍 2.1 exists 2.2 in 2.3 使用上的区别 3 EXISTS和IN的性能分析 4 总结 1 例子 有两个表需 ...
- MySQL中distinct和distinctrow的区别
引用官方文档的内容MySQL中distinct和distinctrow的区别 原文:The ALL and DISTINCT modifiers specify whether duplicate r ...
- mysql中now,curdate,curtime,sysdate区别
//mysql中now,curdate,curtime,sysdate区别 1.now 返回的时间,格式如下:2013-01-17 10:57:13 mysql> select now(),sl ...
最新文章
- 《Ext JS 高级程序设计》的目录与样张
- mysql用户名长度_如何增加PhpMyAdmin / mysql用户帐户的用户名长度?
- 个人的小项目mysql_mgr_test开放了
- SgmlReader使用方法
- 常见优化算法批量梯度下降、小批量梯度下降、随机梯度下降的对比
- 《Python Cookbook 3rd》笔记(2.17):在字符串中处理html和xml
- 电竞+区块链,玩家的4大入局方式
- java上传文件-大文件以二进制保存到数据库
- 网站SEO域名、URL路径优化
- 深入灵魂的共鸣 (《梦断代码》读后感)
- 【考研英语语法】名词性从句
- 自动装载寄存器 (TIMx_ARR)、预分频器寄存器(TIMx_PSC)解析
- H3C 40MHz频宽模式
- 为什么有的域名需要加WWW才能访问?
- Xamarin for mac学习笔记(一)
- 关于电脑DNS(域名系统)访问不了网页的解决方法
- 优化游戏以便在 Facebook.com 上运行
- hjr-MUD游戏(二):HTML5-APP客户端编写
- MATLAB | 一起来感受数学之美,第一届迷你黑客大赛回顾
- NGINX-RTMP 直播服务部署
热门文章
- 开源 java CMS - FreeCMS2.5 标签 infoPage
- Log4j.xml配置日志按级别过滤并将指定级别的日志发送到ActiveMQ
- 如何让HTML在手机上实现直接拨打电话以及发送短信?
- 统计sql server数据库中所有表的记录数
- 话里话外:冯军的担心 “pk” 流程规范化
- 11.1.1 认识StringBuffer类(1)
- 自定义request链路跟踪
- 服务端I/O性能:Node、PHP、Java、Go的对比
- 角色和权限Hibernate实体映射配置
- 比较完整的URL验证