select语句执行的顺序,子查询和联合查询【这三点都是重点】

select (字段或表达式) (from 资源) where 1(用来先处理筛选后加条件) (AND条件附加)(group by)(order by)(limit);

1.group by分组【分组的作用在于分组统计上使用分组,每组正常只显示一条信息】【基本都是用在分组统计方面,配合聚合函数进行处理】 【这个重点】 group_concat(函数):会将组内的元素进行拼接显示【这个能够显示分组后的组内的显示效果】 多字段分组【group by+多个字段并列即可】 【分组字段的使用主要还是在统计上】

2.where和having的区别【在表示条件上】 主要区别在于字段起别名之后,筛选条件是否能够匹配 将where 1 AND 条件的话相当于是select结束后进行匹配【与having一致】 where相当于是对原数据源进行筛选【这也是正常情况下使用where 1 AND后添加条件的用法(这种用法相当于having)】 having相当于对数据的二次筛选【也就是条件已经筛选出来,然后根据having条件进行进一步筛选】

3.order by对筛选结果进行排序【所以在最末】

4.limit子句【从所有的结果中选择一部分结果显示】

5.select执行顺序: from where group by 字段表达式【聚合函数】 having order by limit

6.子查询【通过select的语句的优先级顺序,将select语句作为一个值嵌入进别的select语句中,实现子查询】 例: select * from select_student where height=select max(height) from select_student; 以上便实现一次子查询【而且很多的分组都是需要子查询处理】

子查询分类: 子查询的位置 (1)where型子查询 (2)from型子查询 子查询的返回数据的格式分类 (1)标量子查询【返回值是一个值】 (2)列子查询【返回一列】 (3)行子查询【返回一行】 (4)表子查询【返回一个表(也就是多表查询)】

子查询语法【重点】 注意各种查询语句需要分类 from型:【所谓的列子查询、行子查询、表子查询常常是from查询,但是列子查询又是也会做where查询(标量子查询可以看做是一个特殊的列子查询)】 from使用多个表进行处理时起别名也是惯例。 例: select * from (select * from select_student order by height desc) as bat group by class_id; 【这样便能将order by与group by 进行顺序交换处理】

只要注意到子查询的位置,那么子查询的情形便都能执行【但是需要注意执行的顺序】 执行过程: (1)执行子查询,其结果不被显示,而是传递给外部查询,作为外部查询的条件使用。 (2)执行外部查询,并显示整个结果。  【正是因为有了这个情况,使得sql语句的嵌套本身具有了复杂的组合特性。但是mysql在子查询方面有优化问题】 【http://blog.csdn.net/yanhui_wei/article/details/22872633】 【子查询优化问题:http://hidba.org/?p=260

exists型子查询【判断依据不是根据子查询所返回的数据,只是根据子查询是否有返回值来显示】 【用于判断子查询是否可行,或者查符合某种情况的查询结果】【判断存在即可】

7.连接查询【join】 两个表需要联合起来进行查询 例: select stu_name,gender,class_id from select_studengt join select_class on select_student.class_id=select_class.id; 这样实现连接【相当于两个表先根据join和on进行连接之后进行查询:因为from的语法要先执行】

这就是连接查询【join、on】

连接查询又分为:【http://www.360doc.com/content/11/0503/11/2631212_114003885.shtml】 【http://www.jb51.net/article/39432.htm】 内连接:记录与真实的记录连接【两条真实存在的记录的连接】【mysql默认是inner连接】【内连接本身是将两个表进行笛卡尔积的运算,所以条件能够省略】 外连接:连接的记录,可能有一方不存在【就算不存在的记录也能保证连接的正常执行,但是要区分左右。那个表的记录要全部显示就使用哪个。这一点注意,想要显示的主体是外连接需要注意的问题】 【内外连接的区别就在于这里,就是万一出现不匹配的记录,看是否能够连接(实质上加外键的两个表经常用连接,而记录是可以保证的)】 交叉连接【cross join】【内连接的一种特殊情况,结果与内连接一致,就是进行笛卡尔积运算】 自然连接【mysql自动判断连接条件,根据表中的同名字段进行连接,这是机制】

【mysql中的unsigned类型表示无符号,也就是整型中不是负数】

8.连接条件 join中的on【只有内连接的时候能够省略】和where的用法 外连接中使用on做条件即可

使用using做字段连接的条件

在连接中,连接条件指的是on和using,where指的是对连接之后的筛选

9.连接查询和子查询的总结: 子查询针对的是子查询的位置【from和where】,而连接查询本身就只有对表的连接【from子句】 子查询将一个的查询结果传到外层查询,而连接查询的好处是将某个并行的两次查询通过将表的连接形成一次的查询【这是两者最大的应用场景】 需要对mysql的命令执行顺序有了解

需要对两者的使用场景注意【但是优化的角度又需要对mysql机制了解和体验】

10.union查询 union将两条查询直接相连

union会在联合时,需要列数目一致,会在联合时,主动去掉相同的记录 【需要注意二者排序出现冲突时的解决】 【只能在union的最后一个子查询中使用order by,而这个order by是针对整个unioning后的结果集的】 【注意,union只能在最后加order by,不能将两个排序进行处理。union子句不能加排序】 例: select supplier_id as id, supplier_name as name   from suppliers    UNION   select company_id as id, company_name as name   from companies    ORDER BY name; 【http://blog.sina.com.cn/s/blog_6cb0deff0100t4l8.html

union distinct【默认就是,会将相同的记录去掉(唯一)】

时间: 2024-10-02 04:42:42

select语句执行的顺序,子查询和联合查询【这三点都是重点】的相关文章

25. SQL -- TSQL(SELECT语句的使用,子查询,连接,通配符 )(1)

SELECT语句的使用 select 语句: ○5 SELECT select_list ○1 FROM table_source ○2 [ WHERE search_condition ] ○3 [ GROUP BY group_by_expression] ○4 [ HAVING search_condition ] ○6 [ ORDER BY order_expresion [ASC |DESC ] ] SELECT语句执行顺序: A.FROM阶段 B.WHERE阶段 C.GROUPBY阶

27. SQL -- TSQL(SELECT语句的使用,子查询,连接,通配符 )(3)

通配符: 通配符一般是通过LIKE 使用的. T-SQL 中支持四种通配符,如表所示: 运算 符 含 义 % 代表零个或多个任意字符 _ 代表一个任意字符 [] 指定范围内的任意单个字符 [^] 不在指定范围内的任意单个字符 例如, "AB%"表示以AB 开始的任意字符串: "_cd"表示以cd 结尾的三个字符的字符串: "[ef]%"表示以e 或f 开始的任意字符串: "[s-v]ing"表示开始是s 到v,结尾是ing,长

MySQL(五)SELECT语句执行顺序

上一篇讲述了Oracle的SELECT语法的执行顺序,这篇讲述MySQL的SELECT语法的执行顺序.MySQL的SELECT语法的执行顺序和Oracle的基本相同,只是增加了MySQL独有的LIMIT语法. 目录 一.SELECT语句的处理过程 1. FROM阶段 2. WHERE阶段 3. GROUP BY阶段 4. HAVING阶段 5. SELECT阶段 6. ORDER BY阶段 7. LIMIT阶段 一.SELECT语句的处理过程 查询操作是关系数据库中使用最为频繁的操作,也是构成其

mysql select语句执行顺序

    SELECT语句定义       一个完成的SELECT语句包含可选的几个子句. SELECT语句的定义如下: <SELECT clause> [<FROM clause>] [<WHERE clause>] [<GROUP BY clause>] [<HAVING clause>] [<ORDER BY clause>] [<LIMIT clause>] SELECT子句是必选的,其它子句如WHERE子句.GRO

完整Select语句执行顺序

完整的select语句及执行顺序(必须记住) 5...select 5.2->distinct 7...top n [percent] 5.1->列名 聚合函数(1.2->列名或表达式) 1...1.1->from 表名 2...where 条件 3...group by ... 4...having ... 6...order by ... 说明: 第一步先执行:from 表名 第二步执行:聚合函数中的列名或表达式 第三步执行: where 条件 第四步执行:分组 group b

微软官方:SELECT语句逻辑处理顺序

以下步骤显示SELECT 语句的逻辑处理顺序或绑定顺序.此顺序确定在一个步骤中定义的对象何时可用于后续步骤中的子句. 例如,如果查询处理器可以绑定到(访问)在FROM 子句中定义的表或视图,则这些对象及其列可用于所有后续步骤. 相反,因为SELECT 子句处于步骤8 中,所以,在该子句中定义的任何列别名或派生列不能由之前的子句引用.但是,它们可由后面的子句(例如ORDER BY 子句)引用. 请注意,该语句的实际物理执行由查询处理器确定,因此在此列表中顺序可能会不同. (1)FROM (2)ON

Mysql—select语句执行过程

select执行过程 (8)select (9) distinct <select list> (1)from  <left table> (3)        <join type> join <right table (2)   on<join condiction> (4)where<> (5)group by <> (6)with {CUBE|ROLLUP} (7)having <having list> (

【mysql】 mysql 子查询、联合查询、模糊查询、排序、聚合函数、分组----------语法

第二章 mysql 一.模糊查询 like 1. 字段 like '河北省%' %代表任何N个字符 2 字段 like '河北省____' _代表任意1个字符 二.IN 语法:SELECT 字段列1,字段2 ,…FROM 表名 WHERE 字段x IN ( 值1,值2,值3…) 三.排序 语法:select 字段1, 字段2, ... from 表名 where 条件 order by 字段 [asc|desc] asc :升序 desc :降序 默认是升序asc SELECT * FROM s

mysql连接查询,子查询,联合查询

一.连接查询(多表查询) emp表 dept表 1.交叉连接 实际上,交叉连接是将两个表不设定任何条件的连接结果. 交叉连接通常也被叫做"笛卡尔积"--数学上可能比较多. 语法: from  表1  [cross]  join  表2  ; //可见交叉连接只是没有on条件而已. cross这个词也可以省略,还可以使用inner这个词代替 2.内连接: 语法: from  表1  [inner]  join  表2  on  表1.字段1=表2.字段2: 含义:找出(过滤)在交叉连接的