数据库的查询
数据库查询
语法
select [distinct] * | 列名,列名 from 表 where 条件
简单查询(SELECT select…from)
- 查询指定字段信息
select 字段1,字段2,...from 表名;
例如:
select id,zname from zhangwu;
- 查询表中所有字段
select * from 表名;
例如:
select * from zhangwu;
注意:使用"*"在练习、学习过程中可以使用,在实际开发中,不推荐使用。原因,要查询的字段信息不明确,若字段数量很多,会导致查询速度很慢。
3.distinct用于去除重复记录
select distinct 字段 from 表名;
例如:
select distinct zmoney from zhangwu;
4.别名查询,使用的as关键字,as可以省略的.
别名可以给表中的字段,表设置别名。 当查询语句复杂时,使用别名可以极大的简便操作。
表别名格式:
select * from 表名 as 别名; 或 select * from 表名 别名;
列别名格式: select 字段名 as 别名 from 表名; 或 select 字段名 别名 from 表名;
例如
表别名:
select * from zhangwu as zw;
列别名:
select zmoney as m from zhangwu;
或
select zmoney m from zhangwu;
5.我们在sql语句的操作中,可以直接对列进行运算。
select (1+2);
例如:将所有账务的金额+10000元进行显示.
select zname,zmoney+10000 from zhangwu;
条件查询
select [distinct]*(所有)|字段名,...字段名 from 表名 [where 条件过滤]
比较运算符
> < >= <= = <> (!=) is null 是否为null
逻辑运算符
与 and 或 or 非 not
模糊查询
like
%:任意多个字符 _:单个字符
#查询商品名称为“花花公子”的商品所有信息:
SELECT * FROM product WHERE pname = '花花公子'
#查询价格为800商品
SELECT * FROM product WHERE price = 800
#查询价格不是800的所有商品
SELECT * FROM product WHERE price != 800
SELECT * FROM product WHERE price <> 800
SELECT * FROM product WHERE NOT(price = 800)
#查询商品价格大于60元的所有商品信息
SELECT * FROM product WHERE price > 60;
#查询商品价格在200到1000之间所有商品
SELECT * FROM product WHERE price >= 200 AND price <=1000;
# 小的数值必须写在前边,可以多日期进行查询
SELECT * FROM product WHERE price BETWEEN 200 AND 1000;
#查询商品价格是200或800的所有商品
SELECT * FROM product WHERE price = 200 OR price = 800;
SELECT * FROM product WHERE price IN (200,800);
#查询名称以'香'开头的所有商品
SELECT * FROM product WHERE pname LIKE '香%';
#查询名称含有'霸'字的所有商品
SELECT * FROM product WHERE pname LIKE '%霸%';
#查询出名称中是五个字的所有商品
SELECT * FROM product WHERE pname LIKE '_____';
#查询名称第二个字为'想'的所有商品
SELECT * FROM product WHERE pname LIKE '_想%';
#查询商品名称是null的值
SELECT * FROM product WHERE pname IS NULL;
#查询商品名称不是null的值
SELECT * FROM product WHERE pname IS NOT NULL;
排序查询
通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。
格式:
SELECT * FROM 表名 ORDER BY 排序字段 ASC|DESC;
ASC 升序 (默认)
DESC 降序
#1.使用价格排序(升/降序)
SELECT * FROM product ORDER BY price DESC;
#2.显示商品的价格(去重复),并排序(降序)
SELECT DISTINCT price FROM product ORDER BY price DESC;
#4.显示商品的价格大于1000的商品所有信息,并排序(降序)
SELECT * FROM products WHERE price >1000 ORDER BY price DESC;
#5.根据商品名称排序 默认使用编码表排序
SELECT * FROM products ORDER BY pname DESC;
distinct(去重)的用法: 放在查询select之后 他后面跟去重后要显示的内容,order by后面跟要排序的选项
聚合查询
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。
今天我们学习如下五个聚合函数:
- count:统计指定列不为NULL的记录行数;
- sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
- max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
- min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
5.avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
格式:select 聚合函数(字段) from 表名
#1 查询商品的总条数
SELECT COUNT(*) FROM products;-- 13
SELECT COUNT(pname) FROM products;-- (对非数值字段进行统计时忽略空值)
SELECT COUNT(price) FROM products;-- 13
#2 查询价格大于200商品的总条数
SELECT COUNT(*) FROM products WHERE price >200;
#3. 对商品表查询,对所有的金额求和计算
SELECT SUM(price) FROM products;
# 对非数值字段求和结果为0
SELECT SUM(pname) FROM products;
#4.对商品表查询,对所有的金额计算平均值
SELECT AVG(price) FROM products;
#5. 统计出商品表中价钱的最大与最小值
SELECT MAX(price),MIN(price) FROM products;
SELECT MAX(price)最大值,MIN(price)最小值 FROM products;
分组查询
分组查询是指使用group by字句对查询信息进行分组。
- 格式:
SELECT 字段1,字段2… FROM 表名GROUP BY分组字段 HAVING 分组条件;
分组的字段必须写在 select 后面
分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。
-
having与where的区别:
- having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
-
- having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
需求:
根据商品名称相同,对数据进行分组,对每组数据进行求和
SELECT pname,SUM(price) FROM products GROUP BY pname;
-- 需求:对分组求和的结果进行过滤,只显示求和结果大于1000的商品
-- 先查询出价格大于1000的商品,对大于1000的商品进行分组求和
SELECT pname,SUM(price) s FROM products GROUP BY pname
HAVING s>1000;
SELECT pname,SUM(price) s FROM products GROUP BY pname
HAVING SUM(price)>1000;
分页查询
可以使用关键字 limit m,n
m:可以变化页码1,2,3,4
n:固定不变的分页数(每页5条)
数据库的数据是从0开始
--一共几页(向上取整)
select ceil(count(*)/6.0) from products;
-- 只要前5条数据
SELECT * FROM products LIMIT 5;
-- 要0开始到5结束的数据(第一页的数据)
-- 从0开始要5个数据
SELECT * FROM products LIMIT 0,5;
-- 要6开始到10结束的数据(第二页的数据)
-- 从6开始要5个数据
SELECT * FROM products LIMIT 5,5;
-- 要11开始到15结束的数据(第三页的数据)
-- 从10开始要5个数据
SELECT * FROM products LIMIT 10,5;
例:
SELECT * FROM zhangwu
-- 就要3条
SELECT * FROM zhangwu LIMIT 3
-- 从0开始要3条
SELECT * FROM zhangwu LIMIT 0,3
-- 从3开始要3条
SELECT * FROM zhangwu LIMIT 3,3
-- 从6开始要3条
SELECT * FROM zhangwu LIMIT 6,3