精华内容
下载资源
问答
  • 主要介绍了MongoDB多表关联查询操作,结合实例形式详细分析了MongoDB数据库实现多表关联查询的相关原理与实现技巧,需要的朋友可以参考下
  • 主要介绍了MyBatis-Plus多表联合查询并且分页(3表联合),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要介绍了Spring boot2基于Mybatis实现多表关联查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • thinkphp中的多表关联查询的实例详解  在进行后端管理系统的编程的时候一般会使用框架来进行页面的快速搭建,我最近使用比较多的就是thinkphp框架,thinkphp框架的应用其实就是把前端和后端进行分割管理,前端用户...
  • 主要介绍了Mysql多表联合查询效率分析及优化,需要的朋友可以参考下
  • NoSql的多表关联一直是比较复杂的问题,下面这篇文章主要给大家介绍了关于MongoDB中多表关联查询($lookup)的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
  • 三表关联查询

    2019-03-20 22:52:50
    三表关联查询练习数据库和练习sql
  • 主要介绍了MyBatis 三表外关联查询的实现(用户、角色、权限),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 第七章 关联查询(联合查询) 七种结果 (1)A∩B (2)A (3)A - A∩B (4)B (5)B - A∩B (6)A ∪ B (7)A ∪B- A∩B 或者 (A - A∩B) ∪ (B - A∩B) 注意:关联条件的个数 关联查询,必须写关联条件,...

    第七章 关联查询(联合查询)

    七种结果

    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    (1)A∩B

    (2)A

    (3)A - A∩B

    (4)B

    (5)B - A∩B

    (6)A ∪ B

    (7)A ∪B- A∩B 或者 (A - A∩B) ∪ (B - A∩B)

    注意:关联条件的个数

    关联查询,必须写关联条件,如果不写或少写,都会出现笛卡尔积
    关联条件的个数 = 关联查询的表数量 - 1

    如果两个表关联查询,就是一个关联条件。
    如果三个表关联查询,就是两个关联条件。
    。。。

    如果 n 个表关联查询,就是 n-1 个关联条件。

    如何实现?

    (1)内连接

    (2)外连接:左外连接、右外连接、全外连接(mysql使用union代替全外连接)

    1、内连接:实现A∩B

    select 字段列表
    from A表 inner join B表
    on 关联条件
    where 等其他子句;
    
    或
    
    select 字段列表
    from A表 , B表
    where 关联条件 and 等其他子句;
    

    代码示例:

    #查询员工的姓名和他所在的部门的名称
    #员工的姓名在t_employee
    #部门的名称在t_department
    SELECT ename "员工的姓名",dname "部门名称"
    FROM t_employee INNER JOIN t_department
    ON t_employee.did = t_department.did
    
    SELECT ename "员工的姓名",dname "部门名称"
    FROM t_employee , t_department
    WHERE t_employee.did = t_department.did
    
    
    #查询薪资高于20000的男员工的姓名和他所在的部门的名称
    SELECT ename "员工的姓名",dname "部门名称"
    FROM t_employee INNER JOIN t_department
    ON t_employee.did = t_department.did
    WHERE salary>20000 AND gender = '男'
    

    2、左外连接

    #实现查询结果是A
    select 字段列表
    from A表 left join B表
    on 关联条件
    where 等其他子句;
    
    #实现A -  A∩B
    select 字段列表
    from A表 left join B表
    on 关联条件
    where 从表关联字段 is null and 等其他子句;
    

    代码示例:

    #查询所有员工的姓名和他所在的部门的名称
    SELECT ename "员工的姓名",dname "部门名称"
    FROM t_employee LEFT JOIN t_department
    ON t_employee.did = t_department.did
    
    
    #查询所有没有部门的员工
    SELECT ename "员工的姓名",dname "部门名称"
    FROM t_employee LEFT JOIN t_department
    ON t_employee.did = t_department.did
    WHERE t_employee.did IS NULL
    

    3、右外连接

    #实现查询结果是B
    select 字段列表
    from A表 right join B表
    on 关联条件
    where 等其他子句;
    
    #实现B -  A∩B
    select 字段列表
    from A表 right join B表
    on 关联条件
    where 从表关联字段 is null and 等其他子句;
    

    代码示例:

    #查询所有部门,以及所有部门下的员工信息
    SELECT * 
    FROM t_employee RIGHT JOIN t_department
    ON t_employee.did = t_department.did
    
    #查询那些没有员工属于它的部门
    SELECT * 
    FROM t_employee RIGHT JOIN t_department
    ON t_employee.did = t_department.did
    WHERE t_employee.did IS NULL
    

    4、用union代替全外连接

    #实现查询结果是A∪B
    #用左外连接的A,union 右外连接的B
    select 字段列表
    from A表 left join B表
    on 关联条件
    where 等其他子句
    
    union 
    
    select 字段列表
    from A表 right join B表
    on 关联条件
    where 等其他子句;
    
    
    
    #实现A∪B -  A∩B  或   (A -  A∩B) ∪ (B - A∩B)
    #使用左外连接的 (A -  A∩B)  union 右外连接的(B - A∩B)
    select 字段列表
    from A表 left join B表
    on 关联条件
    where 从表关联字段 is null and 等其他子句
    
    union
    
    select 字段列表
    from A表 right join B表
    on 关联条件
    where 从表关联字段 is null and 等其他子句
    

    代码示例:

    #查询所有员工,所有部门,包括没有员工的部门,和没有部门的员工
    SELECT *
    FROM t_employee LEFT JOIN t_department
    ON t_employee.did = t_department.did
    
    UNION
    
    SELECT *
    FROM t_employee RIGHT JOIN t_department
    ON t_employee.did = t_department.did
    
    
    #查询那些没有部门的员工和所有没有员工的部门
    
    #没有部门的员工
    SELECT *
    FROM t_employee LEFT JOIN t_department
    ON t_employee.did = t_department.did
    WHERE t_employee.did IS NULL
    
    UNION 
    
    #所有没有员工的部门
    SELECT *
    FROM t_employee RIGHT JOIN t_department
    ON t_employee.did = t_department.did
    WHERE t_employee.did IS NULL
    
    

    5、自连接

    两个关联查询的表是同一张表,通过取别名的方式来虚拟成两张表

    select 字段列表
    from 表名 别名1 inner/left/right join 表名 别名2
    on 别名1.关联字段 = 别名2的关联字段
    where 其他条件
    

    代码示例:

    #查询员工的编号,姓名,薪资和他领导的编号,姓名,薪资
    #这些数据全部在员工表中
    #把t_employee表,即当做员工表,又当做领导表
    #领导表是虚拟的概念,我们可以通过取别名的方式虚拟
    SELECT emp.eid "员工的编号",emp.ename "员工的姓名" ,emp.salary "员工的薪资",
    	mgr.eid "领导的编号" ,mgr.ename "领导的姓名",mgr.salary "领导的薪资"
    FROM t_employee emp INNER JOIN t_employee mgr
    #t_employee emp:如果用emp.,表示的是员工表的
    #t_employee mgr:如果用mgr.,表示的是领导表的
    ON emp.mid = mgr.eid
    
    #表的别名不要加"",给列取别名,可以用"",列的别名不使用""也可以,但是要避免包含空格等特殊符号。
    
    
    展开全文
  • 联合查询:全连接[联合查询]、并集去交集等,将两个结果集联合到一起的查询 应用:连接查询和子查询配合使用。数据量较大时连接查询较慢(先过滤再连接);子查询嵌套层次较大也影响性能。 #s...

    一、常用的高级查询语句

    • 连接查询:(如果条件和结果分布于多张表,使用多表连接)
    • 子查询:(如果最终结果在一张表中,优先选择子查询,再考虑连接查询)嵌套查询,将一个查询结果作为另一个查询条件或组成部分的查询
    • 联合查询:全连接[联合查询]、并集去交集等,将两个结果集联合到一起的查询
    • 应用:连接查询和子查询配合使用。数据量较大时连接查询较慢(先过滤再连接);子查询嵌套层次较大也影响性能。
    #sql_高级查询
    
    ##-- 2.1 连接查询
    
    -- 笛卡尔积(没有加筛选条件的内连接)
      #> 多张表中记录组合所有可能有序对集合(如:A表有n行,B表m行,结果为n*m行)
    
    -- 内连接
      #> 多张表均匹配的记录连接并展示在结果集
      #> 无主从表之分,与连接顺序无关
      # 查询所有雇员及其部门信息
      select * from emp,dept where emp.deptno = dept.deptno; 
      select * from emp inner join dept on emp.deptno = dept.deptno;
      select * from emp inner join dept using(deptno); #字段名称必须一致,会自动去除重复列
    
    -- 自然连接
      #> 自然连接都是等值连接
      #> 表中字段名称相等的字段进行连接,会自动去重重复列
      select * from emp natural join dept;
    
    -- 外连接
      #> 以驱动表为依据,依次在匹配表中进行记录匹配,如果匹配则连接并展示在结果集中,否则以null填充
      #> 有主从表之分,与连接顺序有关。
      #> left/right [outer] join ... on...
      select * from emp LEFT JOIN dept on emp.deptno = dept.deptno;#emp为主表,dept为从表
      select * from emp right JOIN dept on emp.deptno = dept.deptno;#dept为主表,emp为从表
    
    -- 自连接
      #> 以本身为镜像进行连接(自身连接自身)
      # 查询员工及其领导的名称
      select e1.ename '名称',e2.ename '领导' from emp e1,emp e2 where e1.mgr = e2.empno
    
    ##-- 2.2 子查询
    #> 嵌套查询,将一个查询结果作为另一个查询条件或组成部分的查询
    
    -- 单行子查询
      #查询工资大于7788号员工的所有员工信息
      select * from emp where sal >(select sal from emp where empno =7788);
    	
    -- 多行子查询
      # 返回多值可以使用any或all来修饰。
      # =any相当于in,<any小于最大值,>any大于最小值;
      # <>all相当于not in,>all大于最大值,<all小于最小值。
      
    	#查询超过所在部门平均工资的员工信息
    	select * from emp e1 where sal > 
    	(select avg(sal) from emp e2 where e1.deptno = e2.deptno);
    
    	#查询薪水大于2000的部门名称
    	select dname from dept d where deptno in
    	(select deptno from emp e where sal > 2000);
        #或
    	select dname from dept d where EXISTS 
    	(select * from emp e where sal > 2000 and d.deptno=e.deptno);
        #in和exists的区别
    	 # in先执行子查询,在执行主查询,返回的值作为主查询的查询条件。
    	 # exists子查询不返回具体结果,返回true值出现在结果集,否则不出现;exists先执行主查询,再交给子查询进行匹配。
    
    ##-- 2.3 联合查询
    	#> union: 并集,所有的内容都查询,重复的显示一次
    	#> union all: 并集,所有的内容都显示,包括重复的
    	select * from emp where deptno = 20
    	union
    	select * from emp where sal <=2000

    二、图解说明几种常见的连接[联合]查询

    2.1、左连接

    select * from emp t1 LEFT JOIN dept t2 ON t1.deptno = t2.deptno; #emp为主表,dept为从表

    2.2、右连接

    select * from emp right join dept on emp.deptno = dept.deptno; #dept为主表,emp为从表

    2.3、内连接

    两表关联,保留两表中交集的记录。

    select * from emp inner join dept on emp.deptno = dept.deptno;

    select * from emp,dept where emp.deptno = dept.deptno;

    select * from emp inner join dept using(deptno); #字段名称必须一致,会自动去除重复列-->特例

    select * from emp natural join dept; #也叫自然连接、等值连接,两表中有相同字段时的等值连接-->特例

    2.4、左表独有

    两表关联,查询左表独有的数据。

    select * from emp t1 LEFT JOIN dept t2 ON t1.deptno = t2.deptno where t2.deptno is null; 
    

    2.5、右表独有

    两表关联,查询右表独有的数据。

    select * from emp t1 right join dept t2 on t1.deptno = t2.deptno where t1.deptno is null;

     

    2.6、全连接[联合查询]

    两表关联,查询它们的所有记录。

    oracle里面有full join,但是在mysql中没有full join。我们可以使用union (左连接+右连接,去除重复)。

    select * from emp LEFT JOIN dept on emp.deptno = dept.deptno
    union
    select * from emp right JOIN dept on emp.deptno = dept.deptno;

    2.7、并集去交集

    两表关联,取并集然后去交集。

    select * from emp t1 LEFT JOIN dept t2 ON t1.deptno = t2.deptno where t2.deptno is null
    union
    select* from emp t1 right join dept t2 on t1.deptno = t2.deptno where t1.deptno is null;
    
    展开全文
  • mysql联合查询关联查询

    千次阅读 2017-11-14 23:22:19
    最近面试中,Java的都会考察数据库,写SQL语句,大多数就问关联查询,索引看看下面三个关联查询的 SQL 语句有何区别?SELECT * FROM score, student WHERE score.id = student.id ... SELECT * FROM score JOIN ...

    最近面试中,Java的都会考察数据库,写SQL语句,大多数就问关联查询,索引

    看看下面三个关联查询的 SQL 语句有何区别?
    
    SELECT * FROM score, student WHERE score.id = student.id ...
    SELECT * FROM score JOIN student ON (score.id = student.id) WHERE ...
    SELECT * FROM score JOIN student USING (id) WHERE ...
    
    

    第一种为联合查询或者说并查询,前两种写法,只是写法不同而已,其功能完全相同;

    最后一种,会将同名的列,合并起来。
    第一种,是传统写法,SQL89标准里,就是这种;后面两种,是在SQL92标准才有的!

    
    mysql> select * from score;
    +----+-------+
    | id | score |
    +----+-------+
    |  1 |    60 |
    |  2 |    75 |
    |  4 |    90 |
    +----+-------+
    3 rows in set (0.00 sec)
    
    mysql> select * from student;
    +----+--------+
    | id | name   |
    +----+--------+
    |  1 | 张三   |
    |  2 | 李四   |
    |  3 | 王五   |
    +----+--------+
    3 rows in set (0.00 sec)
    
    mysql> select * from score, student where score.id=student.id;
    +----+-------+----+--------+
    | id | score | id | name   |
    +----+-------+----+--------+
    |  1 |    60 |  1 | 张三   |
    |  2 |    75 |  2 | 李四   |
    +----+-------+----+--------+
    2 rows in set (0.09 sec)
    
    mysql> select * from score join student on score.id=student.id;
    +----+-------+----+--------+
    | id | score | id | name   |
    +----+-------+----+--------+
    |  1 |    60 |  1 | 张三   |
    |  2 |    75 |  2 | 李四   |
    +----+-------+----+--------+
    2 rows in set (0.00 sec)
    
    mysql> select * from score join student using(id);
    +----+-------+--------+
    | id | score | name   |
    +----+-------+--------+
    |  1 |    60 | 张三   |
    |  2 |    75 | 李四   |
    +----+-------+--------+
    2 rows in set (0.00 sec)
    
    

    面试问题:

    mysql 查询一个表中没有存在在另一个表的数据,就是A表中有,B表中没有

    
    
    A表
    id content
    1 sfsdfsg
    2 ddsgffd
    3 gfggg
    4 dggfhfd
    
    B表
    
    id content
    
    2 ddsgffd
    3 gfggg
    

    那么我要查询到A表中 里面在B表中没有的数据(理想结果)就是:

    id content
    1 sfsdfsg
    4 dggfhfd
    
    select * from A where id not in select id from B;
    SELECT * FROM A WHERE NOT  EXISTS  ( SELECT 1 FROM B WHERE B.id = A.id );
    select * from A left join B on A.id = B.id where B.id is null;

    问题2:
    一句SQL查出所有课程成绩最高和最低的学生及其分数
    这里写图片描述
    这里写图片描述

    
    SELECT "最高分",student.*
    FROM student ,(SELECT MAX(score) AS score,`subject` FROM student GROUP BY `subject`)b
    WHERE student.`score` = b.score
    AND student.`subject` = b.subject
    UNION
    SELECT "最低分",student.*
    FROM student ,(SELECT MIN(score) AS score,`subject` FROM student GROUP BY `subject`)b
    WHERE student.`score` = b.score
    AND student.`subject` = b.subject; 

    http://blog.csdn.net/qq_29232943/article/details/78450950
    http://blog.csdn.net/gaoweizang/article/details/52859449
    http://blog.csdn.net/gaoweizang/article/details/52859449

    展开全文
  • 实现Mybatis框架中一对一关联映射的查询操作。 User用户表 - User_Card身份证表属于 1-1 的关系
  • 本篇文章主要介绍了SpringBoot JPA 表关联查询实例,使用JPA原生的findBy语句实现,具有一定的参考价值,有兴趣的可以了解一下。
  • Mysql学习中 ,单表查询每个人都很...但是多表之间的关联查询对于初学者是很难掌握的,以下是我学习中,结合老师所讲例子作的总结,主要就是三张表的关联查询。还包括group by操作。Join on;left join on;group by。
  • 主要介绍了ThinkPHP3.2中关联查询解决思路的相关资料,需要的朋友可以参考下
  • mysql多表联合查询

    2013-11-04 22:36:25
    mysql多表联合查询 表连接的约束条件 MySQL如何优化LEFT JOIN和RIGHT JOIN
  • sql 多表 3表4联合查询语句 对于多个表 或者其中存在两个表相同但是需要和不同的表进行不同条件的;联合查询
  • 主要介绍了mysql一对多关联查询分页错误问题的解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 应对sharding-jdbc结合mybatis实现分库分表功能 分表的联合查询采用将mysql的数据同步到elasticsearch进行筛选
  • Mysql多表联合查询

    2015-11-11 15:29:12
    MySql,多表联合查询加AS语句,多余的就不说了,自己看,绝对简单!
  • hibernate关联查询

    2019-03-26 02:06:56
    NULL 博文链接:https://zhoshijie.iteye.com/blog/1167262
  • 主要介绍了mysql实现多表关联统计(子查询统计),结合具体案例形式分析了mysql多表关联统计的原理、实现方法及相关操作注意事项,需要的朋友可以参考下
  • 多表联合查询

    2012-09-16 21:46:59
    多表联合查询的Hibernate应用
  • Java联合查询

    2018-11-14 23:06:18
    这是关于Java web 客户端的查询,可以根据不同的条件进行查询
  • mybatisplus关联查询

    千次阅读 2020-10-23 16:38:45
    @Data public class MyExamVo implements Serializable { private static final long ... } 先是一个关联查询,从记录结果中用 pc_id 和 st_name_id 传参 分别关联查询,得到两个对象,作为属性封装为一个对象
    @Data
    public class MyExamVo implements Serializable {
        private static final long serialVersionUID = 1L;
    	private ExamStu exam;
         private BatchNum pc;
    
        private Named name;
    
    
    }
    

    mapper xml

    <select id="getMyExamList" resultMap="myExamMap">
            select k.*,p.st_name_id from xg_ks_stu k
            left join xg_ks_pc p
            on k.pc_id =p.id
            where
            k.xs_id  = #{xsId}
        </select>
    
        <resultMap id="myExamMap" type="org.stu.exam.vo.MyExamVo">
    	    <association property="exam"  resultMap="examMap"></association>
            <association property="pc" column="pc_id"  select="selBatch"></association>
            <association property="name" column="st_name_id"  select="selName"></association>
        </resultMap>
    	 <resultMap id="examMap" type="org.jeecg.modules.stu.exam.entity.ExamStu">
            <id property="id" column="id"></id>
            <result property="pcId" column="pc_id"></result>
            <result property="xsId" column="xs_id"></result>
            <result property="beginTime" column="begin_time"></result>
            <result property="subTime" column="sub_time"></result>
            <result property="score" column="score"></result>
        </resultMap>
        <resultMap id="batchMap" type="org.stu.exam.entity.BatchNum"></resultMap>
        <resultMap id="nameMap" type="org.stu.exam.entity.Named"></resultMap>
    
        <select id="selBatch" resultMap="batchMap">
            select * from xg_ks_pc where id=#{id}
        </select>
        <select id="selName" resultMap="nameMap">
            select * from xg_ks_name where id=#{id}
        </select>
    

    mapper类

     IPage<MyExamVo> getMyExamList(Page page, @Param("xsId") String xsId);
    

    impl类

     @Override
        public IPage<MyExamVo> getMyExam(Page page, String xsId){
            return batchNumMapper.getMyExamList(page,xsId);
        }
    

    先是一个关联查询,从记录结果中用 pc_id 和 st_name_id 传参 分别关联查询,得到两个对象,作为属性封装为一个对象,examMap 定义了一个映射,主查询中字典与类ExamStu 中的属性进行对应

    展开全文
  • 【Laravel笔记】10. 模型的关联查询

    千次阅读 2021-02-06 22:46:13
    10.5 关联查询 10.1 关联概念 关联模型,即:两张或以上的表进行一定规则的绑定关联。 比如: 一个学生(学生表)对应一张个人信息卡(信息表),这种就是一对一; 一篇博文(帖子表)对应多个评论(评论表),这种就是一...
  • 【MySQL】多表联合查询、连接查询、子查询

    万次阅读 多人点赞 2019-06-03 17:08:20
    文章目录 【1】连接查询 内连接查询 外连接查询 左连接 右连接 【2】联合查询 【3】子查询 带in关键字的子查询 带比较运算符的子查询 带exists的子查询 带any关键字的子查询 带all关键字的子查询 【1】连接查询 连接...
  • 需求,根据vrTaskUuid查询用户任务和步骤信息,需要根据vrTaskUuid关联查询vr_user_oper_info(任务信息)和vr_user_oper_step_info(步骤信息) SQL语句-关联查询 Mapper配置 <?xml version="1.0" encoding=...
  • ELK生态:ES中的数据关联查询

    千次阅读 2020-03-28 11:46:52
    先说下结论,如果不做特殊处理,es是无法完成类似与表Join的关联查询的。 2、ES如何做关联 官网里面有几种支持关联查询的办法: 2.1 应用程序做关联 这个没有什么好说的,其实不算真正的关联,需要先查询...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 705,710
精华内容 282,284
关键字:

关联查询