好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

关于进行条件筛选的SQL关键字的一点理解

概述

一般能够用于条件筛选的有三种: ON: 联结(join)筛选 WHERE: 一般条件筛选 HAVING: 分组后的条件筛选

ON

JOIN – ON 语句的执行顺序:

例句:
SELECT * FROM A LEFT JOIN B ON A.ID = B.ID AND A<>0 WHERE A.name = ‘x’

注意在作on 连接后 的and 子句 和where 子句 。 他们有什么不同?
逻辑上解释:(不考虑执行计划中执行步骤和作嵌套连接等具体方式,这里只讨论如何思考逻辑上的步骤) 
执行顺序是: FROM –> JOIN –> ON –>AND–> LEFT–> WHERE –>SELECT

A步骤. 先将两张表根据ON 条件 作连接(逻辑上,相等于将两张表笛卡尔集后根据ID相等条件筛选数据,实际情况后面分析)  B步骤. 根据ON 后面,WHERE 之前 的 AND 条件筛选数据 C步骤. 跟据LEFT 无论如何,要保证A表的数据完整性。所以在上一步骤产生的结果集中补齐A表因无法比与B表匹配而被AND 条件筛选的掉的数据; D步骤. 再根据WHERE筛选结果集。 

Having

讲到Having一定要先讲讲Group By
GROUP BY 子句 :
创建分组

 
SELECT               column, SUM(column)
FROM                 table
GROUP BY             column
 

说明:GROUP BY子句依据column列里的数据对行进行分组,即具有相同的值的行被划为一组。它一般与聚合函数同时使用。当然,这里的SUM()函数也可以是其他聚合函数。所有的组合列(GROUP BY子句中列出的列)必须是来自FROM子句列出的表,不能根据实际值、聚合函数结果或者其他表达式计算的值来对行分组。
GROUP BY子句根据多列组合行

 
SELECT             DNAME,TSEX, COUNT(*) AS TOTAL_NUM
FROM               TEACHER
GROUP BY           DNAME,TSEX
 

HAVING子句
GROUP BY子句分组,只是简单地依据所选列的数据进行分组,将该列具有相同值的行划为一组。而实际应用中,往往还需要删除那些不能满足条件的行组,为了实现这个功能,SQL提供了HAVING子句。语法如下。

 
SELECT           column, SUM(column)
FROM             table
GROUP BY        column
HAVING        SUM(column) condition value
 

说明:HAVING通常与GROUP BY子句同时使用。当然,语法中的SUM()函数也可以是其他任何聚合函数。DBMS将HAVING子句中的搜索条件应用于GROUP BY子句产生的行组,如果行组不满足搜索条件,就将其从结果表中删除。

Where

HAVING子句和WHERE子句的相似之处在于,它也定义搜索条件。但与WHERE子句不同,HAVING子句与组有关,而不是与单个的行有关。

$(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘ ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i ‘).text(i)); }; $numbering.fadeIn(1700); }); });

关于进行条件筛选的SQL关键字的一点理解

标签:sql   having   groupby   join-on   焦刚   

查看更多关于关于进行条件筛选的SQL关键字的一点理解的详细内容...

  阅读:24次