数据库的多表连接查询_数据库内外连接

数据库的多表连接查询_数据库内外连接首先明确一下定义: 内连接:在多表查询的时候,只检索出表之间相互匹配的行(满足匹配条件的行),结果中不包括两个表之间不匹配的行。 一个不太准确但易懂的例子:比如有两个表,表1存储了 (1,2,3,4,

数据库_多表查询_内连接&外连接

首先明确一下定义:

内连接:在多表查询的时候,只检索出表之间相互匹配的行(满足匹配条件的行),结果中不包括两个表之间不匹配的行。

一个不太准确但易懂的例子:比如有两个表,表1存储了 (1,2,3,4,5 )这五个数字。表2存储了(3,4,5,6,7,8)这6个数字。多表查询时两个表的关联条件是 “表1 = 表2”.

那么检索的输出就是取这两个表的交集。,即 3,4,5.

数据库的多表连接查询_数据库内外连接

外连接:在多表查询的时候,处理检索出内连接的数据外,还返回左表(或者右表)中不满足匹配条件的行。这种连接称为左(或者右)外连接。

还是上边那个小例子:左外连接的返回结果为(1,2,3,4,5);右外连接的返回结果为(3,4,5,6,7,8).

如果是左外连接,则连接条件中左边的表也称为主表 ,右边的表称为从表 。如下简图:

数据库的多表连接查询_数据库内外连接

如果是右外连接,则连接条件中右边的表也称为主表 ,左边的表称为从表

数据库的多表连接查询_数据库内外连接

代码实现:

下面是代码举例中要用到的3个表

employees表:

+----------------+-------------+------+-----+---------+-------+
| Field          | Type        | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| employee_id    | int         | NO   | PRI | 0       |       |
| first_name     | varchar(20) | YES  |     | NULL    |       |
| last_name      | varchar(25) | NO   |     | NULL    |       |
| email          | varchar(25) | NO   | UNI | NULL    |       |
| phone_number   | varchar(20) | YES  |     | NULL    |       |
| hire_date      | date        | NO   |     | NULL    |       |
| job_id         | varchar(10) | NO   | MUL | NULL    |       |
| salary         | double(8,2) | YES  |     | NULL    |       |
| commission_pct | double(2,2) | YES  |     | NULL    |       |
| manager_id     | int         | YES  | MUL | NULL    |       |
| department_id  | int         | YES  | MUL | NULL    |       |
+----------------+-------------+------+-----+---------+-------+

departments表:

+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| department_id   | int         | NO   | PRI | 0       |       |
| department_name | varchar(30) | NO   |     | NULL    |       |
| manager_id      | int         | YES  | MUL | NULL    |       |
| location_id     | int         | YES  | MUL | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+

 locations表:

+----------------+-------------+------+-----+---------+-------+
| Field          | Type        | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| location_id    | int         | NO   | PRI | 0       |       |
| street_address | varchar(40) | YES  |     | NULL    |       |
| postal_code    | varchar(12) | YES  |     | NULL    |       |
| city           | varchar(30) | NO   |     | NULL    |       |
| state_province | varchar(25) | YES  |     | NULL    |       |
| country_id     | char(2)     | YES  | MUL | NULL    |       |
+----------------+-------------+------+-----+---------+-------+

 

注:以下所用语法:JOIN…ON 为 SQL99 中的多表查询实现语法。

内连接:检索返回员工姓名,部门名组成的表(需要用到employees表及departments表)

mysql> SELECT last_name,department_name
    -> FROM employees e  # 表1 JOIN 表2 ON 匹配条件;
    -> JOIN departments d
    -> ON e.department_id = d.department_id;   # 关联条件

 

检索返回员工姓名、部门名称、部门所在城市组成的表。

mysql> SELECT last_name,department_name,city
    -> FROM employees e  
    -> JOIN departments d   
    -> ON e.department_id = d.department_id
    -> JOIN locations l 
    -> ON d.location_id = l.location_id;
    /*
    表1
    JOIN 表2
    ON 表1和表2的匹配条件
    JOIN 表3 
    ON 表2和表3的匹配条件;
    */

 

外连接:从两个表中,检索返回所有员工的姓名、部门名组成的表。

mysql> SELECT employee_id,department_name
    -> FROM employees e   # employees表为主表,departments表为从表。主表 LEFT OUTER JOIN 从表 ON 匹配条件;
    -> LEFT OUTER JOIN departments d   # 左外连接 
    -> ON e.department_id = d.department_id;

 

原文地址:https://www.cnblogs.com/iot502/archive/2022/07/21/16503600.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4989.html

(0)
上一篇 2023-05-27
下一篇 2023-05-27

相关推荐

  • 使用plsql创建用户并授权(图形化界面)「建议收藏」

    使用plsql创建用户并授权(图形化界面)「建议收藏」使用plsql创建用户并授权(图形化界面) 使用sys用户登录数据库(或者有dba权限的[还不知道具体的区别,但是能用]) 在左边的对象列表中找到USERS,右键点击USERS,选择“新建用户”选项…

    2023-01-29
    141
  • CFFI基础教程

    CFFI基础教程如果你是Python工程师,那么想必你一定对Python代码的执行速度比较烦恼,因为它的速度相对较慢。不过,有一种工具可以帮助我们提高Python代码的执行速度,那就是CFFI。

    2024-06-17
    44
  • Python编程技巧:如何高效的切割字符串?

    Python编程技巧:如何高效的切割字符串?在Python开发中,处理字符串是非常常见的一个问题。字符串的切割是其中比较常见和重要的一个操作,正确高效的切割字符串不仅能提高代码的性能,还能增加代码的可读性。因此,在这篇文章中,我们将为大家介绍如何在Python中高效的切割字符串。我们将从多个方面对这个问题进行详细的阐述。

    2024-04-12
    70
  • Linux7 64安装 oracle 11g Error in invoking target ‘agent nmhs’ of makefile

    Linux7 64安装 oracle 11g Error in invoking target ‘agent nmhs’ of makefile在makefile中添加链接libnnz11库的参数修改$ORACLE_HOME/sysman/lib/ins_emagent.mk,将$(MK_EMAGENT_NMECTL)修改为:$(MK_EMA

    2022-12-27
    164
  • mysql自增主键_数据库自增序列

    mysql自增主键_数据库自增序列
    MySQL InnoDB 引擎底层数据结构是 B+ 树,所谓的索引其实就是一颗 B+ 树,一个表有多少个索引就会有多少颗 B+ 树,mysql 中的数据都是…

    2023-04-03
    162
  • mysql 查询语法_mysql语句大全及用法

    mysql 查询语法_mysql语句大全及用法
    多表查询 这里的多表是指的是两张表,两张表的连接方式,可以分成内连接和外连接 1) 内连接 关键字 inner join on 不加关键字 语法 SELEC…

    2023-04-08
    150
  • 如何在Python中使用os.getenv获取环境变量

    如何在Python中使用os.getenv获取环境变量环境变量是操作系统提供给应用程序的接口,包含了一些运行程序需要的信息,如路径、系统设置等。

    2024-06-23
    50
  • Python稳定版本发布记录

    Python稳定版本发布记录Python作为一种高级编程语言,不仅具备强大的功能和灵活性,还得益于其稳定和可靠的版本发布。在一系列不断进化的版本中,Python的稳定版本发布记录起着至关重要的作用。它是Python行业发展的一个重要标志,也是用户了解Python技术趋势和相关信息的重要渠道。

    2024-05-19
    77

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注