四时宝库

程序员的知识宝库

打开SQL复杂查询的钥匙:正确理解where、having和on的区别

SQL查询,是数据库人用凌波微步都躲不过的一道槛。

非常凑巧,就在前几天,小编的一个朋友在面试时遇到一个SQL查询的问题,“请解释SQL中where与having的区别,最好举个例子”。他支吾了一句,“选择having一般是在无法用where的时候”。其实除了where和having,where和on也是面试官们经常喜欢问的问题。

那这三者究竟有什么区别呢,借此机会,小编就学习和整理了一些资料,分享给大家。

一、where和having

SQL多个Join on 和Where间的执行顺序(nest loop join机制)

假设SQL如下:

对于外连接,有一个主表的概念,即left的左边表或者right的右边表,对于主表,会返回主表所有符合条件的记录行,而对于副表,则只返回能和主表关联的行,一条主表记录根据on条件和副表内每一行匹配,有多少行匹配上了就生成多少临时表的记录,也就是说主表的一行记录可能生成临时表的多条记录,若副表中没有匹配行时,则副表生成一条所有字段均为null的记录和主表的记录行匹配, 确保主表的符合条件的行能进入临时表。

对于外连接,大部分情况会以我们的SQL顺序来执行,因为有主表的结果集限制,上述SQL一般会先根据WHERE条件从A表重 查询出符合条件的记录行,作为主表和B表以ON条件关联,A结果集中的每条记录均和B表中符合条件的每条记录行生成AB临时表的一条记录,若B表有多个符合记录行,则生成多个临时表行,若B表没有符合条件的行,则生成一条所有字段均为null的行与A的记录行连接,若没有ON条件,则以“笛卡尔积”的形式连接,即A结果集的每一行和B表的每一行均连接生成临时表的记录。

sql语句中过滤条件where和having的区别

Where 是一个约束声明,使用Where约束来自数据库的数据,Where是在结果返回之前起作用的,Where中不能使用聚合函数。

Having是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。

在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行。而where子句在查询过程中执行优先级高于聚合语句。

下面用一个例子进一步说明问题。假设有数据表:

MySQL复杂where条件分析(mysql wherein)

在《MySQL 常见语句加锁分析》一文中,我们详细讲解了 SQL 语句的加锁原理并具体分析了大部分的简单 SQL 语句,但是实际业务场景中 SQL 语句往往及其复杂,包含多个条件,此时就需要具体分析SQL 使用到的索引,并了解 where 条件的判断逻辑。

我们可以直接使用 explain 或者 optimizer_trace 来分析 SQL 语句执行使用了哪些索引,具体使用可以看本系列文章的前两篇文章。但是,今天我们讲一下具体 Where 语句的条件的拆分和使用,即复杂 Where 条件是如何生效的。

TP5 where数组查询(模糊查询--多个查询条件)

有查询条件就查询,多个查询条件,只要有查询,就增加一个查询条件

一、TP5.1版本

ThinkPHP运算符 与 SQL运算符 对照表
TP运算符SQL运算符例子实际查询条件
eq=$map['id'] = array('eq',100);

神奇的 SQL 之 WHERE 条件的提取与应用

问题描述

一条 SQL 在数据库中是如何执行的呢 ?相信很多人都会对这个问题比较感兴趣。但是,感兴趣归感兴趣,你得去追呀,还臆想着她主动到你怀里来 ?

一条 SQL 在数据库中的生命周期涵盖了 SQL 的词法解析、语法解析、权限检查、查询优化、SQL执行等一系列的步骤,是一个相当复杂的过程,不亚于你追她的艰苦历程,不是只言片语就说的完的。但是,大家先别紧张,上面说的那些了,今天一个也不讲,气不气 ?

SQL学习:实例带你学SQL表间数据存在就更新,不存在就插入

在工作中经常会遇到不同业务系统之间数据表同步,今天就教大家学会数据表或跨数据库之前业务数据同步知识。

本例主要讲解将oracle数据库中销售数据表同步到sql server表中,方法如下:

一、首先建立SQL与oracle数据库之间数据连接,在新建数据仓库服务器中,建立数据连接服务,可访问其他业务数据库,如ORCAL,mysql数据库(本文不具体介绍如何建立链接,如有需要请留言)

数据库操作语言SQL数据处理的增、查、删、改

SQL是一种说明性的编程语言;对于C之类的过程语言,你编写程序时需要指明得出结果所需的每个步骤,使用SQL这种说明性语言,只需描述想要的内容中,无需了解存取路径,只需提出what to do,而无需指明how to do;是一种面向集合的操作方式,只用于9个动词。因此,标准的SQL没有传统的流程控制结构,如if-then-else、for等语句。

SQL是交互式式或嵌入式语言。在交互式SQL环境中,用户输入的SQL命令直接发送到数据库管理系统,得到结果后立即显示。DBMS的服务器同时拥有图形和命令行工具,用一接受用户输入的SQL语句或包含SQL程序(脚本)的文本文件。

本地数据库(sql server)插入一条新数据时,同步到服务器数据库

之前有个同学问我,本地数据库插入新数据时怎么同步到服务器上,当时我先想到是程序逻辑控制,作相应的处理。

但有时候我们程序不太好处理,那能不能从数据库入手呢,数据库不是有

数据分析sql入门篇-sql表的操作(下篇1):修改表系列

上一篇文章

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接