精华内容
参与话题
问答
  • SQL连接查询总结和练习

    万次阅读 2015-04-21 10:17:52
    通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,是它区别于其它类型...一般来说,连接查询比嵌套查询的效率高一点。所以,在Transact-SQL中推荐使用这种方法。 SQL-92标准所定义的FROM子句的连接
        通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,是它区别于其它类型 数据库管理系统的一个标志。连接可以在SELECT 语句的FROM子句或WHERE子句中建立,在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。一般来说,连接查询比嵌套查询的效率高一点。所以,在Transact-SQL中推荐使用这种方法。
       SQL-92标准所定义的FROM子句的连接语法格式为:
         FROM join_table join_type join_table [ON (join_condition)]
      其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一 个表操作的连接又称做自连接。
    join_type 指出连接类型,可分为内连接和外连接。
    练习数据表:
    表一:press(出版社)
    表二:authors(作者)

    一、内连接(INNER JOIN)

    内连接是应用程序中用的普遍的"连接"操作,它一般都是默认连接类型。内连接基于连接谓词将两张表(如 A 和 B)的列组合在一起,产生新的结果表。查询会将 A 表的每一行和 B 表的每一行进行比较,并找出满足连接谓词的组合。当连接谓词被满足,A 和 B 中匹配的行会按列组合(并排组合)成结果集中的一行。连接产生的结果集,可以定义为首先对两张表做笛卡尔积(交叉连接) -- 将 A 中的每一行和 B 中的每一行组合,然后返回满足连接谓词的记录。实际上 SQL 产品会尽可能用其他方式去实现连接,笛卡尔积运算是非常没效率的. 
    内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:

      1、相等连接

    1)等值连接

    表之间的连接是通过相等的字段值连接起来的查询称为等值连接查询。在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。特别注意连接依据的列可能包含 NULL 值,NULL 值不与任何值匹配(甚至和它本身)
    例如:列出authors和press表中位于同一城市的作者和出版社
          SELECT * FROM press AS p INNER JOIN authors AS a ON p.city=a.city 
           等价于:SELECT * FROM press AS p ,authors AS a WHERE p.city=a.city
             查询结果:

    2)非等值连接                      

    在等值查询的连接条件中不使用等号,而使用其它比较运算符就构成了非等值连接查询。可以使用的比较运算符有:> 、>、=、 <、 <=、 !=, 还可以使用BETWEEN…AND 之类的谓词。
          例如:SELECT * FROM press AS p INNER JOIN authors AS a ON p.id > a.press_id   
              查询结果:
                

    2、自然连接

    自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,两表中的所有名称相同的列都将被比较,并且在结果中把重复的属性列去掉,结果表中两表中名称相同的列只出现一次.。而等值连接并不去掉重复的属性列。(sqlserver 不支持 自然连接)
    例如:SELECT * FROM authors  NATRUAL JOIN press 
    查询结果与等值连接一样,只是去掉了重复的id那一列。

    3、交叉连接

        交叉连接(cross join),又称笛卡尔连接(cartesian join)或叉乘(Product),它是所有类型的内连接的基础。把表视为行记录的集合,交叉连接即返回这两个集合的笛卡尔积返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。这其实等价于内连接的链接条件为"永真",或连接条件不存在.。

        如果 A 和 B 是两个集合,它们的交叉连接就记为: A × B.

        例如: SELECT * FROM press CROSS JOIN authors    

        等价于:SELECT * FROM press,authors 

            查询结果:

                

    二、外连接

    外连接并不要求连接的两表的每一条记录在对方表中都一条匹配的记录. 连接表保留所有记录 -- 甚至这条记录没有匹配的记录也要保留. 外连接可依据连接表保留左表, 右表或全部表的行而进一步分为左外连接, 右外连接和全连接.在标准的 SQL 语言中, 外连接没有隐式的连接符号.

    1、左外连接

    左外连接会返回左表的所有记录和右表中匹配记录的组合(如果右表中无匹配记录, 来自于右表的所有列的值设为 NULL). 如果左表的一行在右表中存在多个匹配行, 那么左表的行会复制和右表匹配行一样的数量, 并进行组合生成连接结果.

        例如:SELECT *  FROM   press LEFT OUTER JOIN authors ON press.id = authors.press_id
        查询结果:
    	
          

    2、右外连接

        右外连接, 亦简称右连接, 它与左外连接完全类似, 只不过是作连接的表的顺序相反而已.右连接操作返回右表的所有行和这些行在左表中匹配的行(没有匹配的, 来源于左表的列值设为 NULL).
    

        例如:SELECT * FROM press RIGHT OUTER JOIN authors ON press.id= authors.press_id
            等价于:SELECT * FROM authors LEFT OUTER JOIN press ON press.id= authors.press_id
    
            查询结果:
    
          		
     		
        实际上显式的右连接很少使用, 因为它总是可以被替换成左连接--换换表的位置就可以了,所以上面两条语句是等价的。
    
    
    
    

    3、全连接

        全连接是左右外连接的并集. 连接表包含被连接的表的所有记录, 如果缺少匹配的记录, 即以 NULL 填充.。一些数据库系统(如 MySQL)并不直接支持全连接, 但它们可以通过左右外连接的并集(参: union)来模拟实现
    
        例如:SELECT * FROM   press FULL OUTER JOIN authors ON press.id= authors.press_id
    
         查询结果:
          	
    
    

    三、自连接

         自身连接是指同一个表自己与自己进行连接。既可以用内连接,也可以用外连接。
    
         例如:SELECT * FROM   authors a1 LEFT JOIN authors a2 ON a2.press_id = a1.id
           查询结果:
    
            
    
    
    参考链接:http://www.cnblogs.com/worksguo/articles/1030214.html
    	http://zh.wikipedia.org/wiki/连接_(SQL) 


    
    
    展开全文
  • Mysql—— 内连接、左连接、右连接以及全连接查询

    万次阅读 多人点赞 2018-10-05 23:03:31
    一、内连接查询 inner join 关键字:inner join on 语句:select * from a_table a inner join b_table b on a.a_id = b.b_id; 说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集...

    获取 boy 、girl 表下载地址

    一、内连接查询  inner join

    关键字:inner  join   on

    语句select * from a_table a inner join b_table b on a.a_id = b.b_id;

    说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分。

    案例解释:在boy表和girl 表中查出两表 hid 字段一致的姓名(gname,bname),boy表和girl 表如下:

          

    采用内连接查询方式:

    SELECT boy.hid,boy.bname,girl.gname FROM boy INNER JOIN girl ON girl.hid = boy.hid;

    查询结果如下:

    二、左连接查询 left join

    关键字:left join on / left outer join on

    语句:SELECT  * FROM a_table a left join b_table b ON a.a_id = b.b_id;

    说明: left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。 左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

    案例解释:在boy表和girl 表中左连接查询,boy表和girl 表如下:

          

    采用内连接查询方式:

    SELECT boy.hid,boy.bname,girl.gname FROM boy LEFT JOIN girl ON girl.hid = boy.hid;

    查询结果如下:

    三、右连接 right join

    关键字:right join on / right outer join on

    语句:SELECT  * FROM a_table a right outer join b_table b on a.a_id = b.b_id;

    说明:right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。

    案例解释:在boy表和girl 表中右连接查询,boy表和girl 表如下:

          

    采用内连接查询方式:

    SELECT boy.hid,boy.bname,girl.gname FROM boy RIGHT JOIN girl ON girl.hid = boy.hid;

    查询结果如下:

    四、全连接 union

    关键字:union /union all

    语句:(select colum1,colum2...columN from tableA ) union (select colum1,colum2...columN from tableB )

             或 (select colum1,colum2...columN from tableA ) union all (select colum1,colum2...columN from tableB );

    union语句注意事项:

             1.通过union连接的SQL它们分别单独取出的列数必须相同;

             2.不要求合并的表列名称相同时,以第一个sql 表列名为准;

             3.使用union 时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用 union 进行合并,而是通常采用union all 进行合并;

             4.被union 连接的sql 子句,单个子句中不用写order by ,因为不会有排序的效果。但可以对最终的结果集进行排序;

               (select id,name from A order by id) union all (select id,name from B order by id); //没有排序效果

               (select id,name from A ) union all (select id,name from B ) order by id; //有排序效果

    案例解释:将a表和b表合并,表结构如下:

              

    采用 union 全连接:

    union会自动将完全重复的数据去除掉,a、b表中"c"的值都为15,所以只显示一行。

    采用 union all 全连接:

    union all会保留那些重复的数据;

    左右连接练习题:

    根据给出的表结构按要求写出SQL语句。t 表(即Team表)和 m 表(即Match表) 的结构如下:

         

    t 表(即Team表)和 m 表(即Match表) 的内容如下:

             

    t 表和 m 表下载地址

    m 表(即Match表) 的 hostTeamID 与 guestTeamID 都与 t 表(即Team表) 中的 teamID 关联。请查出 2006-6-1 到2006-7-1之间举行的所有比赛,并且用以下形式列出: 拜仁   2:0  不来梅  2006-6-21

    ===============================================================================

    解决方案:

    第一步:先以 m 表左连接 t 表,查出 m 表中 hid 这列对应的比赛信息:

    SELECT m.mid,t.tname,m.mres,m.matime as time FROM m LEFT JOIN t ON t.tid = m.hid;

    查询结果记为结果集 t1 ,t1 表如下:

    第二步:先以 m 表左连接 t 表,查出 m 表中 gid 这列对应的比赛信息:

    SELECT m.mid,t.tname,m.mres,m.matime FROM m LEFT JOIN t ON t.tid = m.gid;

    查询结果记为结果集 t2 ,t2 表如下:

    第三步:以结果集 t1 为基础左连接查询结果集 t2,查询条件为两者比赛序号(mid)相同。

    SELECT t1.tname,t1.mres,t2.tname,t1.time FROM 
    (SELECT m.mid,t.tname,m.mres,m.matime as time FROM m LEFT JOIN t ON t.tid = m.hid) 
    as t1 
    LEFT JOIN 
    (SELECT m.mid,t.tname,m.mres,m.matime as time FROM m LEFT JOIN t ON t.tid = m.gid) 
    as t2 
    ON t1.mid = t2.mid WHERE t1.time BETWEEN '2006-06-01' AND '2006-07-01';

    查询结果如下:

    全连接练习题:

    A表和B表结构如下,请将两表合并:

                

    合并要求:A表中a:5,B表中a:5,因此合并后表中a对应的值为10;要求查出的结果样本如下:

    采用 union all 全连接,然后使用from 子查询:

    SELECT id,SUM(num) as num FROM ((SELECT id,num FROM a) UNION ALL(SELECT id,num FROM b)) as tb GROUP BY id;
    

     

     

    展开全文
  • sql连接查询

    千次阅读 2019-02-27 09:59:27
    一、准备工作: 创建数据表并填写信息  class表:    student表:  ...其中通过某个字段使用=运算符连接两个表的链接 也叫做 等值连接。  如下: select * from class c inner join studen...

    一、准备工作:
    创建数据表并填写信息 
    class表: 
     è¿éåå¾çæè¿°
    student表: 

    è¿éåå¾çæè¿°
    二、详解
    1、内链接
    INNER JOIN 用于取得两个表中存在连接匹配关系的记录(例如:某一列相等)。通常配合比较运算符(=或<>)一起使用。其中通过某个字段使用=运算符连接两个表的链接 也叫做 等值连接。 
    如下:

    select * from class c inner join student s on s.class_id=c.id;
    è¿éåå¾çæè¿°
    补充: 
    (1)、where 连接多个表也属于内连接,在数据库中被称为隐性内链接。inner join被称为显性内连接。

    select * from class c,student s where s.class_id=c.id;
    上面的where语句输出结果和inner join一样。

    (2)、自然连接是一种特殊的等值连接,数据库内部会将两个表通过共有的字段等值连接并且去掉两个表重复的字段。

         首先来看自然连接的定义:

          自然连接:是一种特殊的等值连接,它要求两个关系进行比较的分量必须是相同的属性组,并且在结果集中将重复属性列去掉。

          一个简单的例子,将下列关系R和S进行自然连接:

    R:

    A    B     C

    a    b     c

    b    a     d

    c    d     e

    d    f     g

    S:

    A    C    D

    a    c    d

    d    f    g

    b    d    g

          首先要对两个关系中相同属性组的分量进行比较,即比较R.A,R.C和S.A,S.C。 显然在R中只有第一行和第二行满足条件,因此进行连接得到结果:

    A    B    C    D

    a    b    c    d

    b    a    d    g

          再来看一道2008年软件设计师考试的题目:

          若关系R、S如下所示,则R与S自然连接后的属性列数和元组个数分别为()

    R:

    A    B    C    D

    a    b    c    d

    a    c    d    c

    a    d    g    f

    a    b    g    f

    S:

    C    D

    c    d

    g    f

       分析,首先进行比较,容易得出R中有三个元组(即三行,1、3、4行)符合条件,所以元组个数为3,再然后去掉重复的列,显然仍然剩下A、B、C、D四个列。
     

    (3)、笛卡尔积是两个表每一个字段相互匹配,去掉where 或者 inner join的等值 得出的结果就是笛卡尔积。笛卡尔积也等同于交叉连接。

    2、外连接
    外连接分为左外连接、右外连接、全外链接三种。 
    左外连接: 
    包括左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

    select * from student s left join class c on s.class_id=c.id;
    è¿éåå¾çæè¿°


    右外连接: 
    包括右表的所有行,而不仅仅是联接列所匹配的行。如果右表的某行在左表中没有匹配行,则在相关联的结果集行中左表的所有选择列表列均为空值。

    全外链接: 
    左外连接和右外连接的并集。

    3、联合链接
    union取左右表的并集。

    select * from student where class_id=1 union select * from student where class_id=2;

    è¿éåå¾çæè¿°

     

    展开全文
  • 连接查询

    千次阅读 2018-05-30 10:07:34
    连接查询连接查询:将多张表(可以大于2张)进行记录的连接(按照某个指定的条件进行数据拼接)。最终结果:记录数有可能变化,字段数一定会增加(至少两张表的合并)。 连接查询会产生笛卡尔积,假设集合A={a,b},...

    连接查询

    连接查询:将多张表(可以大于2张)进行记录的连接(按照某个指定的条件进行数据拼接)。最终结果:记录数有可能变化,字段数一定会增加(至少两张表的合并)。

     

    连接查询会产生笛卡尔积,假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。可以扩展到多个集合的情况。那么多表查询产生这样的结果并不是我们想要的,那么怎么去除重复的、不想要的记录呢?当然是通过条件过滤。通常要查询的多个表之间都存在关联关系,那么就通过关联关系去除笛卡尔积。

    你能想像到emp和dept表连接查询的结果么?emp一共14行记录,dept表一共4行记录,那么连接后查询出的结果是56行记录。但你只是想在查询emp表的同时,把每个员工的所在部门信息显示出来,那么就需要使用主外键来去除无用信息了,即使用主外键关系去除。

     

    连接查询的分类:内连接外连接自然连接交叉连接

    内连接

    内连接:[inner] join,从左表中取出每一条记录,去右表中与所有的记录进行匹配,匹配必须是某个条件在左表中与右表中相同,最终才会保留结果,否则不保留。

     

    基本语法:

    左表 [inner] join 右表 on 左表.字段 = 右表.字段;

    on表示连接条件:条件字段就是代表相同的业务含义(如my_student.c_idmy_class.id),大多数情况下为两张表中的主外键关系。

     

    什么是内连接?内连接的关键字是什么?

    答:仅将两个表中满足连接条件的行组合起来作为结果集,称为内连接。在内连接中,只有在两个表中匹配的行才能在结果集中出现。关键字:[inner] join ... on

     

    外连接

    外连接:outer join,以某张表为主,取出里面的所有记录,然后每条与另外一张表进行连接,不管能不能匹配上条件,最终都会保留。能匹配,正确保留;不能匹配,其它表的字段都置空(null)。

     

    外连接分为两种:是以某张表为主,有主表

    left join:左外连接(左连接),以左表为主表

    right join:右外连接(右连接),以右表为主表

     

    基本语法:

    左表 left/right join 右表 on 左表.字段 = 右表.字段;

    on表示连接条件:条件字段就是代表相同的业务含义(如my_student.c_idmy_class.id),大多数情况下为两张表中的主外键关系。

     

    什么是左外连接?左外连接的关键字是什么?

    答:在内连接的基础上,还包含左表中所有不符合条件的数据行,并在其中的右表列填写NULL。关键字:left join ... on。

    什么是右外连接?右外连接的关键字是什么?

    答:在内连接的基础上,还包含右表中所有不符合条件的数据行,并在其中的左表列填写NUL。关键字:right join ... on。

     

    左表为主表,最终记录数至少不少于左表已有的记录数。

     

     

    右表为主表,最终记录数至少不少于右表已有的记录数。

    虽然左连接和右连接有主表差异,但是显示的结果是:左表的数据在左边,右表的数据在右边。左连接和右连接可以互转。

    自然连接

    自然连接:natural join,自然连接,就是自动匹配连接条件,系统以字段名字作为匹配模式(同名字段就作为条件,多个同名字段就都作为条件)。

     

    自然连接:可以分为自然内连接自然外连接

     

    自然内连接:左表 natural join 右表;

     

     

    自然外连接:左表 natural left/right join 右表;

     

     

    其实,内连接和外连接都可以模拟自然连接,使用同名字段,合并字段。

    左表 left/right/inner join 右表 using(字段名)--使用同名字段作为连接条件,自动合并条件

     

    交叉连接

    交叉连接:cross join,从一张表中循环取出每一条记录,每条记录都去另外一张表进行匹配,匹配一定保留(没有条件匹配),而连接本身字段就会增加(保留),最终形成的结果叫做:笛卡尔积。

     

    基本语法:左表 cross join 右表; <==>  from 左表,右表;

     

    笛卡尔积没有意义:应该尽量避免(交叉连接没用)

    交叉连接存在的价值:保证连接这种结构的完整性。

     

    【补充】

    连接查询心得

    连接查询不限于两张表,连接查询也可以是三张、四张,甚至N张表的连接查询。通常连接查询不可能需要整个笛卡尔积,而只是需要其中一部分,那么这时就需要使用条件来去除不需要的记录。这个条件大多数情况下都是使用主外键关系去除。

    两张表的连接查询一定有一个主外键关系,三张表的连接查询就一定有两个主外键关系,所以在大家不是很熟悉连接查询时,首先要学会去除无用笛卡尔积,那么就是用主外键关系作为条件来处理。如果两张表的查询,那么至少有一个主外键条件,三张表连接至少有两个主外键条件,N张表连接至少有N-1个主外键条件

     

    1. 交叉连接查询(基本不会使用-得到的是两个表的乘积)

    语法:select * from A,B;

     

    2. 内连接查询(使用的关键字 inner join  -- inner可以省略)

    隐式内连接:select * from A,B where 条件;

    显示内连接:select * from A inner join B on 条件;

     

    3. 外连接查询(使用的关键字 outer join  --outer可以省略)

    左外连接:left outer join

    select * from A left outer join B on 条件;

     

    右外连接:right outer join

    select * from A right outer join B on 条件;

     


    什么时候使用连接查询?什么时候使用子查询?

    答:查询的是两张表及以上的信息,或者查询的是两个字段及以上的信息,这两个字段不在同一张表内。有时候是两个字段,有时候是两张表,总之是两个,而不是一个。

    子查询一般查的是一个字段的信息或一张表里面的信息,只是给的条件并不能直接映射到这张表,需要推出来。当没有给出任何条件时,查询的是两张表综合在一起的信息,并且两张表是主外键相关的。

    内连接就是前面所讲的连接查询,只是前面的省略了inner关键字而已。

     

    -- 多表查询方法要用distinct关键字去除重复数据 )(答案有争议)

    select distinct i.*

    from ajia_cart_item c,ajia_user u, ajia_item i

    where u.username='lisi' and c.user_id=u.id and c.item_id=i.id;

    【解析】

    这个题很重要,我研究了一个小时,总结如下:

    什么时候用子查询呢?查询的是一个字段,但是给的条件无法直接作用到这个条件上,需要中间推几张表才能作用上这个字段什么时候用多表查询呢?查询的是两个字段,但是这两个字段不在同一个表中,在两张表或三张表中,并且这几张表间具有主外键关联拿上面的题来说,lisi用户的购物车商品信息,它最终要查的是商品信息,一个字段,只是它给的条件无法直接用在这上面,需要推,怎么推呢?

    我知道用户的usernamelisi,通过ajia_user表,我可以得到用户编号,知道了用户编号,我通过ajia_cart_item这个表可以得到商品编号知道了商品编号,我就可以通过ajia_item表得到商品的信息。所以,我选择用子查询的方法。但是老师用的是多表查询的方法,这就出了一个问题,查出来的数据有大量的重复,所以我们要用distinct关键字来去除重复数据,不建议使用,或者直接就不对

     

    例子:

    1. 查询所有用户的订单信息包括没有下过订单的用户

    select u.id,u.username,o.* from ajia_user u left join ajia_order o on u.id=o.user_id;

     

    select u.id,u.username,o.* from ajia_user u,ajia_order o where u.id=o.user_id;(错误)

    -- 过滤掉了没有下订单的用户

     

    2. 查询所有用户的下订单数量

    -- 左外连接

    select u.id,u.username,count(o.order_id) 订单数量

    from ajia_user u left join ajia_order o on u.id=o.user_id

    group by u.id;

     

    -- 右外连接

    select u.id,u.username,count(o.order_id) 订单数量

    from ajia_order o right join ajia_user u

    on u.id=o.user_id

    group by u.id;

     

    3. 查找用户编号为14的商品收藏夹

    select u.id,u.username,c.*

    from ajia_user u left join ajia_collect_item c

    on u.id=c.user_id

    where u.id=14;

     

    4. 统计所有用户收藏夹中的商品个数

    select u.id,u.username,count(c.id)

    from ajia_user u left join ajia_collect_item c

    on u.id=c.user_id

    group by u.id;

     

    面试题:

    部门表(deptcode:部门编号,deptname:部门名称)

    员工表(humancode:员工编号,humanname:员工姓名,deptcode:部门编号)

    考核表(resultcode:结果编号,humancode:人员编号,kpicode:考核结果---分 不合格,合格,优秀)

    1. 统计各部门合格的人数;

    2. 统计考核结果情况;

    3. 统计部门考核结果情况;

    答:

    1.

    select count(*),C.deptname
    from 考核表 A
    inner join 员工表 B on A.humancode=B.humancode
    inner join 部门表 C on B.deptcode=C.deptcode
    where A.kpicode<>'不合格'
    group by ,C.deptname;

    2.

    select A.*,B.*,C.*
    from 考核表 A
    inner join 员工表 B on A.humancode=B.humancode
    inner join 部门表 C on B.deptcode=C.deptcode;

    3.

    select count(*),A.kpicode,C.deptname
    from 考核表 A
    inner join 员工表 B on A.humancode=B.humancode
    inner join 部门表 C on B.deptcode=C.deptcode
    group by ,C.deptname,A.kpicode;

     

     

     

    展开全文
  • SQL的四种连接查询

    2019-05-08 13:40:31
    连接 1.内连接(inner join 或 join) 内连接是等值连接,它使用“=、>、<、<>”等运算符根据每个表共有的列的值匹配两个表中的行 查询语句: select * from T_Person inner join T_Card on T_...
  • 复习(四)--- 连接查询

    2020-03-02 16:34:21
    连接: INNER JOIN 关键字连接表 ON 过滤条件 只显示匹配条件的记录 SELECT t1.s_id, s_name, f_name, f_price FROM t1 INNER JOIN t2 ON t1.s_id = t2.s_id; 外连接: LEFT JOIN:返回左表的所有记录,包括不...
  • 1.又称多表查询,当查询的字段来自多个表时,就会用到连接查询 “.”运算符取出各表中的数据 这样可以避免笛卡尔积的现象 二、sql92标准 1.等值连接 beauty.boyfriend_id与boys.d要等值才能连接成功 ①.为表...
  • MSSQL之五 连接查询与子查询

    千次阅读 2016-05-16 19:06:28
    在一个高级的数据库中,被浏览的数据可以被存储在多个表中。...本章讨论如何通过应用各种类型的连接,例如内连接,外连接,交叉连接,等值连接或自连接,来从夺标中查询数据。进一步,它解释如何使用子查询
  • 【MySQL】多表联合查询、连接查询子查询

    万次阅读 多人点赞 2019-06-03 17:08:20
    文章目录
  • 连接查询与子查询

    万次阅读 2017-03-12 13:34:16
    连接查询 连接查询是将两个或多个的表按某个条件连接起来,从中选取需要的数据,连接查询是同时查询两个或两个以上的表的使用的。当不同的表中存在相同意义的字段时,可以通过该字段来连接这几个表。    1.内...
  • 连接查询子查询

    千次阅读 2018-10-07 16:47:57
    常用的多表连接查询  内连接(INNER JOIN) 外连接 左外连接 (LEFT JOIN) 右外连接 (RIGHT JOIN)   内连接  //内连接是查询有相同记录的  内连接使用比较运算符根据每个表的通用列中的值匹配两个表中的...
  • 连接查询子查询区别(待)

    千次阅读 2015-02-06 11:42:37
    对于数据量多的肯定是用连接查询快些,原因:因为子查询会多次遍历所有的数据(视你的子查询的层次而定),而连接查询只会遍历一次。  但是数据量少的话也就无所谓是连接查询还是子查询,视自己的习惯而定。一般...
  • java技术--子查询连接查询比较

    千次阅读 2019-06-05 14:28:41
    1.子查询 1.1. MySQL从4.1版本开始支持子查询,使用子查询进行SELECT语句嵌套查询,可以一次完成很多逻辑上需要多个步骤才能完成的SQL操作 1.2.子查询虽然很灵活,但是执行效率并不高 1.3.执行子查询时,MYSQL需要...
  • SQL——连接查询与子查询

    千次阅读 2018-07-29 12:32:58
    连接查询  交叉连接 等值连接  内连接 外连接  左连接 右连接     笛卡尔积 结果为两个表行数的乘积 交叉连接 结果符合笛卡尔积  语法 cross join 或者 join 或者直接用","   等值...
  • MySQL的连接查询子查询

    千次阅读 2016-03-07 21:53:15
    在校招的各种银行类笔试题中,数据库的题占据了绝大部分,其中数据库的查询考察的很多,而且尤其是各种连接查询子查询,嵌套查询等等,所以我打算总结总结连接查询子查询等知识点 1.连接查询分类 (1)内连接...
  • 多表连接查询与子查询

    万次阅读 2013-10-02 14:32:41
    多表连接查询子查询 一、连接查询 1.1使用无连接规则连接两表 所谓无连接规则连接,就是指两个表的SELECT语句中不设置任何连接条件,这样的到的链接结果是第一个表的每一行都会和第二个表的所有行进行连接,即...
  • 数据库表的连接查询子查询

    千次阅读 2017-02-17 21:31:34
    连接查询包括:交叉连接,内连接,外连接(左外连,右外连)等。 1.交叉连接:一对多,获取两个表相乘后的数据行。 语法:select * from 表1 cross join 表2; 例如:select * from offices cross join users; ...
  • 今天碰到个有意思的面试题,主要是被第2小题难住了(和同事灵感碰撞才把问题解决),所以做个demo记录一下。 1、首先我们分别创建 tab_user_info 和 tab_dict_sex 数据表: CREATE TABLE `tab_user_info` ( ...
  • [quote] 我们进行数据查询的时候极少有可能就在一张表里就能得到想要的数据,不可避免得会用到子查询或者连接查询,很多时候我们很轻松自然得会想到子查询的方法,但是子查询往往效率比较低,而转换成连接查询是一种...
  • 问题:连接查询子查询区别和连接及优劣? 子查询的定义: 1.子查询就是把一次查询的结果作为条件放到另一个查询中。(两张表之间不需要有关联字段) 连接查询的定义: 连接查询:通过连接运算符实现多个表的查询...

空空如也

1 2 3 4 5 ... 20
收藏数 1,268,436
精华内容 507,374
关键字:

连接查询