精华内容
下载资源
问答
  • 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
    展开全文
  • ORACLE SQL 表的内关联子查询

    千次阅读 2019-04-08 09:54:37
    表的内关联子查询:子查询可以用主查询里面定义的表进行关联实现查询,这样的查询我们把它叫为表的内关联子查询 下图是一个表的内关联子查询的例子: 如图所示,我们在Where条件中写入子查询,然后再调用主查询定义...

    开发工具与关键技术:Oracle sql*plus PLSQL Developer
    作者:刘俊杰
    撰写时间:2019年03月27日

    表的内关联子查询:子查询可以用主查询里面定义的表进行关联实现查询,这样的查询我们把它叫为表的内关联子查询
    下图是一个表的内关联子查询的例子:
    在这里插入图片描述
    如图所示,我们在Where条件中写入子查询,然后再调用主查询定义的表a来关联子查询中定义的表b从而使两张表关联上,关联上后要查询出工资相同的员工所以我们使表a的工资等于表b的工资,仅仅写这一个条件还是不可以的,所以还在后面加了一个ID不相等,这样的话就不会使表a中的名字等于表b中的名字了,这里为什么不用表a的name不等于表b的列呢,因为名字是会有重复的,所有我们用表的ID来进行不相等判断。
    下面是查询出来的结果:
    在这里插入图片描述
    表的内关联子查询我们平时用的也不算多,不过有时查询或修改一些特定的数据还是会用到的。
    另外我还有一个也是关于表的内关联子查询的例子跟大家分享一下,这是一个关于修改表数据的
    下面是一个修改数据时的题目:
    –把“SC1”表中“谌燕”老师教的课的成绩都更改为此课程的平均成绩;

    update sc1 c set score = (
    Select avg(score) from sc1 c1
                where  c.cno= c1.cno
                and c1.cno in(
                select cno from course1 a, teacher1 b
                where a.tno = b.tno
                and tname = '谌燕')
                group by c1.cno)
    where cno in(
    select cno from course1 a, teacher1 b
    where a.tno = b.tno
    and tname = '谌燕')
    

    如题需要查询出sc1表中的“谌燕”老师所教课的平均成绩,再把该课程的成绩修改为该平均成绩,首先我们先查询出“谌燕”所教的课程,用avg函数来根据课程计算出该课程的平均成绩,再用update修改sc1表中的数据,因为是修改所以score成绩后面只能用等于来连接,但是查询出来的数据里面包含多个条件的话是修改不了的,这时我们就要用修改表后面的c就要跟子查询中查询出来的数据进行关联了,把c表中的cno课程号跟c1表中的cno课程号进行连接
    最后查询出结果
    现在我们拿修改前的数据跟修改后的数据对比一下
    修改前:
    在这里插入图片描述
    修改后:
    在这里插入图片描述

    展开全文
  • MySQL左关联、右关联、内关联查询

    万次阅读 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)} 笛卡尔积 1 2 1 3 2 1 2 3 ...

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

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

    笛卡尔积
    1 2
    1 3
    2 1
    2 3

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

    table_A
    a_user_id a_name
    1 aa
    2 ab
    3 ac
    table_B
    b_user_id b_name
    1 ba
    2 bb
    4 bc

    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-04-10 16:04:00
    1. 链接 select a.*,b.* from a,b where a.aa=b.bb; 等于select a.*,b.* from a inner join b on a.aa=b.bb; 等于select a.*,b.* from a join b on a.aa=b.bb; 2. 外连接 select a.*,b.* from a right join...

    1. 内链接

    select a.*,b.* from a,b where a.aa=b.bb;

    等于select a.*,b.* from a inner join b on a.aa=b.bb;

    等于select a.*,b.* from a join b on a.aa=b.bb;

    2. 外连接

    select a.*,b.* from a right join b on a.aa=b.bb;

    select a.*,b.* from a left join b on a.aa=b.bb;

     

    转载于:https://www.cnblogs.com/duaner92/p/10684031.html

    展开全文
  • Orcle 内外关联与+号作用

    千次阅读 2017-01-22 12:36:47
    一 内外关联  外关联:左关联(left join),返回包括左表中的所有记录和右表中联结字段相等的记录。  右关联(right join),返回包括右表中的所有记录和左表中联结字段相等的记录。... 内关联:自关联
  • 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
  • 从下面的实验结果很容易看出,在有左关联的查询语句中,只要有 WHERE 的过滤条件,那么该语句将被强制转为内关联。 一、创建表 演示使用,随便创建两张表 --班级表 CREATE TABLE T_CLASS( class_id NUMBER not null...
  • 多表关联查询之内关联,左关联

    千次阅读 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 ...
  • 创建表一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), ...
  • mysql左右关联,内关联

    千次阅读 2014-02-17 16:53:32
    两张表,user,字段,user_id,email,namedeal,字段deal_id,user_id,deal_name对应关系,user.user_id = deal.user_id,左关联:select u.*,d.* from user as u left join deal as d on d.user_id = u.user_id;右关联:...
  • 满意答案kan51702013.09.07采纳率:52%等级:13已帮助:6509人数据表的连接有:1、连接(自然连接): 只有两个表相匹配的行才能在结果集中出现2、外连接: 包括(1)左外连接(左边的表不加限制)(2)右外连接(右边的表不加...
  • 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.*
  • mysql表内关联

    千次阅读 2016-08-22 21:47:24
    Employees Earning More Than Their Managers   Question Editorial Solution  My Submissions Total Accepted: 23721Total Submissions: 63965Difficulty: Easy ...
  • 步骤一: ...docker cp 宿主机的composer文件(安装路径) 容器ID:/usr/local/bin/ 举例 docker cp /usr/local/bin/composer 7be15cb24369:/usr/local/bin/ 步骤二: 然后进入容器 chmod +x /usr/local/bin/composer ...
  • 今天做项目的时候发现SQL语句 是3张表连接 ,最后查询出来的数据有重复数据。 语句类似这样 select a.name from a , b , c where a.id = b.id and a.id = c.id 当初设计这个语句的时候 想要这 3 张表的 交集,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,944
精华内容 7,577
关键字:

内关联