精华内容
下载资源
问答
  • 内关联和左关联
    万次阅读
    2018-12-28 12:34:58

    要说MySQL的关联查询,首先先说一下笛卡尔积

    有两个集合 A = {1, 2},B = {1, 3},这两个集合的笛卡尔积 A * B就有四种情况, A * B = {(1,1), (1,3), (2,1),(2,3)}

    笛卡尔积
    12
    13
    21
    23

    假设现在有两张表,table_A和 table_B 

    table_A
    a_user_ida_name
    1aa
    2ab
    3ac
    table_B
    b_user_idb_name
    1ba
    2bb
    4bc

    1、内关联查询,INNER JOIN

    SELECT * FROM table_A INNER JOIN table_B ON a_user_id = b_user_id;

    table_A INNER JOIN table_B 这样查询到的结果就是 表 table_A和table_B 的交集。也就是a_user_id 和 b_user_id 的交集 = 1,2;

    2、左关联, LEFT JOIN

    SELECT * FROM table_A LEFT JOIN table_B ON a_user_id = b_user_id;

    table_A LEFT JOIN table_B 这样查询到的结果就是表 table_A 全部数据 和 table_B的交集。也就是a_user_id 和 b_user_id 的交集 = 1,2,3;

    3、右关联, RIGHT JOIN

    SELECT * FROM table_A RIGHT JOIN table_B ON a_user_id = b_user_id;

    table_A RIGHT JOIN table_B 这样查询到的结果就是表 table_B全部数据和 table_A的交集。也就是a_user_id 和 b_user_id 的交集 = 1,2,4;

    也可以用联合查询,就不能用ON了。

    SELECT * FROM table_A, table_B WHERE a_user_id = b_user_id;

     

    更多相关内容
  • 多表关联查询之内关联左关联

    千次阅读 2019-08-22 17:55:24
    -- 内关联左关联只是改一下关键字inner—>left -- 内关联  select * from student_phone,phone  where student_phone.phone=phone.id -- 1.内关联 (丢失不满足的记录条数) select * from student_phone a ...

     

    -- 同学持有的手机记录表

    create table student_phone (
    id int primary key,
    stu_name varchar2(20),
    phone varchar2(200)
    )

    insert into student_phone values (1,'小红','华为 荣耀v9');
    insert into student_phone values (2,'小军','荣耀v9(华为)');
    insert into student_phone values (3,'小红','小米note2');
    insert into student_phone values (4,'小平','小米 note2');
    insert into student_phone values (5,'小平','小米 note2');
    insert into student_phone values (6,'小云','小米 Note2');
    insert into student_phone values (7,'小云','小米 NOTE2');
    insert into student_phone values (8,'小云','小米 NOTE 2');

     

    commit

    select phone,count(1) t from student_phone 
    group by phone order by t desc
    ---------------------------
    drop table student_phone

    create table student_phone (
    id int primary key,
    stu_name varchar2(20),
    phone int
    )

    create table phone(
    id int primary key,
    phone_name varchar2(200)
    )
    insert into phone values(1,'荣耀v9(华为)');
    insert into phone values(2,'小米 note2');
    commit

    select * from phone
    select * from student_phone

    insert into student_phone values (1,'小红',1);
    insert into student_phone values (2,'小军',1);
    insert into student_phone values (3,'小红',2);
    insert into student_phone values (4,'小平',2);
    insert into student_phone values (5,'小平',2);
    insert into student_phone values (6,'小云',2);
    insert into student_phone values (7,'小云',2);
    insert into student_phone values (8,'小云',2);
    commit

    select phone,count(1) t from student_phone 
    group by phone order by t desc

    可以通过phone=id
    select * from student_phone,phone 
    where student_phone.phone=phone.id

    ------------------------------
    select a.stu_name,b.phone_name from student_phone a,phone b
    where a.phone=b.id

    -------------------------------------
    select phone_name,count(1) 总人数 from
    (
    select a.stu_name,b.phone_name from student_phone a,phone b
    where a.phone=b.id
    ) ttttt
    group by phone_name order by 总人数 desc

    ----------------------------

    -- 多表关联 
    -- 内关联跟左关联只是改一下关键字inner—>left
    -- 内关联 
    select * from student_phone,phone 
    where student_phone.phone=phone.id
    -- 1.内关联 (丢失不满足的记录条数)
    select * from student_phone a
    inner join
    phone b on a.phone=b.id

     


    -- 
    insert into student_phone values (9,'小成',3);
    commit
    select * from phone
    select * from student_phone


    select a.stu_name,b.phone_name from student_phone a
    inner join
    phone b on a.phone=b.id
    --测试 
    insert into phone values(3,'iphone8(美国总统专用)');
    commit
    delete from phone where id=3

    丢失了小成

    -- 2.左关联

    select a.stu_name,b.phone_name from student_phone a
    left join
    phone b on a.phone=b.id

    -- 改进一下
    select a.stu_name,nvl(b.phone_name,'未知') from student_phone a
    left join
    phone b on a.phone=b.id

     

    --回归原始 (oracle专用+:即把丢失的+回来)
    select a.stu_name,b.phone_name from student_phone a,phone b 
    where a.phone=b.id(+)

    --求什么手机最多人使用(排序)
    --分组[后]最大值
    select * from(
    select phone,count(1) counts from student_phone group by phone 
    order by counts desc
    )
    where rownum=1


    select * from(
    select phone,count(1) counts from student_phone group by phone 
    order by counts asc
    )
    where rownum=1

    参考地址 https://www.cnblogs.com/yncx/p/6542708.html

     

    展开全文
  • 二、left join(左关联) SELECT * FROM apps t1 LEFT JOIN `user` t2 ON t1.id=t2.id 三、right join(右关联) SELECT * FROM apps t1 RIGHT JOIN `user` t2 ON t1.id=t2.id 四、join(内关联) ...

    咋们来实战一下

    一、先查出表两个表的数据

    SELECT * FROM apps t1

    SELECT * FROM user t2;

     

    二、left join(左关联)

    SELECT * FROM apps t1
    LEFT JOIN `user` t2
    ON t1.id=t2.id

     三、right join(右关联)

    SELECT * FROM apps t1
    RIGHT JOIN `user` t2
    ON t1.id=t2.id

     四、join(内关联)

    SELECT * FROM apps t1
    JOIN `user` t2
    ON t1.id=t2.id

     

    展开全文
  • mysql关联查询:左关联、右关联内关联、全关联
    连接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定连接条件。WHERE和HAVING子句也可以包含搜索条件,以进一步筛选连接条件所选的行。   
       
          连接可分为以下几类:     
        
           内连接。(典型的连接运算,使用像   =   或   <>   之类的比较运算符)。包括 相等连接和自然连接    
          内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索   students   和   courses   表中学生标识号相同的所有行。   
        
           外连接。外连接可以是 左向外连接、右向外连接或完整外部连接     
          在FROM子句中指定外连接时,可以由下列几组关键字中的一组指定:   
          LEFT   JOIN   或   LEFT   OUTER   JOIN。     
          左向外连接的结果集包括LEFT  OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。    
          RIGHT  JOIN  或  RIGHT   OUTER   JOIN。    
          右向外连接是左向外连接的反向连接。 将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。   
       
          FULL   JOIN   或   FULL   OUTER   JOIN。     
           完整外部连接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。   
       
           交叉连接。 交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉连接也称作笛卡尔积。   
       
    例如,下面的内连接检索与某个出版商居住在相同州和城市的作者:  
       
      USE   pubs  
      SELECT   a.au_fname,   a.au_lname,   p.pub_name  
      FROM   authors   AS   a   INNER   JOIN   publishers   AS   p  
            ON   a.city   =   p.city  
            AND   a.state   =   p.state  
      ORDER   BY   a.au_lname   ASC,   a.au_fname   ASC   
       
          FROM   子句中的表或视图可通过内连接或完整外部连接按任意顺序指定;但是,用左或右向外连接指定表或视图时,表或视图的顺序很重要。有关使用左或右向外连接排列表的更多信息,请参见使用外连接。     
        
    例子:  
      a表       id   name     b表     id     job   parent_id  
                  1   张3                   1     23     1  
                  2   李四                  2     34     2  
                  3   王武                  3     34     4  
       
      a.id同parent_id   存在 关系    
        
       内连接   
      select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id  
       
      结果是    
      1   张3                   1     23     1  
      2   李四                  2     34     2   
        
      左连接   
      select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id  
       
      结果是    
      1   张3                    1     23     1  
      2   李四                  2     34     2  
      3   王武                  null   

      右连接   
      select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id  
       
      结果是    
      1   张3                   1     23     1  
      2   李四                 2     34     2  
      null                       3     34     4   
        
      完全连接   
      select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id   

      结果是    
      1   张3                   1     23     1  
      2   李四                 2     34     2  
      null                 3     34     4  
      3   王武                 null
     
     
    SQL code
        
    DECLARE @TA TABLE (IDA INT,VA VARCHAR( 10)) DECLARE @TB TABLE (IDB INT,VB VARCHAR( 10)) INSERT INTO @TA SELECT 1, ' AA ' UNION SELECT 2, ' BC ' UNION SELECT 3, ' CCC ' INSERT INTO @TB SELECT 1, ' 2 ' UNION SELECT 3, ' 58 ' UNION SELECT 4, ' 67 ' -- 内联接简单写法 SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A, @TB B WHERE A.IDA =B.IDB -- 内联接 SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A INNER JOIN @TB B ON A.IDA =B.IDB SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A JOIN @TB B ON A.IDA =B.IDB -- 左外联接 SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A LEFT JOIN @TB B ON A.IDA =B.IDB SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A LEFT OUTER JOIN @TB B ON A.IDA =B.IDB -- 右外联接 SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A RIGHT JOIN @TB B ON A.IDA =B.IDB SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A RIGHT OUTER JOIN @TB B ON A.IDA =B.IDB -- 完整外联接 SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A FULL JOIN @TB B ON A.IDA =B.IDB SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A FULL OUTER JOIN @TB B ON A.IDA =B.IDB -- 交叉联接 SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A CROSS JOIN @TB B -- 自联接 SELECT A.IDA,A.VA,B.IDA,B.VA FROM @TA A, @TA B WHERE A.IDA =B.IDA + 1 查询分析器中执行: -- 建表table1,table2: create table table1(id int,name varchar( 10)) create table table2(id int,score int) insert into table1 select 1, ' lee ' insert into table1 select 2, ' zhang ' insert into table1 select 4, ' wang ' insert into table2 select 1, 90 insert into table2 select 2, 100 insert into table2 select 3, 70 如表 -- ----------------------------------------------- table1 |table2 | -- ----------------------------------------------- idname |idscore | 1lee | 190 | 2zhang | 2100 | 4wang | 370 | -- ----------------------------------------------- 以下均在查询分析器中执行 一、外连接 1.概念:包括左向外联接、右向外联接或完整外部联接 2.左连接: left joinleft outer join ( 1)左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值( null)。 ( 2)sql语句 select * from table1 left join table2 on table1.id =table2.id -- -----------结果------------- idnameidscore -- ---------------------------- 1lee190 2zhang2100 4wangNULLNULL -- ---------------------------- 注释:包含table1的所有子句,根据指定条件返回table2相应的字段,不符合的以null显示 3.右连接: right joinright outer join ( 1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。 ( 2)sql语句 select * from table1 right join table2 on table1.id =table2.id -- -----------结果------------- idnameidscore -- ---------------------------- 1lee190 2zhang2100 NULLNULL370 -- ---------------------------- 注释:包含table2的所有子句,根据指定条件返回table1相应的字段,不符合的以null显示 4.完整外部联接: full joinfull outer join ( 1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。 ( 2)sql语句 select * from table1 full join table2 on table1.id =table2.id -- -----------结果------------- idnameidscore -- ---------------------------- 1lee190 2zhang2100 4wangNULLNULL NULLNULL370 -- ---------------------------- 注释:返回左右连接的和(见上左、右连接) 二、内连接 1.概念:内联接是用比较运算符比较要联接列的值的联接 2.内连接: joininner join 3.sql语句 select * from table1 join table2 on table1.id =table2.id -- -----------结果------------- idnameidscore -- ---------------------------- 1lee190 2zhang2100 -- ---------------------------- 注释:只返回符合条件的table1和table2的列 4.等价(与下列执行效果相同) A: select a. *,b. * from table1 a,table2 b where a.id =b.id B: select * from table1 cross join table2 where table1.id =table2.id (注: cross join后加条件只能用where,不能用on) 三、交叉连接(完全) 1.概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生3 * 3 =9条记录) 2.交叉连接: cross join (不带条件where...) 3.sql语句 select * from table1 cross join table2 -- -----------结果------------- idnameidscore -- ---------------------------- 1lee190 2zhang190 4wang190 1lee2100 2zhang2100 4wang2100 1lee370 2zhang370 4wang370 -- ---------------------------- 注释:返回3 * 3 =9条记录,即笛卡尔积 4.等价(与下列执行效果相同) A: select * from table1,table2
    展开全文
  • 创建表一USER_TABLE,表二WORKS_LIST CREATE TABLE USER_TABLE( USER_ID NUMBER(10), USER_NAME VARCHAR2(10), USER_WORKS VARCHAR2(20) ); CREATE TABLE WORKS_LIST( USER_NAME VARCHAR2(10), ...
  • 1、连接(自然连接): 只有两个表相匹配的行才能在结果集中出现2、外连接: 包括(1)外连接(左边的表不加限制)(2)右外连接(右边的表不加限制)(3)全外连接(左右两表都不加限制)3、自连接(连接发生在一张基表)select...
  • MYSQL 左关联,右关联内关联

    千次阅读 2016-09-23 10:55:24
    两张表, user,字段,user_id,email,name deal,字段deal_id,user_id,deal_name 对应关系,user.user_id ...左关联: select u.*,d.* from user as u left join deal as d on d.user_id = u.user_id; 右关联: select u
  • 由浅入深sql语句(外键,左关联,右关联,全关联连接,外连接
  • 我自己用java写的左关联,右关联操作,关联效率高,使用方便
  • 多表关联——连接外连接

    千次阅读 2021-05-14 17:06:37
    1、内关联 2、外关联左关联 3、多表关联逻辑演示 4、分析多表关联中出现的数据确实、数据重复问题
  • 本篇文章主要介绍了SpringBoot JPA 表关联查询实例,使用JPA原生的findBy语句实现,具有一定的参考价值,有兴趣的可以了解一下。
  • 由此可知,客户数据订单数据是一对多的关系;那这样的话,问题就来了,我到底以订单中的哪一条数据为准呢?经过协商后一致同意以最新的一条数据为准; 数据测试初始化SQL脚本 DROP TABLE IF EXIST
  • mysql的链接和左右连接的区别

    千次阅读 2017-01-04 14:43:16
    mysql中连接的数据记录中,不存在字段为null的情况,可以简单的认为,连接就是连接或者右连接的结果中剔除所有字段为null记录后的结果。另外mysql 不支持full join 2.连接 mysql中连接就是选择一个主表...
  • mysql关联查询

    2018-08-02 17:26:13
    mysql关联左关联,右关联连接,外连接,交叉连接
  • 栏为大项列表,右栏为没项目的子列表。实现了选择栏,右栏滚动到对应列表;滚动右栏,栏大项的选中状态对应改变。
  • sql中的左右关联、全关联、自关联

    万次阅读 多人点赞 2018-09-06 09:27:15
    left join(联接) 返回包括表中的所有记录右表中联结字段相等的记录  right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 举例...
  • 多表关联和左、右连接,连接

    千次阅读 2014-06-16 17:47:40
    无序性:指集合内部元素没有相对顺序的概念,对于两个集合而言,只要元素值元素个数相同则两个集合相等。 唯一性:指集合内部元素不存在值相等的元素。 上图所示集合是错误的,因为有2个‘3’违背了唯一...
  • 从下面的实验结果很容易看出,在有左关联的查询语句中,只要有 WHERE 的过滤条件,那么该语句将被强制转为内关联。 一、创建表 演示使用,随便创建两张表 --班级表 CREATE TABLE T_CLASS( class_id NUMBER not null...
  • 近在做项目中遇到多表关联查询排序的效率问题(5张以上40W+数据的表),查询一次大概要20多秒,经过一番苦思冥想,处理方案如下:  1、软件设计初期,需要一对一关联的表应该设计在一张大表里,这样虽然字段多些,...
  • mysql左右关联,关联,having用法

    千次阅读 2017-11-03 14:19:56
    两张表, user,字段,user_id,email,name deal,字段deal_id,user_id,deal_name 对应关系,user.user_id ...左关联: select u.*,d.* from user as u left join deal as d on d.user_id = u.user_id; 右关联: select u.*,d.*
  • 图解SQL多表关联查询(连接,连接,全连接)[整理].pdf
  • Mysql中外连接,连接,连接,右连接的区别

    千次阅读 多人点赞 2020-09-16 16:00:14
    外连接2.1连接2.2右连接3. 连接 1. 前言 相信大家一定都做过多表的连表查询,并且这其中的查询方式也比较多样. 可能主要就是下面这几种方式: 直接通过where语句将重叠的字段进行匹配就比如下面这种 select *...
  • 主要介绍了vue实现form表单与table表格的数据关联功能,涉及vue.js表单事件响应及页面元素属性动态操作相关实现技巧,需要的朋友可以参考下
  • 转载MySQL 基础知识笔记 第03期:子查询和关联查询 (qq.com)
  • 用一张图说明三者的区别: 总结:left join(联接) 返回包括表中的所有记录右表中关联字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中关联字段相等的记录inner join(等值连接) 只返回两...
  • oracle(+)左关联

    千次阅读 2021-05-02 02:53:34
    表示左关联 SELECT a.policyno, a.agentcode, b.agentname FROM prpcmain a, prpdagent b WHERE a.agentcode = b.agentcode(+); 相当于: SELECT a.policyno, a.agentcode, b.agentname FROM prpcmain a LEFT JOIN ...
  • 文章目录系列文章目录普通关联查询 连接由连接的区别 普通关联查询 连接由连接的区别 最近发现一段sql 就是普通的关联查询,在项目需求中还挺实用的,我就在想为什么不用连接/右连接之类的呢,以前不大多...
  • 这几个连接傻傻分不清楚,直接上图再解释 a表 b表数据分别如下 连接,inner可以省略 连接:只有匹配的数据才会展示出来 select * from tjh.dbo...左右连接 a表连接b表 等于 b表右连接a表 连接:以左边为基准
  • Mysql左关联模糊查询 两个表关联查询,但是只要对应字段模糊查询,比如a能关联a1 表a 表b 查询语句: SELECT a.nameA, b.nameB FROM a LEFT JOIN b on instr(b.nameB,a.nameA)>0 查询结果;
  • 提出利用模糊属性集和关联规则的支持度获得高效率的关联规则增量更新挖掘的方法。首先对输入数据集进行模糊离散化,确定相应的模糊属性集,模糊支持数各属性原先的模糊聚类中心;然后检查是否满足最小支持度条件,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 371,534
精华内容 148,613
关键字:

内关联和左关联

友情链接: ACEXep1k10tc100.rar