基本查询语句
单表查询:是指从一张数据表中查询所需要的数据。
SELECT
{* | <字段列表> }
[
FROM <表1>, <表2>…
[WHERE <表达式>
[GROUP BY <group by definition>]
[HAVING <expression> [{<operator> <expression>}…]]
[ORDER BY <order by definition>]
[LIMIT [<offset>,] <row count>]
];
单表查询
select *|列名 from 表名
where ... 条件
group by ... 分组
having ... 对分组进行条件筛选
order by ... 排序(对查询结果进行)
limit ... 限制
简单数据记录查询
简单数据记录查询主要包括:查询所有字段、查询指定字段、查询指定记录、多条件查询、排序查询等。
- 查询所有字段:
查询所有字段数据:是指从一张表中检索出所有记录,
查询方式有两种,一种是使用通配符“*”,另一种是列出所有字段名.
-- 格式:
select *|列名 from 表名;
select id,type,name,price,num,add_time from good;
一般使用通配符查询表中所有字段数据;而使用列出字段名的方式查询部分字段数据
- 查询指定字段
-- 格式:
select 列名1,列名2,...,列名n from 表名;
select name from good;
- 查询指定记录
-- 格式:
select *|列名 from 表名 where 条件;
-- 使用不等符合查询:
select * from good where id<>4;
-- 使用“=”符号查询
select * from good where type='糖类';
-- 使用“>=”符号查询
select * from good where num>=50;
-- 使用AND关键字查询
select * from good where price>50 and id>3;
- 多条件查询:
-- 使用OR关键字查询
select * from good where type='糖类' or type='书籍';
and关键字可以使用符号“&&”代替;or关键字可以使用符号“||”代替。
- 使用IN关键字查询
-- 格式:
select *|列名 from 表名 where 字段 in(值1,值2,...,值n);
select * from good where id in(1,5,6);
select * from good where type not in('书籍');
- 查询空值
-- 格式:
select *|列名 from 表名 where 字段 is null;
select * from good where num is null;
select * from good where num is not null;
需要注意的是,如果某些字段值为NULL,在将这些字段与其他值进行比较时,就会返回不准确的数据。
- 查询结果不重复
-- 格式:
select distinct 列名 from 表名;
select distinct type from good;
- 范围查询
-- 格式:
select *|列名 from 表名 where 字段 between 开始值 and 结束值;
select name ,type, price from good where price between 0 and 5;
select name ,type, price from good where price not between 100 and 150;
- 字符匹配查询
select *|列名 from 表名 字段名 like 值;
select * from good where name like '西%'; --(以某字开头)
select * from good where name like '%糖'; --(以某字结尾)
select * from good where name like '%游%'; --(包含某字)
select * from good where name like '西%记'; --(以某字开头加以某字结尾)
通配符“%”
通配符“%”可以出现在匹配字符的任意位置,并且可以匹配任意数目的字符。
通配符“”:
通配符“”的使用方法与通配符“%”类似,都可以出现在匹配字符的任意位置,但通配符“_”只能匹配一个字符。
select * from good where name like '冰_';
- 排序查询
select *|列名 from 表名 order by 要按着排序的字段名 asc|desc; --(升序|降序)
- 单字段排序:
在排序之前最好将有空值的记录补充完整,否则,空值记录将被排在最前面。
select id,name,add_time from good order by add_time;
- 多字段排序:
在order by 后面的字段按从左到右,在第一列排序有相同值的情况下按第二列的排序方式排序;
select * from good order by price,num;
- 降序排序(默认排序为升序):
select * from good order by price desc;
select * from good order by price desc,num;
- 限制查询结果的数量(默认开始值为0)
-- 格式:
select *|列名 from 表名 limit [开始值] 查询个数;
select * from good limit 3;
select * from good limit 2,2;
聚合函数和分组数据记录查询
- count()函数:计算表中记录的条数。——计数
- sum()函数:计算字段值的总和。——求和
- avg()函数:计算字段值的平均值。——求平均
- max()函数:查询表中字段值的最大值。——查最大
- min()函数:查询表中字段值的最小值。——查最小
实际应用中,聚合函数通常与分组查询一起使用。分组查询就是按照某个字段对数据记录进行分组
- 使用聚合函数查询
select 函数名(*|列名) from 表名 where 条件;
-
COUNT()函数:
- COUNT(*):计算表中总的记录数,不管表字段中是否包含NULL值。
格式: select count(*) as 条数 from good;
使用as关键字不仅可以为字段取别名,还可为表取别名,其使用非常灵活。
- COUNT(col_name):计算表中指定字段的记录数,在具体统计时将忽略NULL值。
select count(num)as 有值的记录条数 from good;
- COUNT(*):计算表中总的记录数,不管表字段中是否包含NULL值。
-
SUM()函数:
- SUM()函数是一个求总和的函数,用于返回指定字段值的总和,或符合特定条件的指定字段值总和,在具体计算时将忽略NULL值。
格式:select sum(字段名) from 表名;
- SUM()函数是一个求总和的函数,用于返回指定字段值的总和,或符合特定条件的指定字段值总和,在具体计算时将忽略NULL值。
-
AVG()函数:
- AVG()函数通过计算返回的行数和每一行数据的和,得到指定列数据的平均值,在具体计算时将忽略NULL值。AVG()函数与GROUP BY一起使用,可以计算每个分组的平均值
格式: select avg(列名) from 表名; 例: select type,avg(price) from goods group by type;
- AVG()函数通过计算返回的行数和每一行数据的和,得到指定列数据的平均值,在具体计算时将忽略NULL值。AVG()函数与GROUP BY一起使用,可以计算每个分组的平均值
-
MAX()函数和MIN()函数:
格式:
select max(列名) ,min(列名) from 表名;
MAX(col_name):该方式可以实现计算指定字段值中的最大值,在具体计算时将忽略NULL值。
MIN(col_name):该方式可以实现计算指定字段值中的最小值,在具体计算时将忽略NULL值。
例:
select max(price) 最高价,min(price) 最低价 from goods;
分组查询
分组查询:是将查询结果按照某个或多个字段进行分组
根据(BY)一定的规则进行分组(GROUP)
它的工作原理是按照一定的规则将一个数据集合划分成若干个小的区域,然后针对这些区域的数据进行处理
格式:
select *|列名 聚合函数 from 表名 group by 字段[having 条件];
- 简单分组查询
例:
select type,count(*) from goods group by type;
如果需要将每种类型中包含的商品名称显示出来,可以使用group_concat()函数。
格式:
select 列名,group_concat(列名) from 表名 group by 字段名;
- 使用HAVING过滤分组后数据
可以指定显示记录所需满足的条件,只有满足条件的分组才会被显示。
格式:
select 列名,聚合函数 from 表名 group by 字段名 having 条件(可多样形式);
where和having的区别:
- 作用对象不一样(where在分组前,having在分组后)
- having只可用select后用的字段
- having子句可包含聚合函数
- 使用多个字段进行分组
可以按多个字段进行分组。分组层次从左到右,即先按第1个字段进行分组,
然后对第1个字段值相同的记录,再根据第2个字段进行分组,依此类推。
格式:
select 列1,列2,聚合函数 from 表名 group by 字段1,字段2;
例:
select type,num,group_concat(name),count(name) from goods group by type,num;