MySQL多表查询的案例详解

MySQL多表查询是在一个查询语句中操作多张数据表的查询操作,一般有三种方式:内联结(inner join),左联结(left join)和右联结(right join)。下面是多表查询的详细攻略及示例说明:

1. 内联结(inner join)

内联结可以描述两张或以上数据表除了公用的字段外的交集。语法如下:

SELECT column FROM table1 [INNER] JOIN table2 ON condition;

其中,column表示要查询的列(可以使用多个列,以,隔开),table1table2是要查询的两张数据表,condition表示关联条件,也叫内联结条件。

下面是一个多表内联结查询的示例:

假设我们有两张数据表,一张名为students,包含学生的信息和学号,另一张名为scores,包含学生成绩和学号,它们的结构如下:

students表
id  name    sex  age  class_id
1   Tom     M     18        1
2   Jerry   F     17        1
3   Lily    M     18        2
4   Lucy    F     17        3

scores表
id  student_id  Chinese  Math  English
1     1          90        90      90
2     2          80        80      80
3     3          70        70      70
4     4          60        60      60

现在,我们想查询姓名、性别、年龄、班级和各科成绩。我们可以使用如下的SQL语句:

SELECT students.name, students.sex, students.age, students.class_id, scores.Chinese, scores.Math, scores.English
FROM students
INNER JOIN scores
ON students.id = scores.student_id;

运行结果如下:

name  sex  age  class_id  Chinese  Math  English
Tom   M     18         1        90       90       90
Jerry F     17         1        80       80       80
Lily  M     18         2        70       70       70
Lucy  F     17         3        60       60       60

2. 左联结(left join)

左联结可以描述左边数据表与右边数据表的全部几何,以及左边数据表中符合条件的交集数据。语法如下:

SELECT column FROM table1 LEFT [OUTER] JOIN table2 ON condition;

其中,table1作为左表(左边的表),table2作为右表(右边的表),condition表示左联结条件。

下面是一个多表左联结查询的示例:

假设我们要查询student表中所有记录以及它们的成绩,如果该学生没有成绩,则成绩信息为NULL,我们可以使用如下的SQL语句:

SELECT students.name, students.sex, students.age, students.class_id, scores.Chinese, scores.Math, scores.English
FROM students
LEFT JOIN scores
ON students.id = scores.student_id;

运行结果如下:

name  sex  age  class_id  Chinese  Math  English
Tom   M     18         1        90       90       90
Jerry F     17         1        80       80       80
Lily  M     18         2        70       70       70
Lucy  F     17         3        60       60       60
Tim   F     20         4         NULL   NULL  NULL

3. 右联结(right join)

右联结可以描述右边数据表与左边数据表的全部几何,以及右边数据表中符合条件的交集数据。语法如下:

SELECT column FROM table1 RIGHT [OUTER] JOIN table2 ON condition;

其中,table1作为左表(左边的表),table2作为右表(右边的表),condition表示右联结条件。

下面是一个多表右联结查询的示例:

假设我们要查询有成绩信息的学生和他们的成绩,我们可以使用如下的SQL语句:

SELECT students.name, students.sex, students.age, students.class_id, scores.Chinese, scores.Math, scores.English
FROM students
RIGHT JOIN scores
ON students.id = scores.student_id;

运行结果如下:

name  sex  age  class_id  Chinese  Math  English
Tom   M     18         1        90       90       90
Jerry F     17         1        80       80       80
Lily  M     18         2        70       70       70
Lucy  F     17         3        60       60       60
NULL NULL NULL NULL 85      85    85

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL多表查询的案例详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 如何使用Python从数据库中获取BLOB类型的数据并将其保存到本地文件中?

    以下是如何使用Python从数据库中获取BLOB类型的数据并将其保存到本地文件中的完整使用攻略。 使用Python从数据库中获取BLOB类型的数据并将其保存到本地文件中的前提条件 在Python中从数据库获取BLOB类型的数据并将其保存到本地文件中前,需要保已经安装并启动支持数据的,例如MySQL或PostgreSQL,并且需要安装Python的相数据库驱动…

    python 2023年5月12日
    00
  • SqlServer中批量update语句

    下面是SqlServer中批量update语句的完整攻略: 什么是批量update语句 批量update语句可以一次性同时更新一个或多个表中的多行数据,该语句比单条update性能更高,可以提高数据更新的效率。 基本语法 批量update语句的基本语法如下: UPDATE {table_name} SET {column_name} = {value} [,…

    database 2023年5月21日
    00
  • Oracle安装遇到INS-30131错误的解决方法

    下面我将为你详细讲解一下“Oracle安装遇到INS-30131错误的解决方法”的完整攻略,包含以下内容: 错误提示信息解释 解决方法简介 具体操作步骤 示例说明 1. 错误提示信息解释 首先,我们需要了解一下“INS-30131”的含义。该错误信息表示:“无法在指定的节点上分配组织。请检查所有输入并重试“,通常原因是由于安装程序检测到了一个问题,无法正确执…

    database 2023年5月21日
    00
  • Centos 7下Mongodb开机无法自启动的解决方法

    下面是CentOS 7下Mongodb开机无法自启动的解决方法的完整攻略。 问题描述 在CentOS 7下安装Mongodb后,发现Mongodb服务无法在开机时自动启动,需要手动启动。 解决方法 1. 修改systemd的配置文件 systemd是CentOS 7默认的服务管理工具,我们需要修改它的配置文件来实现Mongodb的自启动。 编辑/usr/li…

    database 2023年5月22日
    00
  • MySQL数据库设计概念及多表查询和事物操作

    MySQL数据库设计概念 MySQL是一种常用的开源关系型数据库管理系统。MySQL采用了客户端-服务器体系结构,支持多线程、事务、字符集、视图、存储过程等特性,支持多种操作系统,如Linux、Windows等。在使用MySQL进行数据库设计时,需要掌握一些基本概念。 数据库设计基本原则 在进行数据库设计时,需要采用以下基本原则: 单一职责原则:一个表只负责…

    database 2023年5月19日
    00
  • 如何使用Python在数据库中添加一个新的列?

    以下是如何使用Python在数据库中添加一个新的列的完整使用攻略。 使用Python在数据库中添加一个新的列的前提条件 使用Python在数据库中添加一个新的列之前,需要确已经安装并启动了支持添加新列的数据库,例如MySQL或PostgreSQL且需要安装Python的相应数据库驱动程序,例如mysql-connector-python或psycopg2。 …

    python 2023年5月12日
    00
  • SQL SERVER 分组求和sql语句

    下面我来详细讲解 SQL SERVER 分组求和 sql 语句的完整攻略。 什么是分组求和? 分组求和是对数据库表中的数据进行分类统计的方法。通过指定一个或多个列作为“分组”,将数据分为多个组别,并对每个组别应用一个求和函数来计算它们的总和。 分组求和的语法 SQL SERVER 中的分组求和的语法如下: SELECT column_name1, SUM(c…

    database 2023年5月21日
    00
  • oracle 11g的警告日志和监听日志的删除方法

    删除Oracle 11g的警告日志和监听日志的方法如下: 1. 删除警告日志 Oracle 11g的警告日志一般存储在$ORACLE_BASE/diag/rdbms/$ORACLE_SID/\$ORACLE_SID/trace/目录下,并且以alert_$(ORACLE_SID).log为文件名。 要删除警告日志,需要执行以下步骤: 停止数据库实例: SQL…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部