zoukankan      html  css  js  c++  java
  • MySQL的JOIN连接

    MySQL的JOIN

    join的含义跟英文单词"join"一样,连接连接两张表。分为

      内连接:inner join

      外连接

        (1)左外连接(左边的表不加限制):left join

        (2)右外连接(右边的表不加限制):right join

        (3)全外连接(左右表都不加限制):full join(MySQL不支持)

      自连接(同一张表内的连接,可以理解为自己连接自己)

    on字句用于指定连接条件

    如下图:

    表结构:

    create table t_blog
    (
     id int primary key auto_increment,
     title varchar (50),
     typeid int
    );
     
     
    create table t_type
    (
     id int primary key auto_increment,
     name varchar (20)
    );
     

    要理解各种JOIN首先要理解笛卡尔积。笛卡尔积就是将A表的每一条记录与B表的每一条记录强行拼在一起。所以,如果A表有n条记录,B表有m条记录,笛卡尔积产生的结果就会产生n*m条记录。上面的例子,t_blog有10条记录,t_type有5条记录,所以笛卡尔积有50条记录。

    内连接(inner join)

    内连接inner join是最常用的连接操作。从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录。有inner join、join(省略inner)、where(等值连接)、straight_join四种写法。

    select * from t_blog a inner join t_type b on a.typeid=b.id  
    select * from t_blog a join t_type b on a.typeid=b.id
    select * from t_blog a, t_type b where a.typeid=b.id 
    select * from t_blog a STRAIGHT_JOIN t_type b on a.typeid=b.id

    左连接:LEFT JOIN

    左连接left join的含义从笛卡尔积的角度讲,就是先从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录。

    右连接:RIGHT JOIN

    同理右连接right join的含义从笛卡尔积的角度描述,右连接就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上右表中剩余的记录。

    外连接:OUTER JOIN

    外连接就的含义从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录,最后加上右表中剩余的记录。另外MySQL不支持OUTER JOIN,但是我们可以对左连接和右连接的结果做UNION操作来实现。

    USING子句

    MySQL中连接SQL语句中,ON子句的语法格式为:table1.column_name = table2.column_name。当模式设计对联接表的列采用了相同的命名样式时,就可以使用 USING 语法来简化 ON 语法,格式为:USING(column_name)。所以,USING的功能相当于ON,区别在于USING指定一个属性名用于连接两个表,而ON指定一个条件。另外,SELECT *时,USING会去除USING指定的列,而ON不会。

  • 相关阅读:
    mysql check约束无效
    Illegal mix of collations for operation 'concat'
    执行automake时报错 error while making link: Operation not supported
    GCC 编译详解[转]
    gcc的选项
    关于MFLAGS与MAKEFLAGS
    gcc和g++的区别
    g++参数介绍
    gcc/g++基本命令简介
    semver语义化版本号
  • 原文地址:https://www.cnblogs.com/bkyqtr/p/11473839.html
Copyright © 2011-2022 走看看