mysql 多表联合查询_聊聊MySQL三种常见的多表连接查询

本文介绍了SQL中的连接查询概念,包括内连接、左连接和右连接等类型,并通过具体示例展示了如何使用这些连接来组合不同表中的数据。

什么是连接查询

我们将MySQL中的每一条数据当成一个样本,所谓连接查询就是将两个表(或者更多)的样本的域属性(字段或者列)通过关联属性(字段或者列)进行拼接。就像是下面这样。 学生表

1544014e5b025106988a6ada24f1d1ae.png

班级表

38b3f8d2c306d7e404bbeecf9cc77509.png

关联一下

94b5a35dadbcf43dc22ea13f44f50610.png

2x2=4(笛卡尔积)

inner join 内连接查询

就像上面那样单纯的拼到一起有什么意义,emm我也不知道有什么意义,所以我们要加上点条件让数据变得有意义,也就是内连接查询喽。执行如下SQL,on后面跟上的就是查询条件。
SELECT * FROM stu INNER JOIN cls ON stu.class_id = cls.class_id

cc7f1f7c745f5cd9d1ddad4384f33abc.png

内连接查询也就是将两个表的样本的域属性简单那么一拼,然后给你展示两个样本都有的数据。

b91f3917ed195d156e72912b3621cebc.png

蓝色区域即结果

left join  左连接查询

左外连接查询SQL
SELECT * FROM stu LEFT JOIN cls ON stu.class_id = cls.class_id

6c491aea922a208f8b07c8fed2df774e.png

左连接查询也就是 将两个表的样本 的域属性简单那么一拼,然后 给你展示左表拼接之后的 样本,那右表没有关联上的字段怎么办,就像上面那样两个Null 。

4a844477502b6b3ee1f13592b5943407.png

蓝色区域即结果

right join 右连接查询

左连接说完右连接不就简单啦,你把两个表换下位置不就好啦 60778c2de4898f67bf49647e6c70280b.png,看SQL
SELECT * FROM stu RIGHT JOIN cls ON stu.class_id = cls.class_id

2bfbaf2aca995cb5b1cf8efb855d45fc.png

右连接查询也就是 将两个表的样本 的域属性简单那么一拼,然后 给你展示右表拼接之后的 样本,那左表没有关联上的字段怎么办,就像上面那样两个Null 。

138b7d31e7a50b9e4766fa40a9e1d204.png

蓝色区域即 结果
MySQL 中授予角色对数据库下进行权限管理,可按以下步骤操作: #### 创建角色 创建角色之后,默认这个角色是没有任何权限的,需要后续进行授权。创建角色的 SQL 语句如下: ```sql CREATE ROLE 'role_name'; ``` 其中 `role_name` 为自定义的角色名称。 #### 授予角色权限 给角色授权的语法结构是:`GRANT privileges ON table_name TO 'role_name'[@'host_name'];` [^1]。 - **授予对张具体的权限** 若要授予角色对数据库 `database_name` 下的 `table1`、`table2`、`table3` 的 `SELECT`、`INSERT`、`UPDATE` 和 `DELETE` 权限,可使用以下语句: ```sql GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.table1 TO 'role_name'; GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.table2 TO 'role_name'; GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.table3 TO 'role_name'; ``` - **授予对数据库下所有的权限** 若要授予角色对数据库 `database_name` 下所有的所有权限,可使用通配符 `*`: ```sql GRANT ALL PRIVILEGES ON database_name.* TO 'role_name'; ``` #### 刷新权限 授权后一定要刷新权限,使权限立即生效: ```sql FLUSH PRIVILEGES; ``` 注意:授权操作只能是 `root` 用户来操作;`grant` 给用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效 [^2]。 #### 将角色授予用户 创建角色并授予权限后,需要将角色授予具体的用户: ```sql GRANT 'role_name' TO 'user_name'@'host'; ``` 这里的 `user_name` 是用户名,`host` 是用户登录的主机。 #### 激活角色 用户登录后,需要激活角色才能使用其权限: ```sql SET ROLE 'role_name'; ``` #### 撤销角色权限 如果需要撤销角色的某些权限,可以使用 `REVOKE` 语句: ```sql REVOKE SELECT ON database_name.table1 FROM 'role_name'; ``` #### 删除角色 当不再需要某个角色时,可以使用 `DROP ROLE` 语句删除角色: ```sql DROP ROLE 'role_name'; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值