美文网首页
MySQL多表连接查询(摘抄)

MySQL多表连接查询(摘抄)

作者: shadow雨轩 | 来源:发表于2019-06-13 14:58 被阅读0次

连接(join):将一张表中的行按照某个条件(连接条件)和另一张表中的行连接起来形成一个新行的过程。

根据连接查询返回的结果,分3类:

    内连接(inner join)

    外连接(outer join)

    交叉连接(cross join)

根据连接条件所使用的操作符,分2类:

    相等连接(使用等号操作符)

    不等连接(不使用等号操作符) 

标准的连接语法:

注意:

在连接查询中,一个列可能出现在多张表中,为了避免引起歧义,通常在列名前面加上表名或表别名作为前缀(例:s.sid、x.sid)---使用表别名作为前缀,可以使得SQL代码较短,使用的内存更少(例:stu s,xuanke as x)。

内连接inner join

只返回两张表中所有满足连接条件的行,即使用比较运算符根据每个表中共有的列的值匹配两个表中的行。(inner关键字是可省略的)

①传统的连接写法:

  在FROM子句中列出所有要连接的表的名字(进行表别名),以逗号分隔;

  连接条件写在WHERE子句中;

注意:一旦给表定义了别名,那么原始的表名就不能在出现在该语句的其它子句中

mysql>select s.sname,c.cname,t.tname,x.xuefen

    ->from stu s,tea t,course c,xuanke x

    ->wheres.sid=x.sid and t.tid=x.tid and c.cid=x.cid

②使用on子句(常用):结构清晰明了。

mysql>select s.sname,t.tname,c.cname,x.xuefen

    ->from stu s

    -> join xuanke x

    ->   on s.sid=x.sid

    -> join tea t

    ->   on x.tid=t.tid

    -> join course c->   on c.cid=x.cid;

表之间的关系以JOIN指定,ON的条件与WHERE条件相同。

 ③使用using子句

mysql>select s.sname,t.tname,c.cname,x.xuefen

    ->from stu s

    -> join xuanke x

    ->using(sid)

    -> join tea t

    ->using(tid)

    -> join course c

   ->using(cid);

表之间的关系以join指定,using(连接列)进行连接匹配,类似于on。(相对用的会比较少) 

2、外连接outer join

使用外连接不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。

在MySQL数据库中外连接分两类(不支持全外连接):

左外连接、右外连接。(outer关键字可省略)。

共同点:都返回符合连接条件和查询条件(即:内连接)的数据行

不同点:

左外连接还返回左表中不符合连接条件,但符合查询条件的数据行。(所谓左表,就是写在left join关键字左边的表)

右外连接还返回右表中不符合连接条件,但符合查询条件的数据行。(所谓右表,就是写在right join关键字右边的表)

mysql>select s.sname,x.xuefen

    ->from stu s

    -> left join xuanke x

    -> on s.sid=x.sid

解析:stu表是左表,xuanke表是右表:left join是左连接,stu表中”王五”没有选课,在xueke表中没有数据行,不符合连接条件,返回符合查询条件的数据行,所以xuefen为null。

mysql>select s.sname,x.xuefen

    ->from xuanke x

    -> right join stu s-> on x.sid=s.sid;(用的是右连接的方式)

给连接查询附加条件:

  1、写在WHERE子句中

  2、使用AND和连接条件写在一起

!!!但是:

  对于内连接,两种写法结果相同;

对于外连接,两种写法结果不同。

①先连接后过滤

  select ……from ……

  left join ……

  on 连接条件

where 过滤条件;

②先过滤后连接

  select ……from (select ……from ……where 过滤条件)

  left join ……

  on 连接条件;

3、交叉连接—笛卡尔积

  因为没有连接条件,所进行的表与表间的所有行的连接。

特点:

  ①连接查询没有写任何连接条件

  ②结果集中的总行数就是两张表中总行数的乘积(笛卡尔积)

注意:在实际中,应该要避免产生笛卡尔积的连接,特别是对于大表

https://www.cnblogs.com/geaozhang/p/6753190.html

相关文章

  • MySQL多表连接查询(摘抄)

    连接(join):将一张表中的行按照某个条件(连接条件)和另一张表中的行连接起来形成一个新行的过程。 根据连接查询...

  • 深入浅出MySQL(五)

    多表查询 MySQL中的多表联查 MySQL中多表查询分为三种形式: 笛卡尔积的形式 内连接的形式 外连接的形式 ...

  • 多表联合查询

    MySQL中基本的多表连接查询教程Mysql脚本之家 var tougao="goldensun";var lmn...

  • Mysql多表查询

    Mysql多表查询,知识点包括: 笛卡尔积查询[1] 内连接[^2] 外连接(左外连接、右外连接)[^3] uni...

  • mysql使用 from两表查询与join两表查询区别

    在mysql中,多表连接查询是很常见的需求,在使用多表查询时,可以from多个表,也可以使用join连接连个表这两...

  • MySQL多表连接查询

    多表连接 语法:SELECT table1.column, table2.columnFROM table1,...

  • MySQL多表连接查询

    join多表查询 1.1 语法 1.2 查询一下世界上人口数量小于100w人的城市名,国家名,国土面积 1.3 查...

  • SQL之多表查询

    多表查询 MySQL不支持full join ,可以使用union连接两条查询语句,实现全连接(查询并集)例如:s...

  • SQL语句常用命令整理---多表查询

    多表查詢之关连查询 多表数据连接查询,简称连接查询。本篇我们来一同学习多表连接查询的相关用法,主要內容有: 内连接...

  • MySQL 基础 6 多表查询

    1.1 多表查询的概述 1.1.1 多表查询的分类 1.1.1.1连接查询 交叉连接:cross join交叉连接...

网友评论

      本文标题:MySQL多表连接查询(摘抄)

      本文链接:https://www.haomeiwen.com/subject/dhlsfctx.html