mysql 单表查询

目录


通配符“*”

SELECT * FROM xc_disk_file;

  1. 使用通配符返回所有的列
  2. 按照表定义时的顺序显示
  3. 除非查询表中所有数据否则不建议使用通配符,虽然减少了输入查询语句的时间,但是获取不需要的列数据会见底查询和程序效率

查询指定字段

SELECT id,file_type FROM xc_disk_file;

  1. 按照格式 select 列名 from 表名
  2. 列名之间用“,”分隔可以指定多个列

查询指定记录

SELECT id,file_type

FROM xc_disk_file

WHERE id > 10;

  1. 在查询指定字段基础上,使用where
  2. where 后面添加条件判断符

运算符说明

判断符 IN、NOT

SELECT pid,pname,market_price
    -> FROM product
    -> WHERE pid IN(30,40)
    -> ORDER BY market_price;

IN

  1. IN 关键字后用括号包围一个集合,集合中是一个或者多个检索条件,满足条件的记录会被查询出来
  2. 如图查询出 pid 是 30、40 的数据
  3. NOT 关键字,WHERE pid NOT IN(30,40),可以查出所有pid不是30、40的数据

判断符 BETWEEN..ADN..

SELECT pid,pname,market_price
FROM product
WHERE market_price BETWEEN 100 AND 200
ORDER BY market_price;
  1. BETWEEN..AND.. 表示某一范围内的集合
  2. 包含两端点,如上查询价格为[100,200]中的数据,包含100、200

判断符 LIKE

LIKE与匹配符搭配,进行查找

百分号通配符 “%”,匹配多字符

SELECT pid,pname 
FROM product
WHERE pname LIKE "%女装%"
  1. 查询所有名字中有女装的商品
  2. %表示任意字符,也可以是0字符

下划线通配符 “_”,匹配单字符

SELECT pid,pname,shop_price
FROM product
WHERE shop_price LIKE "__9"
  1. 查询所有价格三位数,个位为9的商品
  2. 一个“_”代表一个占位符,匹配一个字符

判断符 IS NULL

SELECT oid,addr
FROM orders
WHERE addr IS NULL
  1. 查询地址为空的订单
  2. IS NULL表示空值,当数据库字段设计时允许为NULL时才有
  3. 注意空值不是字段值为0,也不是空字符串

逻辑运算符 AND

SELECT pid,pname,shop_price,is_hot
FROM product
WHERE shop_price > 300 AND is_hot = 1
  1. 查询价格大于300,且热门商品
  2. AND就像&&,需要同时满足几个条件,可以理解成过滤的作用

逻辑运算符 OR

SELECT pid,pname,shop_price,is_hot
FROM product
WHERE shop_price > 300 OR is_hot = 1
  1. 查询价格大于300的商品,以及热门商品
  2. OR表示多个条件满足其中一个即可
  3. AND的优先级高于OR

处理查询结果

查询结果不重复 : DISTINCT 关键字

SELECT DISTINCT pname
FROM product
  1. pname中有许多同名的数据,使用DISTINCT修饰pname消除重复记录值

查询结果进行排序 ORDER BY

单列排序

SELECT pid,pname,shop_price,is_hot
FROM product
ORDER BY shop_price
  1. 通过ORDER BY将查询结果按照价格进行升序排列

多列排序

SELECT pid,pname,shop_price,is_hot
FROM product
ORDER BY shop_price,is_hot
  1. 在单列排序的基础上,加上一个条件is_hot表示是否热门
  2. 多列排序首先第一列要有相同值,再比较第二列
  3. 以上语句先比较价格的高低,相同价格的再比较是否热门,热门用0,1表示

指定排序方式:DESC、ASC

SELECT pid,pname,shop_price,is_hot
FROM product
ORDER BY shop_price DESC
  1. 通过价格对商品进行降序排序,使用DESC关键字
  2. 升序排序使用ASC,默认为升序排列,所以当升序时可以不写ASC

分组查询 GROUP BY

SELECT pid,shop_price,COUNT(*) AS TOTAL
FROM product
GROUP BY shop_price
ORDER BY pid
  1. 根据商品价格进行分组,使用GROUP BY shop_price表明
  2. 统计统一价格的商品有多少COUNT(*) AS TOTAL
  3. 如果想查看分组中某一字段的详情可以使用GROUP_CONCAT(market_price),如下:
SELECT pid,shop_price,GROUP_CONCAT(market_price) AS mprice
FROM product
GROUP BY shop_price
ORDER BY pid

查看统一shop_price的market_price

GROUP BY

使用 HAVING 过滤分组

SELECT pid,shop_price,GROUP_CONCAT(market_price) AS mprice
FROM product
GROUP BY shop_price HAVING COUNT(market_price) > 1
ORDER BY pid
  1. 按照shop_price进行分组,且满足他们的有一种以上的market_price

注意点: WHERE 和 HAVING 均起过滤作用,两者之间的区别在于,WHERE在分组之前进行过滤,HAVING在分组之后过滤。以上面的查询语句举例,即先查询出所有相同shop_price的记录,再在其基础上判断相同shop_price的商品是否有多种market_price。

使用 WITH ROLLUP 统计记录数量

SELECT pid,shop_price,COUNT(*) AS TOTAL
FROM product
GROUP BY shop_price WITH ROLLUP
  1. GROUP BY 分组后使用 WITH ROLLUP,在显示结果最后添加一条记录,统计所有 TOTAL 数量

限制查询结果 LIMIT

SELECT pid,shop_price
FROM product
LIMIT 4
  1. 按照条件显示头 4 条记录
SELECT pid,shop_price
FROM product
LIMIT 4,3
  1. 显示第 5 条开始,共 3 条记录

所以从以上结果可以看出 LIMIT 指定查询的位置向后偏移一位,LIMIT m,n 从第 m + 1 条结果开始显示, LIMIT m 就像 LIMIT 0,m 一样。所以LIMIT 1,1 返回什么呢?

返回的是第二条结果,而不是第一条。

使用集合函数查询

COUNT() 函数

SELECT pid,shop_price,COUNT(*) AS TOTAL
FROM product
SELECT pid,shop_price,COUNT(pdesc) AS TOTAL
FROM product
  1. COUNT(*) 查询所有记录行总数,不管某列是否有为空值
  2. COUNT(expt) 查询指定列下的记录行数,忽略该列为空值的记录
  3. 空值的意思是 NULL,如果是空的字符串也会进行计数

SUM() 函数

SELECT SUM(shop_price) AS price_total,COUNT(shop_price) AS price_count
FROM product
WHERE shop_price = 119

SUM()

  1. 查询价格为 199 的商品有多少用 COUNT()
  2. 查询价格为 199 的商品总价格为多少用 SUM(),即数量 * 单价

AVG() 函数

SELECT AVG(shop_price) AS price_avg
FROM product
WHERE pid >= 1 AND pid <= 5
  1. 查询指定列的平均值
  2. AVG() 查询每列平均值,所以查询多列的平均值需要在每一列中加上AVG()

MAX() 函数

SELECT MAX(shop_price) AS max
FROM product
  1. 查询最大值
SELECT market_price,MAX(shop_price) AS max
FROM product
GROUP BY market_price
  1. 可以和 GROUP BY 组合使用,表明分组中的最大值
  2. 如上查询相同 market_price 中,shop_price 最大的
  3. 前面的函数也都能和 GROUP BY 组合使用

MIN() 函数

SELECT market_price,MAX(shop_price) AS max,MIN(shop_price) AS min
FROM product
GROUP BY market_price
  1. 表示最小值,用法同MAX()
  2. 以上将最大值和最小值一起查询出来,可以对比一下看看
原文地址:https://www.cnblogs.com/shuiyj/p/13185234.html