首页 > 数据库 >sql多表连接 ,三表连接查询 用户表、角色表、用户角色关系表

sql多表连接 ,三表连接查询 用户表、角色表、用户角色关系表

时间:2023-10-29 21:04:58浏览次数:40  
标签:多表 角色 查询 三表 role user id 连接

sql多表连接 ,三表连接查询

文章目录

一、普通的三表连接查询

用户表、部门表、用户部门关联表

select a.id as userId,dept_id,c.name as deptName
from user as a
left join user_dept as b
on a.id=b.user_id
left join department as c
on b.dept_id=c.id;

在这里插入图片描述

用户表、角色表、用户角色关联表

select a.id as userId,c.name as roleName
from user as a
left join user_role as b
on a.id=b.user_id
left join role as c
on b.role_id=c.id;

在这里插入图片描述

二、加入查询条件、排序、分页、字段重命名的三表连接查询。

SELECT
	c.NAME AS roleName,
	b.role_id AS roleId,
	a.* 
FROM
	USER AS a
	LEFT JOIN user_role AS b ON a.id = b.user_id
	LEFT JOIN role AS c ON b.role_id = c.id 
WHERE
	b.role_id = 1 
ORDER BY
	id 
	LIMIT 0,
	2;

在这里插入图片描述

三、疑问解答(大家有疑问可以在评论区留言,笔者一般一日内会回复):

1. 做了Limit为什么要写在最后而不是写在第一个表那里?

答:
如果你没有查询条件的话是可以的,这样做反而性能会好些。

但是如果你有查询条件,那么就一定不能在第一个表那里就进行分页。因为会导致最后查询的数据不对。
举个例子:我们先对总数据进行了分页,获取到了前10个数据。然后在进行where条件筛选,这个时候where条件就只是针对这10个数据进行筛选,后面的数据就筛选不到了。

延伸问题:
这个时候可能会有同学说,那我把where条件也放在第一个表那里不就行了么。
还是和上面的基本上一样的回复。如果你的where不依赖剩下的表的话那么就可以,否则的话你的where也是有问题的。

原文链接:https://blog.csdn.net/weixin_43606158/article/details/107337390

标签:多表,角色,查询,三表,role,user,id,连接
From: https://www.cnblogs.com/sunny3158/p/17796434.html

相关文章

  • SQL多表联合查询用法介绍
    SQL多表联合查询用法介绍一、联合查询基本概念联合查询,又称为多表查询,是指针对两个或多个表进行查询,并将结果集合并起来展示的过程。在实际应用中,联合查询是很常见的查询方式,因为单张表无法满足复杂的查询需求。二、联合查询的语法联合查询的语法格式如下:SELECTcolumn1,co......
  • SQL Server数据库连接字符串的几种写法整理
     SQLServer数据库连接字符串的几种写法整理一、远程连接SQLServer数据库1.sqlserver身份验证连接字符串:privatestringConnstrSqlServer="server=数据库地址及实例;uid=数据库账号;pwd=数据库密码;database=数据库名";2.windows身份验证连接字符串:privatestr......
  • MYSQL内外连接查询实践
    自身连接查询自身连接,就是将表本身和表进行笛卡尔积计算,得到结果,但是由于表名相同,因此要先起一个别名:SELECT*FROM表名别名1,表名别名2自身连接查询的连接对象变成自己和自己了。例如1:student表自身连接查询#自身连接查询,笛卡尔积:81条数据select*fromstudent......
  • 常见问题解决 --- adb连接失败
    可能原因有,手机问题,电脑问题,线材问题。手机问题有:没有开启adb调试usb连接模式不是文件传输模式电脑问题有:adb驱动安装版本不匹配adb没有正确安装安卓驱动没有安装线材质量不好,断开 ......
  • javaweb--数据库连接池
    数据库连接池是一个容器,负责分配、管理数据库连接(Connection)它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏好处:资源重用提升系统响应速度避免数据库连接遗漏......
  • 使用IDEA连接Mysql数据库
    前言IntelliJIDEA集成了众多插件,方便开发者使用,使用其自带的Database模块就可以很方便的配置、连接到数据库,本次操作以MySQL为例(本实验需提前装好Mysql和IDEA,如果还没安装可参考以下博客IntelliJIDEA下载安装及配置教程和mysql8.0.25安装配置教程)一、打开数据库服务器用管理员方......
  • [mysql][maxwell] maxwell无法连接mysql8.x,报错信息“Access Denied”
    前提使用mysql-maxwell-kafka进行增量同步的时候,kafka消费组没有得到任何消息。一个个排到最后才发现最核心的问题是mysql,麻了真的是。kafka没问题查进程,有两台机子的kafka未启动打开日志,报错org.apache.zookeeper.KeeperException$NodeExistsException:KeeperErrorCode=N......
  • javaweb--多表查询
    多表查询:从多张表中查询数据内连接:相当于查询A、B两张表的交集隐式连接:selectt1.name,t1.id,t2.dnamefromepmt1,deptt2whereepm.name=dept.id外连接:左外连接是查找A表所有数据和AB表的交集select*fromt1joint2ont1.id=t2.id左外连接是查找B表所有数据和AB表的......
  • javaweb--多表关系实现
    一对多在多的一方建立外键,指向一的一方的主键多对多利用第三张中间表建立连接,第三张中间表包含两个外键,分别连接两张表的主键一对一多用于表的拆分,将实体中经常使用的字段放在一张表中,不经常使用的字段放在另一张表中,提升查询效率。在任何一方设置外键,连接另一方主键,并设置......
  • ?Mybatis多表查询(1:1、1:N、N:N),MP多表查询(自定义SQL)
    Mybatis多表关联查询Gitee地址:https://gitee.com/zhang-zhixi/mybatis-tables-query.git数据表:oracleCREATETABLE"T_ORDER"("ID"NUMBERNOTNULL,"F_ORDER_TIME"DATE,"F_TOTAL"VARCHAR2(255BYTE),"F_USER_ID"NU......