黑马2023javaweb(07)|DQL(数据查询)&多表设计

7a26193b528a4f98b32964c62f2d4863.png

727f2126b3674cbf99458c2875563954.png

一:DQL--数据查询--select

https://panda-tang.blog.csdn.net/article/details/129932512?ydreferer=aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDcxNzU0L2NhdGVnb3J5XzEyMjY2ODE5Lmh0bWw%3D

---CSDN总结

https://mp.weixin.qq.com/s?__biz=MzU0Mjk4MzAwMg==&mid=2247485284&idx=2&sn=2497c040e3a4da8646128b9fc9b7d552&chksm=fb131151cc6498474a2ccd8e1bbb98f2efecbe4001ed3e9e05ed5b3ab13ac47548e0acc1ffd2&mpshare=1&scene=23&srcid=1211Zx6oCFpOGPfT0roPONxK&sharer_shareinfo=71bb818d81f43d572740efa20124c0b9&sharer_shareinfo_first=71bb818d81f43d572740efa20124c0b9#rd

---以前学的总结(微信)

1.DQL介绍

9f1c9853b6bb484690e0815618e62bff.png

2.DQL语法

80148a8e44db425cbce6342652e0abe9.png

3.基本查询(select 字段 from 表名)

57672a733815438990b34670fc706e93.png

4.条件查询(select 字段 from 表名 where 条件)

(1)算术运算符

571107d0727d4f2ca58e92ffbe75824c.png

(2)比较运算符

3531068845bc4a9b93d3c5a2d230f8fb.png

5.聚合函数--求和,平均,最大最小,计数,去除重复值

5b0722f6555c483097adfa8b99454b61.png

1e6c629497bf4d2b935fb6612900a8ff.png

6.分组查询

SELECT <列名1>,<列名2>, <列名3>, ……

FROM <表名>

GROUP BY <列名1>, <列名2>, <列名3>, ……;--(返回分组的列)

(1)对分组后的结果再进行筛选--having -比较与where筛选的区别

select之后能够返回的字段包括两类,一类是分组字段,一类是聚合函数

注意:where, 聚合,having的执行顺序

1dcbb34701d04a65b98ef4fb04dfc715.png

aecae736f10644489a8ed01849953cf7.png

7.排序查询

(1). ORDER BY

SELECT <列名1>, <列名2>, <列名3>, ……

  FROM <表名>

 ORDER BY <字段列名> [ASC, DESC], <排序基准列2> [ASC, DESC], ……

参数 ASC 表示升序排列,DESC 表示降序排列,默认为升序 

40a2241415f64ba8a351961977977eff.png

fd24249f70854e4299859babb3e0aa51.png

(2)ORDER BY 子句中使用别名

c160c76e2ad9442cbfd10c8a0b995217.png

8.分页查询

dfa228ddd4534af6b1ed0c9d0152d1c9.png

dd98bcc6e4d34337b9667d114dc8b463.png

9.案例

(1)案例1

f18f52dccdc24af3a80a98a36f486add.png

d111236636dc4f15b057974c69655ea6.png

b051358dc7e54232bf4d90a317121a5d.png

(2)案例2

仅需完成员工的性别与职位统计

767358e8fd59452190ed8dfd7305dcf6.png

d8bf634e9cc44197a4aa86734fbd5b3e.png

前端对数据进行渲染展示

06e5b0e27cec435c944594c958c2e895.png

dd62f903089d407ca9a57472cac38664.png

(1)if表达式(三元表达式)

e1efb7384f1a42708a78a2bd70cb09d1.png

0b938c9c01c44cb7ba31ad6decc1546a.png

修改列名

a5cda287c4bd435e92923834ea50ccf7.png

c21ea1dbcb594c9d81e705f11ffa64b2.png

(2)case表达式(case  表达式 when xx then xx )

from-->where-->groupby-->select--->having-->order by

ac173889a9964bd2b79b077b717dff75.png

10.总结

select, from , where , group by, having , order by , limit

from-->where-->groupby-->select--->having-->order by

bf8fef86f5f7410a88c32ecf215ef878.png

二:多表设计(多表查询)

1.一对多

约束:

非空,主键,唯一,默认,外键

foreign key 

98a9767f6bd44ae89cf88a8f7ab0d95b.png

a668a420cd504babb28a5647406676e8.png

9cc505f78ec34cba8bfd4f7966e95e40.png

c38f140ea3c34a7bb3dc688ad5f930f5.png

2f6455cf81c041c7977c2bdb75c94006.png

2.一对一---优化查询速度

一对多不推荐物理外键(企业开发中明文禁止,推荐使用逻辑外键),但一对一中推荐使用物理外键

大表拆分多张小表,其中某个小表的字段查询次数高,拆分后有助于提高查询速度

3de1924b06bb42a9a5e6a4960715b2fa.png

818c1189691b4d75972e9d353ed403e9.png

8f8381aa21554953a7d61e3495a7382d.png

constraint fk_user_id foreign key (user_id) references tb_user(id)

红色:本表的字段名,黄色:另外一张关联表,括号内为关联表的id

3.多对多--借助中间表,两个外键

b4a7a56a924d45c8a5a4d0255b95bf39.png

【Java Web】007 - MySQL(DQL & 多表设计)_java dql-CSDN博客

f4afc0f74176490bb463edbe313f74da.png

4.案例

(1)问题描述

7f41bd1bc6d64293ab71db83e2200665.png

分类管理:

3da62c8c40c04aaf9d7620f398ed0c25.png

菜品管理:

2e86c72497ea4d198b2cd99be9956352.png

4e08c6c4074a4d66a40840ea577b855e.png

套餐管理:

0ac740a8836d455cbeae4e5b36131f80.png

81b64add3a91438391a04b051b90c8f9.png

(2)分析表之间的关系

确定表之间的关系:

分类表与菜品表---一对多

菜品表与套餐表---多对多---新建中间表

分类表与套餐表---一对多(分类表为1,套餐表为n)

a59655cc9ff04a789e68a4d2dfd09a47.png

(3)分析各表字段

(3.1)分类表

选择tinyint,减小空间。

16d78f1604274816bae0278948e9133f.png

-- 分类表
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)菜品表

e23141627116459598dbb441d5e95215.png

-- 菜品表
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)套餐表

3df8e22cec684ba5a1a4b2688d596ec1.png

-- 套餐表
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 '套餐菜品关系';

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值