MySQL数据查询(待补充)
要点概论
1. SELECT语句的语法
2. 简单查询
3. 连接查询
4.联合查询
5. 子查询
6. 正则表达式查询
7. 通过正则表达式查询数据
1. SELECT 语句的语法
http://www.cnblogs.com/HZY258/p/8496391.html
2. 简单查询
2.1 获取所有列
SELECT * FROM table_name;
如果数据表中的列较少,也可以通过列出所有列名的方式获取数据。
2.2 获取指定列
SELECT 列名列表 FROM table_name; # 各列名以逗号隔开
2.3 为列指定别名
当表或者列名的名称比较长时,使用别名很有用。在 SELECT 语句查询中,可以使用以下任意一种方式为列指定别名。
1)采用符合 ANSI 规则的方法指定别名
SELECT address_id '地址 ID',address '地址' FROM address; #采用 ANSI 规则的标准方法是指在列表表达式中给出列名
2)使用 AS 关键字指定别名
SELECT address_id as '地址 ID',address as '地址' FROM address;
PS:为列指定别名操作时,必须注意以下几点:
① 当引用中文别名时,可以不加引号,但是不能使用全角引号,否则查询会出错。
② 当引用英文的别名超过两个单词时,则必须用引号将其引起来。
③ 可以同时使用以上两种方法,会返回同样的结果集。
2.4 获取不重复的数据
如果没有为数据库表中的列添加唯一性约束或者主键约束时,这些列很可能存在着重复的值。
使用 DISTINCT 关键字筛选结果集,对于重复行(这里是指结果集数据行的每个字段数据值都一样)只保留并显示一行。语法如下:
SELECT DISTINCT column 1[,column 2,..., column n] FROM table_name;
PS:使用 DISTINCT 关键字时,如果表中存在多个为 NULL 的行,它们将作为相等处理
2.5 限制查询结果
1)LIMIT 指定初始位置
LIMIT 初始位置,查询记录数量;
2)LIMIT 不指定初始位置
LIMIT 显示记录数;
PS:在上述语法中,如果 “显示记录数” 小于或者等于查询结果的总数量,那么将会从第一条记录开始,显示指定条数的记录。
如果 “显示记录数” 大于查询结果的总数量,数据库会直接显示查询出来的所有记录。
2.6 WHERE 条件查询
WHERE 设置查询条件时,WHERE 字句可以使用算术运算符(如 +,-,*,/,%),比较运算符(如 》=,《=,BETWEEN AND 和 LIKE)和逻辑运算符(如 AND,OR,NOT)等多种运算符。
2.7 对查询结果分组
GROUP BY 字段名 [HAVING 条件表达式] [WITH ROLLUP];
上述语法说明如下:
1)字段名:它是指按照该字段的指进行分组,指定多各字段时中间使用 逗号 进行分割
2)HAVING 条件表达式:可选参数,用来限制分组后的显示,满足条件表达式的结果将会被显示出来。
3)WITH ROLLUP:可选参数,将会在所有记录的最后加上一条,该记录是上面所有记录的总和。
PS: GROUP BY 可以单独使用,单独使用时查询结果就是字段取值的分组情况,字段中取值相同的记录为一组,但是只显示该组的第一条记录。
一般在使用聚合函数时才会使用到 GROUP BY 子句,GROUP BY 之后可以跟 HAVING 子句,它实现对结果集的筛选。
HAVING 和 WHERE 的不同点表现在以下三个方面:
1)HAVING 针对结果组: WHERE 针对的时列的数据。
2)HAVING 可以与聚合函数一起使用,但是 WHERE 不能。
3)HAVING 语句只过滤分组后的数据;WHERE 在分组前对数据进行过滤。
2.8 对查询结果排序
ORDER BY order_expression [ASC | DESC];
在语法格式中,order_expression 指明了排序列或列的别名和表达式。
当有多个排序列时,每个排序列之间用逗号隔开,而且列后都可以跟一个排序要求。
3. 连接查询
连接查询是把两个或两个以上的表按某个条件连接起来,从中选取需要的数据。
连接查询时同时查询两个或两个以上的表时使用的。
当不同的表中存在表示相同意义的列时,可以通过该字段来连接这几个表。
MySQL 中支持不同的连接类型。
3.1 交叉连接查询
PASS
3.2 内连接查询
PASS
3.3 外连接查询
PASS
3.4 自连接查询(待补充)