在该步骤中应用LIMIT子句,从上一步骤的虚拟表中选出从指定位置开始的指定行数据。对于没有应用ORDER BY的LIMIT子句,结果同样可能是无序的,因此LIMIT子句通常和ORDER BY子句一起使用。MySQL数据库的LIMIT支持...
根据ORDER BY子句中指定的列对上一步输出的虚拟表进行排列,返回新的虚拟表。还可以在ORDER BY子句中指定SELECT列表中列的序列号,如下面的语句:SELECT order_id,customer_idFROM ordersORDER BY 2,1;等同...
如果在查询中指定了DISTINCT子句,则会创建一张内存临时表(如果内存中存放不下就放到磁盘上)。这张内存临时表的表结构和上一步产生的虚拟表一样,不同的是对进行DISTINCT操作的列增加了一个唯一索引,以此来去...
虽然SELECT是查询中最先被指定的部分,但是直到步骤8)时才真正进行处理。在这一步中,将SELECT中指定的列从上一步产生的虚拟表中选出。有一点容易被忽视的是,列的别名不能在SELECT中的其他别名表达式中使用。因...
这是最后一个条件过滤器了,之前已经分别应用了ON和WHERE过滤器。在该步骤中对于上一步产生的虚拟表应用HAVING过滤器,HAVING是对分组条件进行过滤的筛选器。对于示例的查询语句,其分组条件为:HAVING count(o...
如果指定了ROLLUP选项,那么将创建一个额外的记录添加到虚拟表VT5的最后,并生成虚拟表VT6。因为我们的查询并未用到ROLLUP,所以将跳过本步骤。对于CUBE选项,MySQL数据库虽然支持该关键字的解析,但是并未实现该...
在本步骤中根据指定的列对上个步骤中产生的虚拟表进行分组,最后得到虚拟表VT5,如表3-10所示。在示例中进行如下分组:GROUP BY c.customer_id表 3-10 虚拟表VT5c.customer_idc.cityo.order_ido.customer_id...
对上一步骤产生的虚拟表VT3进行WHERE 条件过滤,只有符合<where_condition>的记录才会输出到虚拟表VT4中。在当前应用WHERE过滤器时,有两种过滤是不被允许的:由于数据还没有分组,因此现在还不能在WHERE过滤器...
这一步只有在连接类型为OUTER JOIN时才发生,如LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN。虽然在大多数时候我们可以省略OUTER关键字,但OUTER代表的就是外部行。LEFT OUTER JOIN把左表记为...
SELECT查询一共有3个过滤过程,分别是ON、WHERE、HAVING。ON是最先执行的过滤过程。根据上一小节产生的虚拟表VT1,过滤条件为:ON c.customer_id = o.customer_id对于大多数的编程语言而言,逻辑表达式的值只...
第一步需要做的是对FROM子句前后的两张表进行笛卡儿积操作,也称做交叉连接(Cross Join),生成虚拟表VT1。如果FROM子句前的表中包含a行数据,FROM子句后的表中包含b行数据,那么虚拟表VT1中将包含a*b行数据。...
SQL语言不同于其他编程语言(如C、C++、Java、Python),最明显的不同体现在处理代码的顺序上。在大多数编程语言中,代码按编码顺序被处理。但在SQL语言中,第一个被处理的子句总是FROM子句。图3-1显示了逻辑查询...
查询操作是关系数据库中使用最为频繁的操作,也是构成其他SQL语句(如DELETE、UPDATE)的基础。当要删除或更新某些记录时,首先要查询出这些记录,然后再对其进行相应的SQL操作。因此基于SELECT的查询操作就显得...
不能轻视数据类型的选择,这是构建关系数据库的基础,并且将影响到之后所有数据库的应用。本章用了一些篇幅来介绍日期和时间类型及其通常存在的一些问题,这是因为该类型比较复杂,而且使用频繁。此外,在使用字...
ENUM和SET类型都是集合类型,不同的是ENUM类型最多可枚举65 536个元素,而SET类型最多枚举64个元素。由于MySQL不支持传统的CHECK约束,因此通过ENUM和SET类型并结合SQL_MODE可以解决一部分问题。例如,表中有一...
BLOB(Binary Large Object)是用来存储二进制大数据类型的。根据存储长度的不同BLOB可细分为以下4种类型,括号中的数代表存储的字节数:TINYBLOB(28)BLOB(216)MEDIUMBLOB(224)LONGBLOB(232)TEXT类型同...
BINARY和VARBINARY与前面介绍的CHAR和VARCHAR类型有点类似,不同的是BINARY和VARBINARY存储的是二进制的字符串,而非字符型字符串。也就是说,BINARY和VARBINARY没有字符集的概念,对其排序和比较都是按照二进制...
CHAR和VARCHAR是最常使用的两种字符串类型。一般来说,CHAR(N)用来保存固定长度的字符串,VARCHAR(N)用来保存变长字符类型。对于CHAR类型,N的范围为0~255,对于VARCHAR类型,N的范围为0~65 535。CHAR(N...
排序规则(Collation)是指对指定字符集下不同字符的比较规则。其特征有以下几点:两个不同的字符集不能有相同的排序规则。每个字符集有一个默认的排序规则。有一些常用的命名规则。如_ci结尾表示大小写不敏感(...
2.7 字符类型2.7.1 字符集在讨论字符类型前,先讨论字符集的问题。笔者发现很多问题的产生都是因为开发人员忽视了字符集的问题,导致后期维护成本的提高。在MySQL数据库中,默认的字符集是latin1,也许对于以英...