Mysql查询数据

数据库管理系统的一个最主要的功能就是数据查询,它不应只是简单的返回数据库中的数据,还应该是对数据的筛选,以及数据用什么样方式显示出来。

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 子句中的指定的左表的所有行,而不仅仅是连接列所匹配的行。右连接与左连接相反。

推荐阅读更多精彩内容