MySQL查询数据 学习笔记
数据查询是DBMS最重要的功能,本节介绍如何使用select语句查询数据表中的一列或多列数据,使用集合函数显示查询结果,连接查询,子查询以及使用正则表达式进行查询等。
- 基本查询语句,基本语句是select,基本格式为下图所示:
-
单表查询,从一张表数据中查询所需的数据,主要有,查询所有字段,查询指定字段,查询指定记录,查询控制,多条件查询,对查询结果进行排序等。
-
查询所有字段,select * from 表名;或者查询时,用所有字段代替*,各个字段之间用逗号隔开。
-
查询指定字段,select 列名 from 表名 ,select 字段名1,字段名2,...,字段名n from 表名;
- 查询指定记录,select 字段名1,字段名2,...,字段名n from 表名 where 查询条件。
- 带IN关键字的查询,满足条件中的一个值即为匹配项, select 字段名1,字段名2,...,字段名n from 表名 where 查询条件 in (条件1,条件2) order by 字段。在in前加not是不包括条件中的条件的项目。
- 带BETWEEN AND的范围查询, select 字段1,字段2....字段n from fruits where 字段1 between 条件1 and 条件2;
- 带LIKE的字符匹配查询,可以和like一起使用的通配符有 %和_,其中%匹配任意长度的字符,甚至包括零字符,
,而_一次只能匹配任意一个字符,如图
-
查询空值 select 字段1,字段2,...字段n from 表 where 字段1 is null;查询字段1位空的记录。 is not null是查询不为空的记录。
- 带and的多条件查询,使用多个查询条件,select 字段1,字段2,...字段n from 表 where 字段1 条件1 and 字段2 条件2;
- 带or的多条件查询,使用多个查询条件,select 字段1,字段2,...字段n from 表 where 字段1 条件1 or 字段2 条件2;
- 查询结果不重复,关键字 DISTINCT可以消除重复的记录值, select DISTINCT 字段名 from 表名;
- 对查询结果排序,使用 ORDER BY子句,比如 单列排序select 字段1 from 表 ORDER BY 字段1;多列排序 select 字段1,字段2 from 表 ORDER BY 字段1,字段2;指定排序方向,默认是按字母升序进行排序的,可以通过DESC实现降序排序ASC为升序。
- 分组查询,对数据按照某个多多个字段进行分组,使用GROUP BY关键字分组,[GROUP BY 字段] [HAVING <条件表达式>],创建分租,例子
,分组通常和集合函数一起使用,比如MAX(),MIN(),COUNT(),SUM(),AVG(). GROUP_CONCAT()函数将每个分组中各个字段的值显示出来。如:
。使用 HAVING过滤分组,和GROUP BY一起限定显示记录所需满足的条件,只有满足条件的分组才会被显示。
。在GROUP BY子句中使用 WITH ROLLUP,查询出分组记录之后增加一条记录,该记录计算查询出的所有记录的总和,即统计数量。
,多字段分组;GROUP BY和ORDER BY一起使用。
-
使用LIMIT限制查询结果的数量。LIMIT[位置偏移量,]行数位置偏移量指定从那一行开始,如果不指定从第一行开始,第二个茶树行数,只是放回的记录条数。
-
- 使用聚合函数查询
- COUNT()函数,返回行数,COUNT(*)总行数,COUNT(字段名)指定列下总的行数,忽略空值的行。
- SUM()函数,返回特定列值的总和。
- AVG()函数,通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。
- MAX()函数,返回列中最大值。
- MIN()函数,返回查询列中最小的值。
- 连接查询 ,内连接,外连接。
- 内连接查询(INNER JOIN),使用比较运算符进行表间某些列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新纪录,即在内连接查询中,只有满足条件的记录才能出现在结果关系中。
- 外连接查询 将查询多个表中相关联的行,内连接时,返回查询结果集合中的仅是符合查询条件和连接条件的行。有时要返回查询结果集合中的不仅包含符合连接条件的行,而且还包括左连接,右连接或两个连接中的所有数据行。左连接返回包括左表中的所有记录,和右表中连接字段相等的记录。右连接相反。
- LEFT JOIN
- RIGHT JOIN
- 复合条件连接查询,添加过滤条件,限制查询的结果。
- 子查询,指一个查询语句嵌套在另一个查询语句内部的查询,先查询子查询,子查询结果作为外层另一个查询的过滤条件。ANY ALL IN EXISTS。
- 带 ANY SOME关键字的子查询,表示满足其中任一条件。 select 字段1 from 表1 where 字段1 > ANY(select 字段2 from 表2);
- 带ALL关键字的子查询,同时满足所有内层查询的条件。
- 带EXISTS关键字的子查询,后面参数是人一个子查询,如果子查询返回结果,将被作为条件进行查询。如果没有结果返回,则外层语句将不进行查询。NOT EXISTS与EXISTS结果相反。
- 带IN关键字的子查询,内层查询语句仅仅返回一个数据列,这个数据列里的值将提供外层查询语句进行比较操作。NOT IN 作用跟IN相反。
- 带比较运算符的子查询,子查询里面可以使用比较运算符。
- 合并查询结果 UNION 将结果组合成单个结果集,默认会删除重复数据,当加上ALL时,不会删除重复结果。
- 为表和字段取别名。
- 为表取别名, 表名 AS 表别名。
- 为字段取别名, 列名列别名。
- 使用正则表达式,使用REGEXP关键字指定正则表达式。
- 查询以特定字符货字符串开头的记录, SELECT * FROM 表 where 字段 REGEXP '^b';
- 查询以特定字符活字符串结尾的记录,SELECT * FROM 表 where 字段 REGEXP 'b$';
- 用符号 "."来代替字符串中的任意一个字符。
- 使用"*"和"+"来匹配多个字符。
- 匹配指定字符串。
- 匹配指定字符中的任意一个[ab]。
- 匹配指定支付以外的字符 [^a-r1-2]。
- 使用{n,}{n,m}来指定字符串连续出现的次数。