数据库管理系统的一个最主要的功能就是数据查询,它不应只是简单的返回数据库中的数据,还应该是对数据的筛选,以及数据用什么样方式显示出来。
Mysql从数据表中查询数据的基本语句为SELECT语句。
1.单表查询:就是从以一张表数据中查询所需的数据。
- 查询所有字段:
SELECT * FROM 表名;
- 查询指定字段:
SELECT 列名 FROM 表名; //查询单个字段
SELECT 字段名1,字段名2,...字段n FROM 表名; //查询多个字段
- 查询指定记录:
SELECT 字段名1,字段名2,...字段名n
FROM 表名
WHERE 查询条件;
WHERE条件判断符 | 说明 |
---|---|
= | 相等 |
<>,!= | 不相等 |
< | 小于 |
<= | 小于或者等于 |
> | 大于 |
>= | 大于或者等于 |
BETWEEN | 位于两值之间 |
- 带in关键字的查询:用来查询满足指定范围内的条件的记录。
eg:查询id为101和102的记录
SELECT ID ,其他字段名,
FROM 表名
WHERE ID IN(101,102);
- 带between and 的范围查询:用来查询某个范围内值。反之,加not,查询不在某个范围内。(举例请参考上面例子)
- 带like的字符匹配查询:(举例请参考上面例子)
1通配符“%”,匹配任意长度的字符,甚至包括零字符。
2下划线通配符“_”,一次只能匹配任意一个字符。 - 查询空值:在WHERE条件中使用IS NULL;
- 带AND的多条件查询:在WHERE条件中使用AND与多个条件表达式分开;
- 带OR的多条件查询:表示只需要满足其中一个条件的记录即可,用OR连接;
- 查询结果不重复:
SELECT DISTINCT 字段名 FROM 表名;
- 对查询结果排序:
SELECT 字段名 FROM 表名 ORDER BY 字段名; // 默认为升序排列,若要降序排序,则在最后加上DESC
2.分组查询:指对数据按照某个或多个字段进行分组,Mysql中使用GROUP BY 关键字对数据分组。
[GROUP BY 字段] [HAVING <条件表达式>]
- 使用HVAING过滤分组:GROUP BY 和HAVING 一起限定显示
HAVING和WHERE 区别:having在数据分组之后进行过滤来选择分组,而where在分组之前来选择记录。 - 在GROUP BY 子句中使用 WITH ROLLUP:指在所有查询出的分组记录之后增加一条记录,该记录是计算查询出的所有记录的总和。
- 使用LIMIT限制查询结果的数量:
LIMIT [位置偏移量] 行数;
3.使用集合函数查询:
- COUNT()函数:统计数据表中包含的记录行的总数,返回某列的行数。
SELECT COUNT(*) AS 字段名 FROM 表名;
注意: count()与count(指定列字段名)的区别:如果指定列的值为空时,计算时就会被忽略;但是count()就不会忽略。
- SUM函数:求总和,返回指定列值的和。
SELECT SUM(quantity)AS 字段名 FROM 表名 WHERE [指定条件];
- AVG 函数:计算返回的行数和每一行数据的和,求得指定列数据的平均值。(如sum函数举例)
- MAX 函数:返回指定列的最大值。(如sum函数举例)
- MIN 函数:返回指定列的最小值。(如sum函数举例)
4.连接查询:
- 内连接:使用比较符进行表间列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组成新的记录。
举例:
SELECT suppliers.s_id,s_name,f_name,f_pirce FROM fruits ,suppliers WHERE fruits.s_id=suppliers.s_id;
// 其中suppliers和fruits为表名,两个表中都有相同的字段s_id;所以建起连接,新纪录就是两个表中
具。有相同s_id的列值。因此在比较的时候需要完全限定表名(格式为"表名.列名")
- 外连接查询:连接查询的内查询时,返回查询结果集合中的仅是符合查询条件,但有时还需要查看没有被包含信息的行。包括左连接和右连接。
- 左连接:左连接的结果包括left outer 子句中的指定的左表的所有行,而不仅仅是连接列所匹配的行。右连接与左连接相反。