文章目录

  • 1.单表
  • 1.1排序
  • 1.2聚合
  • 1.3分组
  • 1.4分页
  • 2多表关系
  • 2.1表与表之间的关系
  • 2.2多对多
  • 3.3多对多



1.单表

1.1排序

* order by 排序关键字
* asc 升序、desc 降序
select * from 表名 order by 排序列 asc | desc;
-- 实例
-- 1.使用价格排序(降序)
select * from product order by price desc;

-- 2.在价格排序(降序)的基础上,以分类排序(降序)
select * from product order by price desc, category_id desc;

-- 3.显示商品的价格(去重复),并排序(降序)
select distinct price from product order by price desc;

1.2聚合

  • 聚合函数: SQL基本函数,聚合函数对一组值执行计算,并返回单个值,也被称为组函数.
  • 常见聚合函数:
  • 除COUNT以外,聚合函数忽略空值,如果COUNT函数的应用对象是一个确定列名,并且该列存在空值,此时COUNT仍会忽略空值.
* 统计个数: count
* 最大值: max
* 最小值: min
* 求和: sum
* 平均值: avg
-- 实例
--  聚合函数
-- 1 统计个数
-- count(列名 | * | 数字)
select count(category_id) from product;	  # 结果:12,忽略了空值
select count(*) from product;		  # 结果:13
select count(1) from product;		  # 结果:13

-- 2 价格最大值
select max(price) from product;

-- 3 价格最小值
select min(price) from product;

-- 4 价格求和
select sum(price) from product;

-- 5 价格平均值
select avg(price) from product;

1.3分组

select 分组列 | 聚合函数 from 表名 group by 分组列 having 分组条件;
-- 实例
-- 分组
-- #1 统计各个分类商品的个数
select category_id , count(1) from product group by category_id

-- #2 统计各个分类商品的个数,且只显示个数大于1的信息
select category_id , count(1) from product group by category_id having count(1) > 1

select category_id , count(1) as c from product group by category_id having c > 1

1.4分页

* limit 开始索引,每页显示个数
* 开始索引,从0开始。
* 第一页,每页3条
select * from product limit 0,3;
* 第二页,每页3条
select * from product limit 3,3;
* 第三页,每页3条
select * from product limit 6,3;
* 第pageNum页,每页pageSize条
select * from product limit (pageNum - 1) * pageSize, pageSize;

2多表关系

2.1表与表之间的关系

  • 一对一
  • 一对多
  • 多对多

2.2多对多

  • 一对多关系: 通过主外键关系,形成一对多关系.
  • 一表: 又称主表,主表需要提供主键.
  • 多表: 又称为从表,从表需要提供外键.
  • 实例: 分类 + 商品
  • 一个分类拥有多个商品,成为一对多关系.
  • 需要通过外键约束,描述主外键关系
alter table 从表 add constraint [外键名称] foreign key (外键) references 主表 (主键)
-- 添加外键约束时,如果填写“外键名称”,是为了删除外键约束
  • 实例
create database en002;
use en002;
-- 一对多关系
-- 主表(分类表)
create table tb_category(
  cid int primary key ,
  cname varchar(50)
);

-- 从表(商品表)-- 注意 外键类型 必须 与主表主键类型一致
create table tb_product(
  pid int primary key,
  pname varchar(50),
  category_id int
);

-- 主外键关系
alter table tb_product add constraint foreign key (category_id) references tb_category (cid);

3.3多对多

  • 多对多: 提供一个中间表,讲一个多对多拆分成2个一对多.
  • 中间表要求: 至少提供两个外键列
  • 实例: 订单 + 商品
  • 实例:
-- 多对多
-- 1 主表(订单表)
create table tb_order(
  oid int primary key,
  price double
);

-- 2 主表(商品表)[已有]

-- 3 中间表
create table tb_order_product(
  order_id int,
  product_id int
);

-- 4 中间表 和 订单表 主外键关系
alter table tb_order_product add constraint foreign key (order_id) references tb_order (oid);

-- 5 中间表 和 商品表 主外键关系
alter table tb_order_product add constraint foreign key (product_id) references tb_product (pid);