内容正文:
第5章
数据查询
5.1 MySQL数据基本查询
5.2 MySQL查询条件选择
5.3 MySQL多表查询
5.4 行浏览查询
05
1
5.1MySQL数据基本查询
在数据库的查询中,SELECT * FROM TABLE是查询的核心要点语句。
可以根据需要,有选择地使用条件。在MySQL中,使用SELECT语句查询数据库的基本语法如下:
SELECT
[* | <字段列名>]
[FROM <表 1>, <表 2>…]
[WHERE <表达式>]
[GROUP BY <group by definition>]
[HAVING <expression> [{<operator> <expression>}…]
[ORDER BY <order by definition>]
[LIMIT[<offset>,] <row count>]
;
5.1.1SELECT语法格式
2
5.1MySQL数据基本查询
在数据库的查询中,我们可以根据需要,有选择地查询输出相应的字段。当选择字段查询时,各字段之间要用逗号隔开;当需要查询所有的字段时,可以使用“*”表示。
从表tb_student中查询字段名分别为id,name,national和telephone的所有数据,运行效果如图5-1所示。
5.1.2查询选择字段
3
5.1MySQL数据基本查询
查询表tb_student中所有字段的所有数据,运行效果如图5-2所示。
4
5.1MySQL数据基本查询
若希望查询结果展示时字段名使用自己想要的名字,可以在字段名后面使用as子句,运行效果如图5-3所示。
5
5.1MySQL数据基本查询
当电话号码显示没有的时候,替换为“无”。
当电话号码大于等于10000000000并且小于15000000000时,替换为“移 动”。
当电话号码大于等于15000000000并且小于17000000000时,替换为“联 通”。
当电话号码大于等于17000000000并且小于19999999999时,替换为“电 信”。
当电话号码不在相应的范围内时,替换为“未 知”。并把telephone字段显示为别名“运营商”。
效果如图5-4所示。
6
5.1MySQL数据基本查询
当希望对查询数据进行再次加工计算处理时,可以在相应字段进行运算,如将考试成绩从百分制换算成120分制,再进行展示。
运行效果如图5-5所示。
如果仅对表中部分字段进行查询,则输出的结果可能会出现重复的行,如例51中,如果选择的字段没有id,则会查询得到两条重复的数据。
可以使用DISTINCT或DISTINCTROW消除图5-5结果中的重复行。
运行效果如图5-6所示。
7
5.1MySQL数据基本查询
在数据库的查询中,FROM子句表示从哪个表中查询数据。
既可以从当前数据库中的表查询相关数据,也可以在当前数据库查询其他库中表的数据,还可以根据表的个数进行多表查询。
使用当前数据库,并进行库中表内的数据查询。在这种情况下,首先使用USE语句让使用的库作为当前数据库,其次使用FROM子句指定相应表的查询。
运行效果如图5-7所示。
5.13查询数据来源
8
5.1MySQL数据基本查询
使用当前库,查询其他库中的表时,指定表名前面要加上查询表所在的数据库名字。在示例中,首先使用USE表示使用WORLD数据库;其次查询test数据库中的tb_term表。这时在表tb_term的前面加上其所在的库名test,我们可以正常查询并得到相应的数据;如果去掉库名,则会提示库中不存在相应的表。
运行效果如图5-8所示。
9
5.1MySQL数据基本查询
当多个表中存在字段重名的时候,进行查询就会出现语法错误,提示Column '字段名' in field list is ambiguous,意思是:重复的这个字段名存在于多个表中,需要使用哪个表的此字段是模糊不清的。此时我们取tb_termremarks这个字段。
运行效果如图5-9所示。
10
5.1MySQL数据基本查询
使用数据库查询时,有时,并不需要返回数据本身,而仅仅需要对数据进行统计或计算总结,那么就需要用聚合函数进行查询。
聚合函数的作用是对一组数值进行统计或计算,并返回确定的单一数值。
所有聚合函数都具有确定性,任何时候用一组确定的数值调用它们时,都返回相同的值。
表5-1列出了一些常用的聚合函数。
5.1.4使用聚合函数
11
5.1MySQL数据基本查询
使用数据库查询时,有时,并不需要返回数据本身,而仅仅需要对数据进行统计或计算总结,那么就需要用聚合函数进行查询。
聚合函数的作用是对一组数值进行统计或计算,并返回确定的单一数值。
所有聚合函数都具有确定性,任何时候用一组确定的数值调用它们时,都返回相同的值。
表5-1列出了一些常用的聚合函数。
5.1.4使用聚合函数
12
5.2MySQL查询条件选择
常用的操作符包括:比较操作符、逻辑操作符、连接操作符、求反操作符、算术操作符。
1.比较操作符
比较操作符用于比较语句中的值。当两个表达式的值均不为空时,比较操作符有运算结果,为TRUE(真)或FALSE(假)。
2.逻辑操作符
逻辑操作符用于对SQL关键字而不是符号进行比较。
3.连接操作符
如果我们在查询时,需要利用多个条件来缩小数据范围,则可使用连接操作符。连接操作符可以让我们在一个SQL语句中,使用多个操作符进行组合比较,从而得到想要的结果。
4.求反操作符
在前文所提到的所有逻辑操作符中,我们都可以颠倒它们的条件要求。
5.算术操作符
算术操作符用于在SQL语句中执行算术功能。
5.2.1WHERE子句
13
5.2MySQL查询条件选择
数据分组是按照逻辑次序把具有重复数值的字段进行合并。例如,一个数据库包含关于雇员的信息,有些雇员住在同一个城市。如果我们需要知道每个指定城市的雇员信息,就可以根据不同的城市对雇员进行分组。
数据分组是通过SELECT语句使用GROUP BY子句来实现的。
5.2.2分组GROUP BY
我们需要让输出结果以某种方式进行排序时,可以使用ORDER BY子句,它能够以用户指定的列表格式对查询结果进行排序。ORDER BY子句的默认次序是升序,也就是说,如果对输出的结果为字符的结果进行排序,就是A—Z的次序;反之,降序就是Z—A的次序显示字符结果。对于数值而言,升序是1—9,降序是9—1。
5.2.3排序ORDER BY
14
5.2MySQL查询条件选择
LIMIT子句的作用是限制查询结果的条数。
其语法格式:LIMIT [位置偏移量,]行数;
其中,中括号里面的参数是可选参数。位置偏移量是指MySQL查询分析器要从哪一行开始显示,索引值从0开始,即第一条记录的位置偏移量是0,第二条记录的位置偏移量是1,依此类推……第二个参数为“行数”,即指示返回的记录条数。
5.2.4行限制LIMIT
15
5.3MySQL多表查询
子查询也被称为嵌套查询,是位于另一个查询的WHERE子句里的查询,它返回的数据通常在主查询里作为一个条件,从而进一步限制数据库返回的数据。
子查询可用于SELECT,INSERT,UPDATE和DELETE语句。
5.3.1子查询
要从不同的表中查询数据,必须在FROM子句中指定多个表,这时要用到连接,将不同的数据组合到一个表中叫作表的连接。
将各个表用逗号隔开,就指定了一个全连接。FROM子句产生的中间结果是一个新表。
5.3.2连接查询
使用UNION语句,可以把来自多个SELECT语句的结果组合到一个结果集中。
UNION操作符组合多个语句结果时,不包含重复的记录。如果某行的输出存在一个查询结果中,那么其他查询结果同一行的记录就不会再输出显示。
5.3.3联合查询
16
5.4行浏览查询
使用HANDLER语句时,首先使用HANDLER 表名OPEN语句打开一个表,再使用HANDLER 表名READ语句浏览已打开表的数据行,最后使用HANDLER 表名CLOSE关闭表。
5.4.1HANDLER
神秘的非SQL标准语法HANDLER命令,使用如此方便,而且可以降低优化器对SQL语句的解析与优化开销,从而提升查询性能。那么,为什么这么好的东西未被广泛推广呢?
我们把它与SELECT进行对比,就会发现以下不同点:
(1)HANDLER每次返回一行,SELECT一次返回所有行。
(2)HANDLER每次返回索引中的所有字段,SELECT可以返回需要的具体字段。
(3)HANDLER涉及分析较少,比SELECT较快。当指定具体表中特定字段数值查询时,HANDLER语句涉及的分析句柄和索引比SELECT相对少得多,因此速度较快。
(4)HANDLER语句完成后,必须使用CLOSE语句关闭表。打
5.4.2说明
17
$$