SQL两个表关联查询

一、sql两个表关联查询where

在进行两个表关联查询时,where条件语句是必不可少的一部分。where语句可以用来过滤掉不需要的数据,达到快速准确的查询的目的。

例如,我们有一张名为student的表,内容如下:

+----+-------+------+------+---------+
| id | name  | age  | city | country |
+----+-------+------+------+---------+
|  1 | Tom   |   20 | 北京 | 中国    |
|  2 | Jack  |   21 | 上海 | 中国    |
|  3 | Lily  |   20 | 北京 | 中国    |
|  4 | Kate  |   23 | 北京 | 美国    |
|  5 | David |   22 | 上海 | 美国    |
+----+-------+------+------+---------+

再有一张名为score的表,内容如下:

+----+---------+-------+
| id | student | score |
+----+---------+-------+
|  1 |       1 |    90 |
|  2 |       2 |    80 |
|  3 |       3 |    95 |
|  4 |       4 |    78 |
|  5 |       5 |    87 |
+----+---------+-------+

现在我们需要查询出选了“北京”这个城市的学生的成绩。

sql语句如下:

SELECT student.name, score.score FROM student, score WHERE student.id=score.student AND student.city="北京"

执行结果如下:

+------+-------+
| name | score |
+------+-------+
| Tom  |    90 |
| Lily |    95 |
| Kate |    78 |
+------+-------+

二、sql关联查询两个表

在进行两个表关联查询时,我们需要用到join关键字。join关键字用于将两个表进行连接,以实现数据查询。

例如,我们需要查询每个学生的成绩,sql语句如下:

SELECT student.name, score.score FROM student INNER JOIN score ON student.id=score.student

执行结果如下:

+-------+-------+
| name  | score |
+-------+-------+
| Tom   |    90 |
| Jack  |    80 |
| Lily  |    95 |
| Kate  |    78 |
| David |    87 |
+-------+-------+

三、sql两个表关联查询显示中文

sql两表关联查询时,如果需要在结果集中显示中文,需要对中文进行转义。

例如,我们要查询每个学生的单位和国籍,sql语句如下:

SELECT student.name, CONCAT(student.city,", ",student.country) as unit, score.score, score.date FROM student INNER JOIN score ON student.id=score.student

执行结果如下:

+-------+--------+-------+------------+
| name  | unit   | score | date       |
+-------+--------+-------+------------+
| Tom   | 北京, 中国 |    90 | 2022-06-18 |
| Jack  | 上海, 中国 |    80 | 2022-06-18 |
| Lily  | 北京, 中国 |    95 | 2022-06-18 |
| Kate  | 北京, 美国 |    78 | 2022-06-18 |
| David | 上海, 美国 |    87 | 2022-06-18 |
+-------+--------+-------+------------+

四、sql两个表关联查询分别查一部分

在两个表关联查询时,有时候需要只查询一个表中的部分数据,例如只查询学生表中“北京”学生的成绩。

sql语句如下:

SELECT student.name, score.score FROM student INNER JOIN score ON student.id=score.student WHERE student.city="北京"

执行结果如下:

+------+-------+
| name | score |
+------+-------+
| Tom  |    90 |
| Lily |    95 |
| Kate |    78 |
+------+-------+

五、sql三个表关联查询

在进行三个表关联查询时,我们需要用到多个join关键字,以实现三个表之间的数据查询。

例如,我们有一张名为teacher的表,内容如下:

+----+------+--------+
| id | name | course |
+----+------+--------+
|  1 | 张老师 | 语文    |
|  2 | 李老师 | 数学    |
|  3 | 王老师 | 英语    |
+----+------+--------+

现在我们需要查询每个学生的成绩和所选课程的老师的名字。

sql语句如下:

SELECT student.name, score.score, course.name, teacher.name FROM student, score, course, teacher WHERE student.id=score.student AND score.course=course.id AND course.teacher=teacher.id

执行结果如下:

+-------+-------+--------+--------+
| name  | score | name   | name   |
+-------+-------+--------+--------+
| Tom   |    90 | 语文    | 张老师 |
| Jack  |    80 | 数学    | 李老师 |
| Lily  |    95 | 英语    | 王老师 |
| Kate  |    78 | 语文    | 张老师 |
| David |    87 | 数学    | 李老师 |
+-------+-------+--------+--------+

六、两张表关联查询sql语句

在两张表关联查询时,我们可以使用内连接(inner join)进行关联查询。

例如,我们查询每个学生的成绩和所在城市,sql语句如下:

SELECT student.name, student.city, score.score FROM student INNER JOIN score ON student.id=score.student

执行结果如下:

+-------+--------+-------+
| name  | city   | score |
+-------+--------+-------+
| Tom   | 北京 |    90 |
| Jack  | 上海 |    80 |
| Lily  | 北京 |    95 |
| Kate  | 北京 |    78 |
| David | 上海 |    87 |
+-------+--------+-------+

七、多表关联查询sql规则

在进行多表关联查询时,我们必须要遵守一些规则,例如:

1、关联条件必须存在,且尽量唯一确定一行数据。

2、避免使用笛卡尔积,即尽量避免使用多个左连接,调整查询顺序,使查询结果较小。

3、尽量使用内连接,防止结果集中存在大量null值。

八、数据库两个表关联查询语句

针对不同的数据库,两个表关联查询的语句也有一些差异。

例如,在MySQL中,我们可以使用join关键字来进行关联查询,如下:

SELECT student.name, score.score FROM student INNER JOIN score ON student.id=score.student

而在Oracle数据库中,则使用“+”运算符进行关联查询,如下:

SELECT student.name, score.score FROM student, score WHERE student.id=score.student(+)

在SQL Server中,可以使用left/right join关键字进行关联查询,如下:

SELECT student.name, score.score FROM student LEFT JOIN score ON student.id=score.student

以上是关于SQL两个表关联查询的详细介绍,希望对大家有所帮助。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/193125.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-01 14:59
下一篇 2024-12-01 14:59

相关推荐

  • 利用Python实现两个链表合并为一个有序链表

    对于开发工程师来说,实现两个链表合并为一个有序链表是必须掌握的技能之一。Python语言在链表处理上非常便利,本文将从多个方面详细阐述如何利用Python实现两个链表合并为一个有序…

    编程 2025-04-29
  • Hibernate日志打印sql参数

    本文将从多个方面介绍如何在Hibernate中打印SQL参数。Hibernate作为一种ORM框架,可以通过打印SQL参数方便开发者调试和优化Hibernate应用。 一、通过配置…

    编程 2025-04-29
  • 使用SQL实现select 聚合查询结果前加序号

    select语句是数据库中最基础的命令之一,用于从一个或多个表中检索数据。常见的聚合函数有:count、sum、avg等。有时候我们需要在查询结果的前面加上序号,可以使用以下两种方…

    编程 2025-04-29
  • 理解Mybatis中的SQL Limit用法

    Mybatis是一种非常流行的ORM框架,提供了SQL映射配置文件,可以使用类似于传统SQL语言的方式编写SQL语句。其中,SQL的Limit语法是一个非常重要的知识点,能够实现分…

    编程 2025-04-29
  • Python定义两个列表的多面探索

    Python是一种强大的编程语言,开放源代码,易于学习和使用。通过Python语言,我们可以定义各种数据类型,如列表(list)。在Python中,列表(list)在处理数据方面起…

    编程 2025-04-29
  • SQL预研

    SQL预研是指在进行SQL相关操作前,通过数据分析和理解,确定操作的方法和步骤,从而避免不必要的错误和问题。以下从多个角度进行详细阐述。 一、数据分析 数据分析是SQL预研的第一步…

    编程 2025-04-28
  • Python两个线程交替打印1到100

    这篇文章的主题是关于Python多线程的应用。我们将会通过实际的代码,学习如何使用Python两个线程交替打印1到100。 一、创建线程 在Python中,我们可以使用Thread…

    编程 2025-04-28
  • leveldb和unqlite:两个高性能的数据库存储引擎

    本文将介绍两款高性能的数据库存储引擎:leveldb和unqlite,并从多个方面对它们进行详细的阐述。 一、leveldb:轻量级的键值存储引擎 1、leveldb概述: lev…

    编程 2025-04-28
  • Python中两个冒号连用

    Python中的“两个冒号”是指“::”,它在Python中有着很多用途,包括循环语句、切片、函数注解等。下面我们从多个方面来详细阐述Python中两个冒号的用法。 一、循环语句f…

    编程 2025-04-28
  • 两个域名指向同一IP不同端口打开不同网页的实现方法

    本文将从以下几个方面详细阐述两个域名指向同一个IP不同端口打开不同网页的实现方法。 一、域名解析 要实现两个域名指向同一个IP不同端口,首先需要进行域名解析。在域名解析的时候,将这…

    编程 2025-04-28

发表回复

登录后才能评论