经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MySQL » 查看文章
【技术积累】Mysql中的SQL语言【技术篇】【四】
来源:cnblogs  作者:程序员天佑  时间:2023/7/21 8:50:34  对本文有异议

数据的连接与关联查询

INNER JOIN

INNER JOIN是MySQL中的一种表连接操作,用于将两个或多个表中的行基于一个共同的列进行匹配,并返回匹配的结果集。

下面是一个案例,假设有两个表:orders和customers,分别存储订单信息和客户信息。表结构如下:

orders表:

  1. +----+---------+------------+
  2. | id | order_no| customer_id|
  3. +----+---------+------------+
  4. | 1 | 1001 | 1 |
  5. | 2 | 1002 | 2 |
  6. | 3 | 1003 | 1 |
  7. +----+---------+------------+

customers表:

  1. +----+---------+
  2. | id | name |
  3. +----+---------+
  4. | 1 | Alice |
  5. | 2 | Bob |
  6. | 3 | Charlie |
  7. +----+---------+

现在我们想要查询订单表中的订单号和对应的客户名字,可以使用INNER JOIN来实现。SQL语句如下:

  1. SELECT orders.order_no, customers.name
  2. FROM orders
  3. INNER JOIN customers ON orders.customer_id = customers.id;

解释SQL语句:

- SELECT orders.order_no, customers.name:选择要查询的列,即订单号和客户名字。

- FROM orders:指定要查询的主表为orders表。

- INNER JOIN customers:指定要连接的表为customers表,并使用INNER JOIN进行连接操作。

- ON orders.customer_id = customers.id:指定连接条件,即orders表的customer_id列与customers表的id列进行匹配。

- 最终返回匹配的结果集,包含订单号和对应的客户名字。

执行以上SQL语句后,将返回以下结果:

  1. +---------+---------+
  2. | order_no| name |
  3. +---------+---------+
  4. | 1001 | Alice |
  5. | 1002 | Bob |
  6. | 1003 | Alice |
  7. +---------+---------+

结果集中的每一行表示一个订单和对应的客户名字。

LEFT JION

LEFT JOIN是MySQL中的一种表连接操作,用于将左表中的所有行与右表中的匹配行进行连接,并返回匹配的结果集。如果右表中没有匹配的行,则返回NULL值。

以下是一个案例,假设有两个表:orders和customers,分别存储订单信息和客户信息。表结构与之前的案例相同。

现在我们想要查询订单表中的订单号和对应的客户名字,包括没有匹配的订单。可以使用LEFT JOIN来实现。SQL语句如下:

  1. SELECT orders.order_no, customers.name
  2. FROM orders
  3. LEFT JOIN customers ON orders.customer_id = customers.id;

解释SQL语句:

- SELECT orders.order_no, customers.name:选择要查询的列,即订单号和客户名字。

- FROM orders:指定要查询的主表为orders表。

- LEFT JOIN customers:指定要连接的表为customers表,并使用LEFT JOIN进行连接操作。

- ON orders.customer_id = customers.id:指定连接条件,即orders表的customer_id列与customers表的id列进行匹配。

- 最终返回匹配的结果集,包含订单号和对应的客户名字。如果没有匹配的行,则客户名字列的值为NULL。

执行以上SQL语句后,将返回以下结果:

  1. +---------+---------+
  2. | order_no| name |
  3. +---------+---------+
  4. | 1001 | Alice |
  5. | 1002 | Bob |
  6. | 1003 | Alice |
  7. +---------+---------+

结果集中的每一行表示一个订单和对应的客户名字。如果订单没有对应的客户信息,则客户名字列的值为NULL。

RIGHT JOIN

RIGHT JOIN是MySQL中的一种表连接操作,用于将右表中的所有行与左表中的匹配行进行连接,并返回匹配的结果集。如果左表中没有匹配的行,则返回NULL值。

以下是一个案例,假设有两个表:orders和customers,分别存储订单信息和客户信息。表结构与之前的案例相同。

现在我们想要查询客户表中的客户名字和对应的订单号,包括没有匹配的客户。可以使用RIGHT JOIN来实现。SQL语句如下:

  1. SELECT orders.order_no, customers.name
  2. FROM orders
  3. RIGHT JOIN customers ON orders.customer_id = customers.id;

解释SQL语句:

- SELECT orders.order_no, customers.name:选择要查询的列,即订单号和客户名字。

- FROM orders:指定要查询的主表为orders表。

- RIGHT JOIN customers:指定要连接的表为customers表,并使用RIGHT JOIN进行连接操作。

- ON orders.customer_id = customers.id:指定连接条件,即orders表的customer_id列与customers表的id列进行匹配。

- 最终返回匹配的结果集,包含客户名字和对应的订单号。如果没有匹配的行,则订单号列的值为NULL。

执行以上SQL语句后,将返回以下结果:

  1. +---------+---------+
  2. | order_no| name |
  3. +---------+---------+
  4. | 1001 | Alice |
  5. | 1002 | Bob |
  6. | 1003 | Alice |
  7. +---------+---------+

结果集中的每一行表示一个客户和对应的订单号。如果客户没有对应的订单信息,则订单号列的值为NULL。

FULL JOIN

FULL JOIN是MySQL中的一种表连接操作,用于将左表和右表中的所有行进行连接,并返回匹配的结果集。如果左表或右表中没有匹配的行,则返回NULL值。

以下是一个案例,假设有两个表:orders和customers,分别存储订单信息和客户信息。表结构与之前的案例相同。

现在我们想要查询所有的订单和客户信息,包括没有匹配的行。可以使用FULL JOIN来实现。SQL语句如下:

  1. SELECT orders.order_no, customers.name
  2. FROM orders
  3. FULL JOIN customers ON orders.customer_id = customers.id;

解释SQL语句:

- SELECT orders.order_no, customers.name:选择要查询的列,即订单号和客户名字。

- FROM orders:指定要查询的主表为orders表。

- FULL JOIN customers:指定要连接的表为customers表,并使用FULL JOIN进行连接操作。

- ON orders.customer_id = customers.id:指定连接条件,即orders表的customer_id列与customers表的id列进行匹配。

- 最终返回匹配的结果集,包含订单号和对应的客户名字。如果没有匹配的行,则订单号或客户名字列的值为NULL。

执行以上SQL语句后,将返回以下结果:

  1. +---------+---------+
  2. | order_no| name |
  3. +---------+---------+
  4. | 1001 | Alice |
  5. | 1002 | Bob |
  6. | 1003 | Alice |
  7. | NULL | Charlie |
  8. +---------+---------+

结果集中的每一行表示一个订单和对应的客户名字。如果订单或客户没有对应的匹配行,则订单号或客户名字列的值为NULL。

数据的多表操作

UNION操作符

UNION是MySQL中的一种集合操作,用于将多个SELECT语句的结果合并成一个结果集,并去除重复的行。

以下是一个案例,假设有两个表:orders1和orders2,分别存储不同时间段的订单信息。表结构如下:

orders1表:

  1. +----+---------+
  2. | id | order_no|
  3. +----+---------+
  4. | 1 | 1001 |
  5. | 2 | 1002 |
  6. | 3 | 1003 |
  7. +----+---------+

orders2表:

  1. +----+---------+
  2. | id | order_no|
  3. +----+---------+
  4. | 4 | 1004 |
  5. | 5 | 1005 |
  6. | 6 | 1006 |
  7. +----+---------+

现在我们想要查询两个表中的所有订单号,并合并成一个结果集。可以使用UNION来实现。SQL语句如下:

  1. SELECT order_no FROM orders1
  2. UNION
  3. SELECT order_no FROM orders2;

解释SQL语句:

- SELECT order_no FROM orders1:选择要查询的列,即orders1表中的订单号。

- UNION:使用UNION操作符将两个SELECT语句的结果合并。

- SELECT order_no FROM orders2:选择要查询的列,即orders2表中的订单号。

- 最终返回合并后的结果集,包含两个表中的所有订单号,并去除重复的行。

执行以上SQL语句后,将返回以下结果:

  1. +---------+
  2. | order_no|
  3. +---------+
  4. | 1001 |
  5. | 1002 |
  6. | 1003 |
  7. | 1004 |
  8. | 1005 |
  9. | 1006 |
  10. +---------+

结果集中的每一行表示一个订单号,包括两个表中的所有订单号,并去除了重复的行。

EXISTS 关键字

EXISTS是MySQL中的一个条件操作符,用于检查一个子查询是否返回任何行。如果子查询返回至少一行,则条件成立,返回TRUE;否则,条件不成立,返回FALSE。

以下是一个案例,假设有两个表:orders和customers,分别存储订单信息和客户信息。表结构与之前的案例相同。

现在我们想要查询存在至少一个订单的客户信息。可以使用EXISTS来实现。SQL语句如下:

  1. SELECT *
  2. FROM customers
  3. WHERE EXISTS (
  4. SELECT 1
  5. FROM orders
  6. WHERE orders.customer_id = customers.id
  7. );

解释SQL语句:

- SELECT * FROM customers:选择要查询的表为customers表,即查询客户信息。

- WHERE EXISTS (...):使用EXISTS条件操作符来判断是否存在满足条件的子查询结果。

- SELECT 1 FROM orders WHERE orders.customer_id = customers.id:子查询,查询orders表中是否存在与customers表中的id匹配的订单。

- 最终返回满足条件的客户信息。

执行以上SQL语句后,将返回存在至少一个订单的客户信息。

注意:在实际使用中,可以根据具体需求选择需要查询的列,而不是使用通配符*来查询所有列。

IN关键字

IN是MySQL中的一个条件操作符,用于判断一个值是否存在于一个列表或子查询的结果中。如果值存在于列表或子查询的结果中,则条件成立,返回TRUE;否则,条件不成立,返回FALSE。

以下是一个案例,假设有一个表:orders,存储订单信息。表结构如下:

orders表:

  1. +----+---------+
  2. | id | order_no|
  3. +----+---------+
  4. | 1 | 1001 |
  5. | 2 | 1002 |
  6. | 3 | 1003 |
  7. +----+---------+

现在我们想要查询订单号为1001和1003的订单信息。可以使用IN来实现。SQL语句如下:

  1. SELECT *
  2. FROM orders
  3. WHERE order_no IN (1001, 1003);

解释SQL语句:

- SELECT * FROM orders:选择要查询的表为orders表,即查询订单信息。

- WHERE order_no IN (1001, 1003):使用IN条件操作符来判断订单号是否存在于指定的列表中。

- (1001, 1003):指定一个列表,包含要匹配的订单号。

- 最终返回满足条件的订单信息。

执行以上SQL语句后,将返回订单号为1001和1003的订单信息。

注意:IN操作符也可以与子查询一起使用,用于判断一个值是否存在于子查询的结果中。例如,可以将(1001, 1003)替换为一个子查询,来动态地获取要匹配的订单号。

原文链接:https://www.cnblogs.com/yyyyfly1/p/17554105.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号