精华内容
下载资源
问答
  • SQL语句多表连接查询语法

    万次阅读 2019-07-28 09:32:13
    总结:内连接就是两个表的交集 ,左外连接就是左边表加两表交集 ,右外连接就是右边表加两表交集 一、外连接 1.左连接 left join 或 left outer join SQL语句:select * from student left join score on ...

     

     

    总结:内连接就是两个表的交集 ,左外连接就是左边表加两表交集 ,右外连接就是右边表加两表交集

     

     

    一、外连接

    1.左连接  left join 或 left outer join

    SQL语句:select * from student left join score on student.Num=score.Stu_id;

    2.右连接  right join 或 right outer join

    SQL语句:select * from student right join score on student.Num=score.Stu_id;

    3.完全外连接  full join 或 full outer join

    SQL语句:select * from student full join score on student.Num=score.Stu_id;

    通过上面这三种方法就可以把不同的表连接到一起,变成一张大表,之后的查询操作就简单一些了。

    交叉连接查询,这种查询方式基本不会使用,原因就是这种查询方式得到的是两个表的乘积(笛卡儿集)

    语法就是select * from a,b;则尽量不使用此语句,产生的结果过于繁琐。

     

    内连接查询,可以有效的去除笛卡尔集现象

    内连接查询分为两类:

     

    二、内连接 

    join 或 inner join

    SQL语句:select * from student inner join score on student.Num=score.Stu_id;

    此时的语句就相当于:select * from student,score where student.ID=course.ID;

     

    内连接查询分为两类:

    隐式内连接

    select * from A,B where 条件                                          隐式连接使用别名:

    select * from A 别名1,B 别名2 where 别名1.xx=别名2.xx;

    显示内连接

    select * from A inner join B on 条件 (inner可以省略)  显示连接使用别名:

    select * from A 别名1 inner join B 别名2 on 别名1.xx=别名2.xx

    举例:

    三、交叉连接

    cross join,没有where指定查询条件的子句的交叉联接将产生两表的笛卡尔积。

    SQL语句:select * from student cross join score;

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • SQL 连接查询语法及使用

    千次阅读 2014-03-26 09:35:17
    一、交叉连接(cross join) 交叉连接(cross join):有两种,显式的和隐式的,不带on子句,返回的是两表的乘积,也叫笛卡尔积。 例如:下面的语句1和语句2的结果是相同的。 语句1:隐式的交叉连接,没有cross ...
    一、交叉连接(cross join)
    

    交叉连接(cross join):有两种,显式的和隐式的,不带on子句,返回的是两表的乘积,也叫笛卡尔积。

    例如:下面的语句1和语句2的结果是相同的。

    语句1:隐式的交叉连接,没有cross join。

    select o.id, o.order_number, c.id, c.name

    from orders o , customers c

    where o.id=1;

    语句2:显式的交叉连接,使用cross join。

    select o.id,o.order_number,c.id,c.name

    from orders o cross join customers c

    where o.id=1;

    语句1和语句2的结果是相同的,查询结果如下:

    二、内连接(inner join)

    内连接(inner join):有两种,显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行。(所谓的链接表就是数据库在做查询形成的中间表)。

    例如:下面的语句3和语句4的结果是相同的。

    语句3:隐式的内连接,没有inner join,形成的中间表为两个表的笛卡尔积。

    select o.id,o.order_number,c.id,c.name

    from customers c, orders o

    where c.id=o.customer_id;

    语句4:显示的内连接,一般称为内连接,有inner join,形成的中间表为两个表经过on条件过滤后的笛卡尔积。

    select o.id,o.order_number,c.id,c.name

    from customers c inner join orders o on c.id=o.customer_id;

    语句3和语句4的查询结果:

    三、外连接(outer join):

    ???? 外连不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。外连接分三类:左外连接(left outer join)、右外连接(right outer join)和全外连接(full outer join)。

    三者的共同点是都返回符合连接条件和查询条件(即:内连接)的数据行。不同点如下:

    左外连接还返回左表中不符合连接条件单符合查询条件的数据行。

    右外连接还返回右表中不符合连接条件单符合查询条件的数据行。

    全外连接还返回左表中不符合连接条件单符合查询条件的数据行,并且还返回右表中不符合连接条件单符合查询条件的数据行。全外连接实际是上左外连接和右外连接的数学合集(去掉重复),即“全外=左外union 右外”。

    说明:左表就是在“(left outer join)”关键字左边的表。右表当然就是右边的了。在三种类型的外连接中,outer 关键字是可省略的。

    下面举例说明:

    语句5:左外连接(left outer join)

    select o.id,o.order_number,o.customer_id,c.id,c.name

    from orders o left outer join customers c on c.id=o.customer_id;

    语句6:右外连接(right outer join)

    select o.id,o.order_number,o.customer_id,c.id,c.name

    from orders o right outer join customers c on c.id=o.customer_id;

    注意:where条件放在on后面查询的结果是不一样的。例如:

    语句7:where条件独立。

    select o.id,o.order_number,o.customer_id,c.id,c.name

    from orders o left outer join customers c on c.id=o.customer_id

    where o.order_number<>'mike_order001';

    语句8:将语句7中的where条件放到on后面。

    select o.id,o.order_number,o.customer_id,c.id,c.name

    from orders o left outer join customers c on c.id=o.customer_id and o.order_number<>'mike_order001';

    从语句7和语句8查询的结果来看,显然是不相同的,语句8显示的结果是难以理解的。因此,推荐在写连接查询的时候,on后面只跟连接条件,而对中间表限制的条件都写到where子句中。

    语句9:全外连接(full outer join)。

    select o.id,o.order_number,o.customer_id,c.id,c.name

    from orders o full outer join customers c on c.id=o.customer_id;

    注意:mysql是不支持全外的连接的,这里给出的写法适合oracle和db2。但是可以通过左外和右外求合集来获取全外连接的查询结果。下图是上面sql在oracle下执行的结果:

    语句10:左外和右外的合集,实际上查询结果和语句9是相同的。

    select o.id,o.order_number,o.customer_id,c.id,c.name

    from orders o left outer join customers c on c.id=o.customer_id

    union

    select o.id,o.order_number,o.customer_id,c.id,c.name

    from orders o right outer join customers c on c.id=o.customer_id;

    语句9和语句10的查询结果是相同的,如下:

    四、联合连接(union join):

    ????? 这是一种很少见的连接方式。oracle、mysql均不支持,其作用是:找出全外连接和内连接之间差异的所有行。这在数据分析中排错中比较常用。也可以利用数据库的集合操作来实现此功能。

    语句11:联合查询(union join)例句,还没有找到能执行的sql环境。

    select o.id,o.order_number,o.customer_id,c.id,c.name

    from orders o union join customers c on c.id=o.customer_id

    语句12:语句11在db2下的等价实现。还不知道db2是否支持语句11呢!

    select o.id,o.order_number,o.customer_id,c.id,c.name

    from orders o full outer join customers c on c.id=o.customer_id

    except

    select o.id,o.order_number,o.customer_id,c.id,c.name

    from orders o inner join customers c on c.id=o.customer_id;

    语句13:语句11在oracle下的等价实现。

    select o.id,o.order_number,o.customer_id,c.id,c.name

    from orders o full outer join customers c on c.id=o.customer_id

    minus

    select o.id,o.order_number,o.customer_id,c.id,c.name

    from orders o inner join customers c on c.id=o.customer_id;

    查询结果如下:

    五、自然连接(natural inner join):

    ???? 说真的,这种连接查询没有存在的价值,既然是sql2标准中定义的,就给出个例子看看吧。自然连接无需指定连接列,sql会检查两个表中是否相同名称的列,且假设他们在连接条件中使用,并且在连接条件中仅包含一个连接列。不允许使用on语句,不允许指定显示列,显示列只能用*表示(oracle环境下测 试的)。对于每种连接类型(除了交叉连接外),均可指定natural。下面给出几个例子。

    语句14:

    select *

    from orders o natural inner join customers c;

    语句15:

    select *

    from orders o natural left outer join customers c;

    语句16:

    select *

    from orders o natural right outer join customers c;

    语句17:

    select *

    from orders o natural full outer join customers c;

    六、sql查询的基本原理:两种情况介绍。

    第一、?? 单表查询:根据where条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据select的选择列选择相应的列进行返回最终结果。

    第二、?? 两表连接查询:对两表求积(笛卡尔积)并用on条件和连接类型进行过滤形成中间表;然后根据where条件过滤中间表的记录,并根据select指定的列返回查询结果。

    第三、?? 多表连接查询:先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据where条件过滤中间表的记录,并根据select指定的列返回查询结果。

    理解sql查询的过程是进行sql优化的理论依据。

    七、on后面的条件(on条件)和where条件的区别:

    on条件:是过滤两个链接表笛卡尔积形成中间表的约束条件。

    where条件:在有on条件的select语句中是过滤中间表的约束条件。在没有on的单表查询中,是限制物理表或者中间查询结果返回记录的约束。在两表或多表连接中是限制连接形成最终中间表的返回结果的约束。

    从这里可以看出,将where条件移入on后面是不恰当的。推荐的做法是:

    on只进行连接操作,where只过滤中间表的记录。

    八、总结

    连接查询是sql查询的核心,连接查询的连接类型选择依据实际需求。如果选择不当,非但不能提高查询效率,反而会带来一些逻辑错误或者性能低下。下面总结一下两表连接查询选择方式的依据:

    1、 查两表关联列相等的数据用内连接。

    2、col_l是col_r的子集时用右外连接。

    3、col_r是col_l的子集时用左外连接。

    4、col_r和col_l彼此有交集但彼此互不为子集时候用全外。

    5、 求差操作的时候用联合查询。

    多个表查询的时候,这些不同的连接类型可以写到一块。例如:

    select t1.c1,t2.cx,t3.cy

    from tab1 t1

    ?????? inner join tab2 t2 on (t1.c1=t2.c2)

    ?????? inner join tab3 t3 on (t1.c1=t2.c3)

    ?????? left outer join tab4 on(t2.c2=t3.c3);

    where t1.x >t3.y;

    展开全文
  • outer可以省略不写,下边的右连接和全连接也一样:左外连接的意思是,以left join左边的表中的数据为基准,即左边的表中有的必须要全部显示出来,如下图:这里第一个查询中,company表在左边,因此就以company为基准...
    1、左外连接left outer join或者left jion,outer可以省略不写,下边的右连接和全连接也一样:


    左外连接的意思是,以left join左边的表中的数据为基准,即左边的表中有的必须要全部显示出来,如下图:


    这里第一个查询中,company表在左边,因此就以company为基准,所以显示的结果中除了depart_id相同的6条数据外,还把company中存在的另外一条也显示出来。

    而第二个查询中,emp在左边,就以emp为基准,因此显示的结果中除了depart_id相同的6条外,还把emp中存在的另外一条也显示了出来。

    2、右外连接right join:


    单从上边的两个查询的查询来看,除开字段顺序的不同外,和左外连接的操作是很相似的。只不过一个是以left join左边的表为基准,而另一个是以right join右边的表为基准。(有朋友说left join的性能比较好,这个暂时先不管,等到性能测试方面的时候再说)

    3、全连接full join,这个和上边略有不同的是,语法中不用在join后边使用on,直接select 字段名 from tablename1 full join tablename2;而它 的结果也会出现之前提到的笛卡尔积现象,也就是显示(表1的字段数加上表二的字段数)个字段,显示(表一的记录数乘以表二的记录数)个记录;


    展开全文
  • 外连接语法

    2010-01-28 09:19:00
    平时习惯了Oracle的连接语法,每次看到join这种格式的,都要想半天。还是把它列一下,方便自己下次用。 SELECT table1.column, table2.columnFROM table1[CROSS JOIN table2] |[NATURAL JOIN table2] |[JOIN ...

    平时习惯了Oracle的连接语法,每次看到join这种格式的,都要想半天。还是把它列一下,方便自己下次用。

     

    SELECT    table1.column, table2.column
    FROM    table1
    [CROSS JOIN table2] |
    [NATURAL JOIN table2] |
    [JOIN table2 USING (column_name)] |
    [JOIN table2
      ON(table1.column_name = table2.column_name)] |
    [LEFT|RIGHT|FULL OUTER JOIN table2
      ON (table1.column_name = table2.column_name)];

     

    1. CROSS JOIN 比较简单。

    2. NATURAL JOIN 是自动把两个表中,名称相同的字段做等值比较。 (同名的字段,数据类型也要一样)

    3. USING 是指定某个字段做等值比较。

    4. ON 就是自定义的比较条件了。

    5. 外连接加了左右,是因为这个语法,决定了表出现的顺序。FROM后面的,是left表,join后面的,是right表。如果你想把from后面的表的所有数据都查询出来,不论是否满足条件,就用left outer join。同理,查询table2的所以数据,用right outer join。同时有需求,就用full outer join。

     

    这个full outer join可不能用 where table1.column_name(+) = table2.column_name(+) 代替啊,会报错的。

     

    展开全文
  • 外连接查询

    千次阅读 2018-06-23 08:53:07
    外连接查询Ø 普通连接操作只输出满足连接条件的元组Ø 外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出a) 左连接连接是指将左表中的所有数据分别与右表中的每条数据进行连接组合,返回...
  • 外连接:不仅将两个表中满足条件的数据查询出来,也将不满足条件的左表中的数据查询出来 右外连接:不仅将两个表中满足条件的数据查询出来,也将不满足条件的右表中的数据查询出来 满外连接:(oracle中支持) ...
  • 不管是面试还是实际开发,SQL的关联查询总是用到最多的,这六种关联查询你是否明白他们的区别呢? 下面我做一个小小的例子,一看便知:   创建两张表,table1和table2 drop table table1; drop table table2; ...
  • 多表连接语法3.1sql92语法3.2sql99语法4.练习 1.含义 当查询中涉及到多个表的字段,需要使用多表查询 select 字段1,字段2… from 表1,表2… 笛卡尔积:当查询多个表时,没有添加有效的连接条件,导致多个表所有...
  • 连接查询 连接查询:将多张表连到一起进行查询(会导致记录数行和字段数列发生改变) 连接查询的意义 在关系型数据库设计过程中,实体(表)与实体之间是存在很多联系的。...外连接:左外连接(左连接)和右...
  • 文章目录分组函数功能分类函数特点:分组函数的使用1.简单使用2.参数支持哪些类型注意,此时得出数据已经没意义了,即使没报错,拿到这些数据无意义的...查询部门编号为90的员工个数分组查询语法:注意:特点:注意点:
  • 二、左连接、右连接、内连接语法 ①左连接 语法:select 列1,列2,列N from tableA left join tableB on tableA 列=tableB[此处表连接成一张大表,完全当成普通的表看] where group by,having…..照常...
  • SQL 99的连接查询与SQL 92 的连接查询原理基本相似,不同的是SQL 99 连接查询的可读性更强——查询用的多个数据表显式使用xxx join连接,而不是直接依次排列在from之后,from后只需要放一个数据表;连接条件不再放在...
  • hive查询语法

    千次阅读 2019-11-28 20:28:17
    (1)全表查询 (2)选择特定列查询 (3)列别名 二、常用函数 三、LIMIT语句 四、WHERE语句 五、比较运算符(BETWEEN/IN/ IS NULL) 六、LIKE和RLIKE 七、逻辑运算符(AND/OR/NOT) 八、分组 (1)GROUP ...
  • 注:下边的几个连接查询涉及到笛卡尔积的概念,即如果存在两张表,第一张记录数为n条,另一张表的记录数为m条,那么笛卡尔积得出的记录数就是n*m条;如果第一张表的字段数为a个,另一张的字段数为
  • MySQL 连接查询 1.使用连接查询的场景 将多张表进行记录的连接查询(按照某个字段指定的条件进行数据的拼接); 进行数据的拼接(两张表的内容显示在一个结果表中 使用连接查询) 最终的结果是:记录数有可能变化,...
  • sql 表连接基本语法

    千次阅读 2015-07-30 17:37:24
    SQL连接可以分为内连接外连接、交叉连接。1.内连接:内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。1.1 select * from Table1 as a, Table2 as b where a.id= b.id1.2 select *...
  • 外连接主要用来解决什么问题? 在某些情况下,我们需要把条件不成立的记录仍然包含在最后的结果中,就需要使用外连接来实现...左外连接语法是什么? 以上图为例,查询A表中的数据,语句为:select from tableA A
  • 这两天把MySQL复习了一下,当时各种连接这部分学...2. sql99标准:支持内连接链接(只支持左和右,不支持全),交叉连接 按类型分: 1. 内连接: a .等值连接 b. 非等值连接 c. 自连接 2. 链接: a.
  • 相比常用的精确查询(内连接,inner join),外连接相比不好理解。但在实际工作中,用的还是很多的,深刻理解外连接成为必须。 看到一篇帖子,清晰易懂,转发一下。 原贴链接:...
  • oracle 基本语句练习(四) SQL1999 语法规范 cross join ,等值连接,不等值连接,自连接外连接
  • Lucene查询语法详解

    千次阅读 2016-07-04 12:01:52
    Lucene提供了丰富的API来组合定制你所需要的查询器,同时也可以利用Query Parser提供的强大的查询语法解析来构造你想要的查询器。本文章详细的介绍了Lucene的查询语法。通过Java语法分析器把一个查询字符串解析成 ...
  • PHP7 连接 MongoDB 语法如下

    千次阅读 2016-12-30 14:53:44
    PHP7 连接 MongoDB 语法如下: $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017"); 插入数据 将 name 为"菜鸟教程" 的数据插入到 test 数据库的 runoob 集合中。 php $bulk = new ...
  • 一、连接查询简介  连接查询中用来连接连个表的条件称为连接条件或连接谓词。其形式为: [].列名1>连接运算符>[].列2>   常见的连接运算符包括  1、比较运算符:=、>、=、  2、逻辑运算符:not、and、or。...
  • Oracle基本查询语法 本文含:多表查询/子查询/集合运算 1.多表查询 主要就是连接条件: nge表至少有n-1个连接条件 1.1连接类型: 1. 等值连接 2. 不等值连接 3. 外连接 4. 自连接 举例: 等值连接查询员工信息...
  • 常见的高级查询包括多表连接查询、内连接查询外连接查询与组合查询等,今天我们先来学习最常用、面试也很容易被问到的连接查询。 我们今天以一个简单的学生信息表(学生ID、学生姓名、学生性别)与一个学生成绩表...
  •  在关系型数据库连接查询中有以下几种查询方式:1,内连接;2,左连接;3,右连接;4,全连接。下面说明各种连接查询方式的使用及区别。 二,使用及区别   1.内连接  利用内连接可获取两表的公共部分的记录,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 658,378
精华内容 263,351
关键字:

外连接查询的语法