php 左连接右连接,转 自连接、外连接和自连接查询

表1:teacher

+----+--------+

| id | name |

+----+--------+

| 1 | 刘德华 |

| 2 | 张学友 |

| 4 | 黎明 |

+----+--------+

表2:student

+----+------+--------+

| id | name | tea_id |

+----+------+--------+

| 1 | 张三 | 1 |

| 2 | 李四 | 1 |

| 3 | 王五 | 1 |

| 4 | 赵六 | 2 |

| 5 | 孙七 | 2 |

+----+------+--------+

1.内连接:在每个表中找出符合条件的共有记录。[x inner join y on...]

第一种写法:(相当于多表查询,用的是where!)

select t.*,s.* from teacher t,student s where t.id=s.tea_id;

第二种写法:(inner省略了)

select t.*,s.* from teacher t join student s on t.id=s.tea_id;

第三种写法:

select t.*,s.* from teacher t inner join student s on t.id=s.tea_id;

+----+--------+----+------+--------+

| id | name | id | name | tea_id |

+----+--------+----+------+--------+

| 1 | 刘德华 | 1 | 张三 | 1 |

| 1 | 刘德华 | 2 | 李四 | 1 |

| 1 | 刘德华 | 3 | 王五 | 1 |

| 2 | 张学友 | 4 | 赵六 | 2 |

| 2 | 张学友 | 5 | 孙七 | 2 |

+----+--------+----+------+--------+

2.外连接有三种方式:左连接,右连接和全连接。

2.1 左连接:根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配

找不到与左表匹配的,用null表示。[x left [outer] join y on...]

第一种写法:

select t.*,s.* from teacher t left join student s on t.id=s.tea_id;

第二种写法:

select t.*,s.* from teacher t left outer join student s on t.id=s.tea_id;

+----+--------+------+------+--------+

| id | name   | id   | name | tea_id |

+----+--------+------+------+--------+

|  1 | 刘德华 |    1 | 张三 |      1 |

|  1 | 刘德华 |    2 | 李四 |      1 |

|  1 | 刘德华 |    3 | 王五 |      1 |

|  2 | 张学友 |    4 | 赵六 |      2 |

|  2 | 张学友 |    5 | 孙七 |      2 |

|  4 | 黎明   | NULL | NULL |   NULL |

+----+--------+------+------+--------+

2.2 右连接:根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,

找不到匹配的,用null填充。[x right [outer] join y on...]

第一种写法:

select t.*,s.* from teacher t right join student s on t.id=s.tea_id;

第二种写法:

select t.*,s.* from teacher t right outer join student s on t.id=s.tea_id;

+------+--------+----+------+--------+

| id   | name   | id | name | tea_id |

+------+--------+----+------+--------+

|    1 | 刘德华 |  1 | 张三 |      1 |

|    1 | 刘德华 |  2 | 李四 |      1 |

|    1 | 刘德华 |  3 | 王五 |      1 |

|    2 | 张学友 |  4 | 赵六 |      2 |

|    2 | 张学友 |  5 | 孙七 |      2 |

+------+--------+----+------+--------+

2.3 全连接:返回符合条件的所有表的记录,没有与之匹配的,用null表示(结果是左连接和右连接的并集)

第一种写法:

select t.*,s.* from teacher t full join student s on t.id=s.tea_id;

第二种写法:

select t.*,s.* from teacher t full outer join student s on t.id=s.tea_id;

3 交叉连接(结果是笛卡尔积)

select t.*,s.* from teacher t cross join student s;

等效于:

select t.*,s.* from teacher t,student s;

+----+--------+----+------+--------+

| id | name | id | name | tea_id

| +----+--------+----+------+--------+

| 1 | 刘德华 | 1 | 张三 | 1 |

| 2 | 张学友 | 1 | 张三 | 1 |

| 4 | 黎明 | 1 | 张三 | 1 |

| 1 | 刘德华 | 2 | 李四 | 1 |

| 2 | 张学友 | 2 | 李四 | 1 |

| 4 | 黎明 | 2 | 李四 | 1 |

| 1 | 刘德华 | 3 | 王五 | 1 |

| 2 | 张学友 | 3 | 王五 | 1 |

| 4 | 黎明 | 3 | 王五 | 1 |

| 1 | 刘德华 | 4 | 赵六 | 2 |

| 2 | 张学友 | 4 | 赵六 | 2 |

| 4 | 黎明 | 4 | 赵六 | 2 |

| 1 | 刘德华 | 5 | 孙七 | 2 |

| 2 | 张学友 | 5 | 孙七 | 2 |

| 4 | 黎明 | 5 | 孙七 | 2 |

+----+--------+----+------+--------+

5自连接:连接的表都是同一个表,同样可以由内连接,外连接各种组合

方式,按实际应用去组合。

SELECT a.*,b.* FROM table_1 a,table_1 b WHERE a.[name]=b.[name]

--连接的两表是同一个表,别称不一样

SELECT a.*,b.* FROM table_1 a LEFT JOIN table_1 b ON a.[name]=b.[name]

--左连接写法

----------------------------------------------------------

易销宝(www.exiao800.com),企业专属的的订货平台,网上订货系统,加盟商订货软件,订单管理系统

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值