• 中文
    • English
  • 注册
  • 查看作者
  • 5-9:内连接INNER JOIN

    一.  连接条件

    使用ON关键字来设定连接条件,也可以使用WHERE来代替 ,通常使用ON关键字来设定连接条件,使用WHRER关键字进行结果集记录的过滤

    二.  内连接

    在MySQL中,JOIN,CROSS JOIN 和INNER JOIN是等价的,内连接的作用是:

    显示左表及右表符合连接条件的记录,也就是A ∩ B,如下图:

    5-9:内连接INNER JOIN

    我们来举例说明:

    首先查看一下表结构:

    mysql> SHOW COLUMNS FROM tdb_goods;
    +-------------+------------------------+------+-----+---------+----------------+
    | Field       | Type                   | Null | Key | Default | Extra          |
    +-------------+------------------------+------+-----+---------+----------------+
    | goods_id    | smallint(5) unsigned   | NO   | PRI | NULL    | auto_increment |
    | goods_name  | varchar(150)           | NO   |     | NULL    |                |
    | cate_id     | smallint(5) unsigned   | NO   |     | NULL    |                |
    | brand_id    | smallint(5) unsigned   | NO   |     | NULL    |                |
    | goods_price | decimal(15,3) unsigned | NO   |     | 0.000   |                |
    | is_show     | tinyint(1)             | NO   |     | 1       |                |
    | is_saleoff  | tinyint(1)             | NO   |     | 0       |                |
    +-------------+------------------------+------+-----+---------+----------------+
    7 rows in set (0.01 sec)
    
    mysql> SHOW COLUMNS FROM tdb_goods_cates;
    +-----------+----------------------+------+-----+---------+----------------+
    | Field     | Type                 | Null | Key | Default | Extra          |
    +-----------+----------------------+------+-----+---------+----------------+
    | cate_id   | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
    | cate_name | varchar(40)          | YES  |     | NULL    |                |
    +-----------+----------------------+------+-----+---------+----------------+
    2 rows in set (0.01 sec)

    接来利用连接条件查找几个字段:

    mysql> SELECT goods_id,goods_name,cate_name FROM tdb_goods INNER JOIN tdb_goods_cates ON tdb_goods.cate_id = tdb_goods_cates.cate_id \G
    *************************** 1. row ***************************
      goods_id: 1
    goods_name: R510VC 15.6英寸笔记本
     cate_name: 笔记本
    *************************** 2. row ***************************
      goods_id: 2
    goods_name: Y400N 14.0英寸笔记本电脑
     cate_name: 笔记本
    *************************** 3. row ***************************
      goods_id: 3
    goods_name: G150TH 15.6英寸游戏本
     cate_name: 游戏本
    *************************** 4. row ***************************
      goods_id: 4
    goods_name: X550CC 15.6英寸笔记本
     cate_name: 笔记本
    *************************** 5. row ***************************
      goods_id: 5
    goods_name: X240(20ALA0EYCD) 12.5英寸超极本
     cate_name: 超级本
    *************************** 6. row ***************************
      goods_id: 6
    goods_name: U330P 13.3英寸超极本
     cate_name: 超级本
    *************************** 7. row ***************************
      goods_id: 7
    goods_name: SVP13226SCB 13.3英寸触控超极本
     cate_name: 超级本
    *************************** 8. row ***************************
      goods_id: 8
    goods_name: iPad mini MD531CH/A 7.9英寸平板电脑
     cate_name: 平板电脑
    *************************** 9. row ***************************
      goods_id: 9
    goods_name: iPad Air MD788CH/A 9.7英寸平板电脑 (16G WiFi版)
     cate_name: 平板电脑
    *************************** 10. row ***************************
      goods_id: 10
    goods_name:  iPad mini ME279CH/A 配备 Retina 显示屏 7.9英寸平板电脑 (16G WiFi版)
     cate_name: 平板电脑
    *************************** 11. row ***************************
      goods_id: 11
    goods_name: IdeaCentre C340 20英寸一体电脑
     cate_name: 台式机
    *************************** 12. row ***************************
      goods_id: 12
    goods_name: Vostro 3800-R1206 台式电脑
     cate_name: 台式机
    *************************** 13. row ***************************
      goods_id: 13
    goods_name: iMac ME086CH/A 21.5英寸一体电脑
     cate_name: 台式机
    *************************** 14. row ***************************
      goods_id: 14
    goods_name: AT7-7414LP 台式电脑 (i5-3450四核 4G 500G 2G独显 DVD 键鼠 Linux )
     cate_name: 台式机
    *************************** 15. row ***************************
      goods_id: 15
    goods_name: Z220SFF F4F06PA工作站
     cate_name: 服务器/工作站
    *************************** 16. row ***************************
      goods_id: 16
    goods_name: PowerEdge T110 II服务器
     cate_name: 服务器/工作站
    *************************** 17. row ***************************
      goods_id: 17
    goods_name: Mac Pro MD878CH/A 专业级台式电脑
     cate_name: 服务器/工作站
    *************************** 18. row ***************************
      goods_id: 18
    goods_name:  HMZ-T3W 头戴显示设备
     cate_name: 笔记本配件
    *************************** 19. row ***************************
      goods_id: 19
    goods_name: 商务双肩背包
     cate_name: 笔记本配件
    *************************** 20. row ***************************
      goods_id: 20
    goods_name: X3250 M4机架式服务器 2583i14
     cate_name: 服务器/工作站
    *************************** 21. row ***************************
      goods_id: 21
    goods_name:  HMZ-T3W 头戴显示设备
     cate_name: 笔记本配件
    *************************** 22. row ***************************
      goods_id: 22
    goods_name: 商务双肩背包
     cate_name: 笔记本配件
    22 rows in set (0.00 sec)

    可以看到只有22条商品记录,可是原表中我们有23条记录,这是为什么呢?我截取了一下没显示的那条记录:

    *************************** 23. row ***************************
       goods_id: 23
     goods_name:  LaserJet Pro P1606dn 黑白激光打印机
        cate_id: 12
       brand_id: 4
    goods_price: 1849.000
        is_show: 1
     is_saleoff: 0
    23 rows in set (0.00 sec)

    可以看到,该商品的cate_id为12,而在商品分类表中并没有id为12的记录,也就是A ∩ B 中没有12条记录,所以不满足连接条件,也就没有显示了

  • 0
  • 0
  • 0
  • 4k
  • 小朱快跑

    请登录之后再进行评论

    登录
    单栏布局 侧栏位置: