一:DQL--数据查询--select
---CSDN总结
---以前学的总结(微信)
1.DQL介绍
2.DQL语法
3.基本查询(select 字段 from 表名)
4.条件查询(select 字段 from 表名 where 条件)
(1)算术运算符
(2)比较运算符
5.聚合函数--求和,平均,最大最小,计数,去除重复值
6.分组查询
SELECT <列名1>,<列名2>, <列名3>, ……
FROM <表名>
GROUP BY <列名1>, <列名2>, <列名3>, ……;--(返回分组的列)
(1)对分组后的结果再进行筛选--having -比较与where筛选的区别
select之后能够返回的字段包括两类,一类是分组字段,一类是聚合函数
注意:where, 聚合,having的执行顺序
7.排序查询
(1). ORDER BY
SELECT <列名1>, <列名2>, <列名3>, ……
FROM <表名>
ORDER BY <字段列名> [ASC, DESC], <排序基准列2> [ASC, DESC], ……
参数 ASC 表示升序排列,DESC 表示降序排列,默认为升序
(2)ORDER BY 子句中使用别名
8.分页查询
9.案例
(1)案例1
(2)案例2
仅需完成员工的性别与职位统计
前端对数据进行渲染展示
(1)if表达式(三元表达式)
修改列名
(2)case表达式(case 表达式 when xx then xx )
from-->where-->groupby-->select--->having-->order by
10.总结
select, from , where , group by, having , order by , limit
from-->where-->groupby-->select--->having-->order by
二:多表设计(多表查询)
1.一对多
约束:
非空,主键,唯一,默认,外键
foreign key
2.一对一---优化查询速度
一对多不推荐物理外键(企业开发中明文禁止,推荐使用逻辑外键),但一对一中推荐使用物理外键
大表拆分多张小表,其中某个小表的字段查询次数高,拆分后有助于提高查询速度
constraint fk_user_id foreign key (user_id) references tb_user(id)
红色:本表的字段名,黄色:另外一张关联表,括号内为关联表的id
3.多对多--借助中间表,两个外键
【Java Web】007 - MySQL(DQL & 多表设计)_java dql-CSDN博客
4.案例
(1)问题描述
分类管理:
菜品管理:
套餐管理:
(2)分析表之间的关系
确定表之间的关系:
分类表与菜品表---一对多
菜品表与套餐表---多对多---新建中间表
分类表与套餐表---一对多(分类表为1,套餐表为n)
(3)分析各表字段
(3.1)分类表
选择tinyint,减小空间。
-- 分类表
create table category(
id int unsigned primary key auto_increment comment '主键ID',
name varchar(20) not null unique comment '分类名称',
type tinyint unsigned not null comment '类型 1 菜品分类 2 套餐分类',
sort tinyint unsigned not null comment '顺序',
status tinyint unsigned not null default 0 comment '状态 0 禁用,1 启用',
create_time datetime not null comment '创建时间',
update_time datetime not null comment '更新时间'
) comment '分类表' ;
(3.2)菜品表
-- 菜品表
create table dish(
id int unsigned primary key auto_increment comment '主键ID',
name varchar(20) not null unique comment '菜品名称',
category_id int unsigned not null comment '菜品分类ID',-- 逻辑外键(不用foreign key)
price decimal(8, 2) not null comment '菜品价格',
image varchar(300) not null comment '菜品图片', -- 图片路径
description varchar(200) comment '描述信息',
status tinyint unsigned not null default 0 comment '状态, 0 停售 1 起售', -- 无符号
create_time datetime not null comment '创建时间',
update_time datetime not null comment '更新时间'
) comment '菜品表';
(3.3)套餐表
-- 套餐表
create table setmeal(
id int unsigned primary key auto_increment comment '主键ID',
name varchar(20) not null unique comment '套餐名称',
category_id int unsigned not null comment '分类id',-- 逻辑外键(不用foreign key)
price decimal(8, 2) not null comment '套餐价格',
image varchar(300) not null comment '图片',
description varchar(200) comment '描述信息',
status tinyint unsigned not null default 0 comment '状态 0 停售 1 起售',
create_time datetime not null comment '创建时间',
update_time datetime not null comment '更新时间'
)comment '套餐' ;
(3.4)菜品-套餐中间表
-- 套餐菜品关联表
create table setmeal_dish(
id int unsigned primary key auto_increment comment '主键ID',
setmeal_id int unsigned not null comment '套餐id ',
dish_id int unsigned not null comment '菜品id',-- 逻辑外键(不用foreign key)
copies tinyint unsigned not null comment '份数'
)comment '套餐菜品关系';