- count 求和,对标中的数据的个数求和 count(列名)
查询统计账务表中,一共有多少数据
SELECT COUNT(*)' count’ FROM zhangwu
- sum求和,对一列数据进行求和计算 sum(列名)
对账务表查询对所有的金额求和计算
SELECT SUM(ZMONEY) FROM zhangwu
求和,统计所有支出的总金额
SELECT SUM(ZMONEY) FROM zhangwu WHERE zname LIKE‘%支出%’
数据库
数据库:本质上就是一个文件系统。通过标准的sql对数据进行curd操作
sql:
结构化查询语句
作用:
管理数据库
sql的分类:
DDL:数据定义语言
操作对象:数据库和表
关键词:create alter drop
DML:数据操作语言
操作对象:记录
DQL:数据查询语言(非官方)
DCL:数据控制语言
操作对象:用户,事物 ,权限
curd:creat(创建),update(更新),retrieve(读取),delete(删除)
- 排序查询
- 查询所有的商品,按价格进行排序。(asc-升序,desc-降序)
select * from products order by prise desc;
2.查询名称有新的商品的信息并且按价格降序排序。
select * from products where pname like "%新%" order by price desc;
-
聚合函数
对一列进行计算,返回值是一个
*sum( ),avg(),max(),min(),count()
1.获得所有商品的价格总和
select sum( price) from products;
2.获得商品表中价格的平均数
select avg(price) from products;
– round(值,保留小数位)
select round(avg(price),2) from products;
3.获得商品表中有多少条记录
select count(*) from products;
分组:使用 group by
1.根据cno自读那愤怒值,分组后统计商品个数。
select cno,counta(*) from products group by cno;
2.根据cno分组,分组统计每组商品的总数量,【并且总数量>200】
select cno , sum(pnum) from products group by cno;
【select cno , sum(pnum) from products group by cno having sum(pnum)>200 ;】
注意
where 和having 区别:
- where 是对分组前的数据进行过滤
having 是对分组后的数据进行过滤 -
where后面不能使用聚合函数,having可以
mysql中的数据类型
一对多
-- 创建用户表
CREATE TABLE USER{
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20)
};
-- 创建订单表
CREATE TABLE orders{
id INT PRIMARY KEY AUTO_INCREMENT,
totalprice DOUBLE,
user_id INT
};'user'
- 为了保证数据的有效性和完整性 ,添加约束(外键约束)
再多表的一方添加外键约束
格式:
alter table 多表名称 add foreign key(外键名称) reference 一表名称(主键)
例:alter table orders add foreign key(user_id)references user( id );
添加了除了外键约束之后有如下特点:
1.主表中不能删除从表中已引用的数据
2.从表中不能添加主表中不存在的数据
开发处理中一对多:
在多表中添加一个外检,名称一般为主表的名称_id,字段类型一般和主表的保持一致
为保证数据的有效性和完整性,再多表的外键上添加外键约束即可。
多对多
在开发时,一般引入一张中间表,在中间表中存放两张表的主键,一般还会将这两个主键设置成这两个表的联合主键,将多对多拆分成两个一对多
为了保证数据的有效性和完整性,在中间表上添加两个外键约束即可
CREATE TABLE product( -- 创建商品表
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
price DOUBLE
);
CREATE TABLE orderitem( -- 创建中间表
oid INT,
pid INT
);
-- 添加外键约束
ALTER TABLE orderitem ADD FOREIGN KEY(oid ) REFERENCES orders(id);
ALTER TABLE orderitem ADD FOREIGN KEY(pid ) REFERENCES product (id);
内连接
- 格式1.:现显式的内连接
select a.* ,b.* from a [inner] join b on ab的连接条件 - 格式2.:隐式的内链接
select a.*,b.*from a, b where ab的连接条件外连接
左外链接:
select a.* ,b.* from a left [outer] join b on 连接条件;
意思:
先展示join左边的(a)表的所有数据,根据条件关联查询 join右边的表(b)符合条件则展示出来,不符合以null值展示。
右外连接:
select a.,b. from a right [outer] join a on 连接条件;
意思:
先展示join右边的(a)表的所有数据,根据条件关联查询 join左边的表(b)符合条件则展示出来,不符合以null值展示。
练习:
查询用户的订单,没有订单的用户不显示
隐式内连接:
select user.*,orders.* from user, orders where user.id=orders.user_id;
显式内连接:
select user.*,orders.* from user join orders on user.id=orders.user_id;
查询所有用户的订单详情
左外链接:user在左
select user.*,orders.* from user left join orders on user.id=orders.user_id;
查询所有订单的用户详情
右外连接:orders 在右
select user.*,orders.* from user right join orders on user.id=orders.user_id;
子查询
子查询:是将一个查询的结果作为一张临时表
select user.*,tmp.*from user,(select * from orders where price>300) as tmp where user.id=tmp.user_id;
- 给表起别名
格式: 表【as】 别名