基本的查询语句
查询的格式:
select [distinct] *(所有)| 字段名... from 表名 [where 条件过滤]
查询指定字段信息pname price
select pname,price from products;
查询表中所有字段
select * from products;
去除金额重复的记录
select distinct price from products;
别名查询 使用的as关键字 as可以省略
select pname as 名称 ,price as 价格 from products;
select pname 名称,price 价格 from products;
我们在sql语句中的操作中,可以直接对列进行运算
select (1+1);
select (5/2);
查询出所有的商品价格,把价格增加20元
select pname ,price+20 from products;
条件查询语句
格式:
select [distinct] *(所有)|字段名,....from 表名 [where 条件过滤]
比较运算符
> < >= = <= <>(!=)
is null是否为null
逻辑运算符
与 and
或 or
非 not
模糊查询
like
%:任意多个字符
_:单个字符
查询商品名称为"花花公子"的商品信息
select * from products where pname = '花花公子';
select * from products where pname in ('花花公子');
查询价格为800的商品
select * from products where price = 800;
查询价格不是800的所有商品
select * form products where price !=800;
select * from products where price <>800;
seelct * from products where price not in (800);
select * from products where not price in (800);
查询商品价格大于60的所有商品信息
select * from products where price >60;
查询商品价格在200到1000之间的所有商品
select * from products where price >=200 and <=1000;
使用between and 进行改造
小的数值必须写在前面 可以对日期进行查询
select * from products where price between 200 and 1000;
查询商品价格是200或800的所有商品
SELECT * FROM products WHERE price=200 OR price=800;
使用in(多个字段)改造
SELECT * FROM products WHERE price IN(200,800);
查询名称以'香'开头的所有商品
SELECT * FROM products WHERE pname='香'; -- 没有结果
SELECT * FROM products WHERE pname LIKE '香%'
查询名称以'霸'结尾的所有商品
SELECT * FROM products WHERE pname LIKE '%霸'
查询名称含有'霸'字的所有商品
SELECT * FROM products WHERE pname LIKE '%霸%'
查询出名称中是五个字的所有商品
SELECT * FROM products WHERE pname LIKE '_____';
查询名称第二个字为'想'的所有商品
SELECT * FROM products WHERE pname LIKE '_想%';
查询商品名称是null的值
SELECT * FROM products WHERE pname IS NULL;
查询商品名称不是null的值
SELECT * FROM products WHERE pname IS NOT NULL; -- 是不空
SELECT * FROM products WHERE NOT (pname IS NULL);
排序查询
格式:
select 字段|* from 表名 [where 条件过滤] [order by 字段[ASC][DESC]]
升序:ASC 默认为升序
降序:DESC
注意:
排序order by 要写在select语句末尾
1.使用价格排序(升序)
SELECT * FROM products ORDER BY price ASC;
SELECT * FROM products ORDER BY price;
2.使用价格排序(降序)
SELECT * FROM products ORDER BY price DESC;
3.显示商品的价格(去重复),并排序(降序)
SELECT DISTINCT price FROM products ORDER BY price DESC;
4.显示商品的价格大于1000的商品所有信息,并排序(降序)
SELECT * FROM products WHERE price >1000 ORDER BY price DESC;
5.根据商品名称排序 默认使用编码表排序
SELECT * FROM products ORDER BY pname DESC;
聚合函数:
对列进行操作,返回的结果是一个单一的值,忽略空值
count:统计指定列不为NULL的记录行数;
sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
格式:
select 聚合函数(字段) from 表名
1 查询商品的总条数
SELECT COUNT(*) FROM products;-- 13
SELECT COUNT(pname) FROM products;-- 忽略空值 12
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;
SELECT * FROM products;
分组查询语句:
select 被分组的字段 from 表名 group by 字段 [having 字段]
注意:
被分组的字段,一定要写在select后面
需求:
根据商品名称相同,对数据进行分组,对每组数据进行求和
SELECT pname,SUM(price) FROM products GROUP BY pname;
-- 需求:对分组求和的结果进行过滤,只显示求和结果大于1000的商品
/*
where:只能在查询的过程中进行过滤,不能对结果过滤
having:对分组数据的查询结果,再次进行条件过滤
*/
-- 先查询出价格大于1000的商品,对大于1000的商品进行分组求和
SELECT pname,SUM(price) s FROM products WHERE price > 1000 GROUP BY pname;
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开始
-- 只要前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;