-
创建账务表
CREATE TABLE zhangwu (
id INT PRIMARY KEY AUTO_INCREMENT, – 账务ID
name VARCHAR(200), – 账务名称
money DOUBLE, – 金额
); -
插入表记录
INSERT INTO zhangwu(id,name,money) VALUES (1,‘吃饭支出’,247);
INSERT INTO zhangwu(id,name,money) VALUES (2,‘工资收入’,12345);
INSERT INTO zhangwu(id,name,money) VALUES (3,‘服装支出’,1000);
INSERT INTO zhangwu(id,name,money) VALUES (4,‘吃饭支出’,325);
INSERT INTO zhangwu(id,name,money) VALUES (5,‘股票收入’,8000);
INSERT INTO zhangwu(id,name,money) VALUES (6,打麻将支出,8000);
INSERT INTO zhangwu(id,name,money) VALUES (7,null,5000); -
语法
1、查询指定字段信息
select 字段1、字段2、…from 表名;
例如:
select id,name from zhangwu;
2、查询表中所有字段
select * from 表名;
例如:
select * from zhangwu;
3、distinct 用于去除重复记录
select distinct 字段 from 表名;
例如:
select distinct money from zhangwu;
4、别名查询,使用as关键字,as可以忽略
别名可以给表中的字段,表设置别名。当查询语句复杂时,使用别名可以极大的简便操作
表的别名格式:
select * from 表名 as 别名;
或 select * from 表名 别名;
例如:
select * from zhangwu as zw
或 select * from zhangwu zw;
列的别名格式
select 字段名 as 别名 from 表名;
或 select 字段名 别名 from 表名;
例如:
select money as m from zhangwu ;
或
select money m from zhangwu; -
我们在SQL语句中可以直接对列进行计算
例如:将所有账务的金额+100元,并起名为later
select name,money+100 later from zhangwu;
条件查询
where条件种类如下:
格式:
select 字段 from 表名 where 条件;
例如:
1、查询所有吃饭支出记录
select * from zhangwu where name=‘吃饭支出’;
2、查询金额大于1000的支出
select * from zhangwu where money>1000;
3、查询支出在500-5000之间的账务信息
select * from zhangwu where money >=500 and money <=5000;
或者
select * from zhangwu where money between 500 and 5000;
4、查询支出是1000或5000或3500的信息
select * from zhangwu where money=1000 or money=5000 or money= 3500;
或者
select * from zhangwu where money in(1000,3500,5000);
5、查询出账务名称包含支出的账务信息。
select * from zhangwu where name like “%支出%”;
6、查询账务名称中是五个字的账务信息
select * from zhangwu where name like"_____"
注:五个下划线_
7、查询出账务名称不为空的账务信息
select * from zhangwu where name is not null;
或者
select * from zhangwu where not(name is null);
排序查询
通过order by 语句,可以将查询出的结果进行排序,放置在select语句最后。
- asc 升序(默认)
- desc 降序
格式:
select * from 表名 order by 字段 asc;
1、查询账务表,进行升序
select * from zhangwu order by money asc
2、查询账务表,进行降序
select * from zhangwu order by money desc
3、查询账务表,查询所有的支出,对金额降序排序,先过滤条件where查询的结果再排序
select * from zhangwu where name like ‘%支出%’ order by name desc;
聚合函数
前面我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。
- count:统计指定列不为NULL的记录行数;
- sum:计算指定列的数值和,如果指定列;
- max:计算指定列的最大值,如果指定列是字符串类型,那么sum:计算指定列的数值和,如果指定列;使用字符串类型不是数值类型,那么计算结果为0排0序运算;
- min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
- avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
例如:
1、count 求和,对表中的数据的个数求和 count(列名)
查询统计账务表中,一共有多少条数据
select count(*)as ‘count’ from zhangwu;
2、sum 求和,对一列中数据进行求和计算sum(列名)
对账务表查询,对所有的金额求和计算
select sum(money) from zhangwu;
求和,统计所有支出的总金额
select sum(name) from zhangwu where name like ‘%支出%’;
3、max 函数,对某列数据,获取最大值
select Max(money) from zhangwu;
4、avg 函数,计算一个列所有数据的平均数
select avg(money) from zhangwu;
分组查询
-
a: 使用格式
* 分组查询是指使用group by字句对查询信息进行分组,
* 例如:我们要统计出zhanguw表中所有分类账务的总数量,这时就需要使用group by 来对zhangwu表中的账务信息根据parent进行分组操作。
* SELECT 字段1,字段2… FROM 表名 GROUP BY 字段 HAVING 条件;
* 分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。 -
b: having与where的区别
*having是在分组后对数据进行过滤.
*where是在分组前对数据进行过滤
*having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
例如:
1、/
查询所有的数据
吃饭支出 共计多少
工资收入 共计多少
服装支出 共计多少
股票收入 共计多少
打麻将支出 共计多少钱
分组查询: group by 被分组的列名
必须跟随聚合函数
select 查询的时候,被分组的列,要出现在select 选择列的后面
*/
SELECT SUM(zmoney),zname FROM zhangwu GROUP BY zname
2、对zname内容进行分组查询求和,但是只要支出
SELECT SUM(zmoney)AS ‘getsum’,zname FROM zhangwu WHERE zname LIKE’%支出%’
GROUP BY zname
ORDER BY getsum DESC
3、对zname内容进行分组查询求和,但是只要支出, 显示金额大于5000
结果集是分组查询后,再次进行筛选,不能使用where, 分组后再次过滤,关键字 having
SELECT SUM(zmoney)AS ‘getsum’,zname FROM zhangwu WHERE zname LIKE’%支出%’
GROUP BY zname HAVING getsum>5000