目录
通配符“*”
SELECT * FROM xc_disk_file;
- 使用通配符返回所有的列
- 按照表定义时的顺序显示
- 除非查询表中所有数据否则不建议使用通配符,虽然减少了输入查询语句的时间,但是获取不需要的列数据会见底查询和程序效率
查询指定字段
SELECT id,file_type FROM xc_disk_file;
- 按照格式 select 列名 from 表名
- 列名之间用“,”分隔可以指定多个列
查询指定记录
SELECT id,file_type
FROM xc_disk_file
WHERE id > 10;
- 在查询指定字段基础上,使用where
- where 后面添加条件判断符
判断符 IN、NOT
SELECT pid,pname,market_price
-> FROM product
-> WHERE pid IN(30,40)
-> ORDER BY market_price;
- IN 关键字后用括号包围一个集合,集合中是一个或者多个检索条件,满足条件的记录会被查询出来
- 如图查询出 pid 是 30、40 的数据
- 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;
- BETWEEN..AND.. 表示某一范围内的集合
- 包含两端点,如上查询价格为[100,200]中的数据,包含100、200
判断符 LIKE
LIKE与匹配符搭配,进行查找
百分号通配符 “%”,匹配多字符
SELECT pid,pname
FROM product
WHERE pname LIKE "%女装%"
- 查询所有名字中有女装的商品
- %表示任意字符,也可以是0字符
下划线通配符 “_”,匹配单字符
SELECT pid,pname,shop_price
FROM product
WHERE shop_price LIKE "__9"
- 查询所有价格三位数,个位为9的商品
- 一个“_”代表一个占位符,匹配一个字符
判断符 IS NULL
SELECT oid,addr
FROM orders
WHERE addr IS NULL
- 查询地址为空的订单
- IS NULL表示空值,当数据库字段设计时允许为NULL时才有
- 注意空值不是字段值为0,也不是空字符串
逻辑运算符 AND
SELECT pid,pname,shop_price,is_hot
FROM product
WHERE shop_price > 300 AND is_hot = 1
- 查询价格大于300,且热门商品
- AND就像&&,需要同时满足几个条件,可以理解成过滤的作用
逻辑运算符 OR
SELECT pid,pname,shop_price,is_hot
FROM product
WHERE shop_price > 300 OR is_hot = 1
- 查询价格大于300的商品,以及热门商品
- OR表示多个条件满足其中一个即可
- AND的优先级高于OR
处理查询结果
查询结果不重复 : DISTINCT 关键字
SELECT DISTINCT pname
FROM product
- pname中有许多同名的数据,使用DISTINCT修饰pname消除重复记录值
查询结果进行排序 ORDER BY
单列排序
SELECT pid,pname,shop_price,is_hot
FROM product
ORDER BY shop_price
- 通过ORDER BY将查询结果按照价格进行升序排列
多列排序
SELECT pid,pname,shop_price,is_hot
FROM product
ORDER BY shop_price,is_hot
- 在单列排序的基础上,加上一个条件is_hot表示是否热门
- 多列排序首先第一列要有相同值,再比较第二列
- 以上语句先比较价格的高低,相同价格的再比较是否热门,热门用0,1表示
指定排序方式:DESC、ASC
SELECT pid,pname,shop_price,is_hot
FROM product
ORDER BY shop_price DESC
- 通过价格对商品进行降序排序,使用DESC关键字
- 升序排序使用ASC,默认为升序排列,所以当升序时可以不写ASC
分组查询 GROUP BY
SELECT pid,shop_price,COUNT(*) AS TOTAL
FROM product
GROUP BY shop_price
ORDER BY pid
- 根据商品价格进行分组,使用GROUP BY shop_price表明
- 统计统一价格的商品有多少COUNT(*) AS TOTAL
- 如果想查看分组中某一字段的详情可以使用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
使用 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
- 按照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
- GROUP BY 分组后使用 WITH ROLLUP,在显示结果最后添加一条记录,统计所有 TOTAL 数量
限制查询结果 LIMIT
SELECT pid,shop_price
FROM product
LIMIT 4
- 按照条件显示头 4 条记录
SELECT pid,shop_price
FROM product
LIMIT 4,3
- 显示第 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
- COUNT(*) 查询所有记录行总数,不管某列是否有为空值
- COUNT(expt) 查询指定列下的记录行数,忽略该列为空值的记录
- 空值的意思是 NULL,如果是空的字符串也会进行计数
SUM() 函数
SELECT SUM(shop_price) AS price_total,COUNT(shop_price) AS price_count
FROM product
WHERE shop_price = 119
- 查询价格为 199 的商品有多少用 COUNT()
- 查询价格为 199 的商品总价格为多少用 SUM(),即数量 * 单价
AVG() 函数
SELECT AVG(shop_price) AS price_avg
FROM product
WHERE pid >= 1 AND pid <= 5
- 查询指定列的平均值
- AVG() 查询每列平均值,所以查询多列的平均值需要在每一列中加上AVG()
MAX() 函数
SELECT MAX(shop_price) AS max
FROM product
- 查询最大值
SELECT market_price,MAX(shop_price) AS max
FROM product
GROUP BY market_price
- 可以和 GROUP BY 组合使用,表明分组中的最大值
- 如上查询相同 market_price 中,shop_price 最大的
- 前面的函数也都能和 GROUP BY 组合使用
MIN() 函数
SELECT market_price,MAX(shop_price) AS max,MIN(shop_price) AS min
FROM product
GROUP BY market_price
- 表示最小值,用法同MAX()
- 以上将最大值和最小值一起查询出来,可以对比一下看看