iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL创建高级联结的方法
  • 617
分享到

MySQL创建高级联结的方法

2024-04-02 19:04:59 617人浏览 薄情痞子
摘要

1.  使用表别名别名除了用于列名和计算字段外, sql还允许给表名起别名。这样做有两个主要理由:缩短SQL语句;允许在单条SELECT语句中多次使用相同的表。Mysql> SELE

1.  使用表别名

别名除了用于列名和计算字段外, sql还允许给表名起别名。这样做有两个主要理由:

  • 缩短SQL语句;

  • 允许在单条SELECT语句中多次使用相同的表。

Mysql> SELECT cust_name, cust_contact FROM customers AS c, orders AS o, orderitems AS oi WHERE c.cust_id=o.cust_id AND oi.order_num=o.order_num AND prod_id='TNT2';
+----------------+--------------+
| cust_name      | cust_contact |
+----------------+--------------+
| Coyote Inc.    | Y Lee        |
| Yosemite Place | Y Sam        |
+----------------+--------------+
  • 分析:可以看到, FROM子句中3个表全都具有别名。 customers AS c建立c作为customers的别名,等等。这使得能使用省写的c而不是全名customers。在此例子中,表别名只用于WHERE子句。但是,表别名不仅能用于WHERE子句,它还可以用于SELECT的列表、 ORDER BY子句以及语句的其他部分。

2.  使用不同类型的联结

2.1 自联结

mysql> SELECT p1.prod_id, p1.prod_name FROM products AS p1, products AS p2 WHERE p1.vend_id=p2.vend_id AND p2.prod_id='DTNTR'
    -> ;
+---------+----------------+
| prod_id | prod_name      |
+---------+----------------+
| DTNTR   | Detonator      |
| FB      | Bird seed      |
| FC      | Carrots        |
| SAFE    | Safe           |
| SLING   | Sling          |
| TNT1    | TNT (1 stick)  |
| TNT2    | TNT (5 sticks) |
+---------+----------------+
  • 分析:此查询中需要的两个表实际上是相同的表,因此products表在FROM子句中出现了两次。虽然这是完全合法的,但对products的引用具有二义性,因为MySQL不知道你引用的是products表中的哪个实例。

用自联结而不用子查询:自联结通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句。虽然最终的结果是相同的,但有时候处理联结远比处理子查询快得多

2.2 自然联结

自然联结排除多次出现,使每个列只返回一次。

mysql> SELECT c.*, o.order_num, o.order_date, oi.prod_id, oi.quantity, oi.item_price FROM customers AS c, orders AS o,orderitems AS oi WHERE c.cust_id = o.cust_id AND oi.order_num = o.order_num AND prod_id = 'FB';
+---------+-------------+----------------+-----------+------------+----------+--------------+--------------+-----------------+-----------+---------------------+---------+----------+------------+
| cust_id | cust_name   | cust_address   | cust_city | cust_state | cust_zip | cust_country | cust_contact | cust_email      | order_num | order_date          | prod_id | quantity | item_price |
+---------+-------------+----------------+-----------+------------+----------+--------------+--------------+-----------------+-----------+---------------------+---------+----------+------------+
|   10001 | Coyote Inc. | 200 Maple Lane | Detroit   | MI         | 44444    | USA          | Y Lee        | ylee@coyote.com |     20005 | 2005-09-01 00:00:00 | FB      |        1 |      10.00 |
|   10001 | Coyote Inc. | 200 Maple Lane | Detroit   | MI         | 44444    | USA          | Y Lee        | ylee@coyote.com |     20009 | 2005-10-08 00:00:00 | FB      |        1 |      10.00 |
+---------+-------------+----------------+-----------+------------+----------+--------------+--------------+-----------------+-----------+---------------------+---------+----------+------------

+

  • 分析:在这个例子中,通配符只对第一个表使用。所有其他列明确列出,所以没有重复的列被检索出来。

2.3 外部联结

许多联结将一个表中的行与另一个表中的行相关联。但有时候会需要包含没有关联行的那些行。
为了检索所有客户,包括那些没有订单的客户,可如下进行:

mysql> SELECT customers.cust_id, orders.order_num FROM customers LEFT OUTER JOIN orders ON omers.cust_id = orders.cust_id;
+---------+-----------+
| cust_id | order_num |
+---------+-----------+
|   10001 |     20005 |
|   10001 |     20009 |
|   10002 |      NULL |
|   10003 |     20006 |
|   10004 |     20007 |
|   10005 |     20008 |
+---------+-----------+
  • 分析:类似于上一章中所看到的内部联结,这条SELECT语句使用了关键字OUTER JOIN来指定联结的类型(而不是在WHERE子句中指定)。但是,与内部联结关联两个表中的行不同的是,外部联结还包括没有关联行的行。在使用OUTER JOIN语法时,必须使用RIGHT或LEFT关键字指定包括其所有行的表( RIGHT指出的是OUTER JOIN右边的表,而LEFT指出的是OUTER JOIN左边的表)。 上面的例子使用LEFT OUTER JOIN从FROM子句的左边表(customers表)中选择所有行。

3 使用带聚集函数的联结

如果要检索所有客户及每个客户所下的订单数,下面使用了COUNT()函数的代码可完成此工作:

mysql> SELECT customers.cust_name, customers.cust_id, COUNT(orders.order_num) AS num_ord FROM customers INNER JOIN orders ON customers.cust_id = orders.cust_id GROUP BY customers.cust_id;
+----------------+---------+---------+
| cust_name      | cust_id | num_ord |
+----------------+---------+---------+
| Coyote Inc.    |   10001 |       2 |
| Wascals        |   10003 |       1 |
| Yosemite Place |   10004 |       1 |
| E Fudd         |   10005 |       1 |
+----------------+---------+---------+
  • 分析:此SELECT语句使用INNER JOIN将customers和orders表互相关联。GROUP BY 子 句 按 客 户 分 组 数 据 , 因 此 , 函 数 调 用COUNT(orders.order_num)对每个客户的订单计数,将它作为num_ord返回。

mysql> SELECT customers.cust_name, customers.cust_id, COUNT(orders.order_num) AS num_ord FROM customers LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id GROUP BY customers.cust_id;
+----------------+---------+---------+
| cust_name      | cust_id | num_ord |
+----------------+---------+---------+
| Coyote Inc.    |   10001 |       2 |
| Mouse House    |   10002 |       0 |
| Wascals        |   10003 |       1 |
| Yosemite Place |   10004 |       1 |
| E Fudd         |   10005 |       1 |
+----------------+---------+---------+
  • 分析:这个例子使用左外部联结来包含所有客户,甚至包含那些没有任何下订单的客户。结果显示也包含了客户Mouse House,它有0个订单。

以上就是MySQL必知必会:创建高级联结的详细内容,更多请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL创建高级联结的方法

本文链接: https://www.lsjlt.com/news/36837.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【MySQL】不允许你不会创建高级联结
    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍...
    99+
    2023-08-17
    mysql sql 数据库
  • mysql创建联合主键的方法有哪些
    在MySQL中,可以使用以下方法创建联合主键: 在创建表时指定多个列作为主键: CREATE TABLE table_name ...
    99+
    2024-04-09
    mysql
  • mysql创建联合索引的方法是什么
    在 MySQL 中创建联合索引的方法是使用 CREATE INDEX 语句。 语法如下: CREATE INDEX index_na...
    99+
    2024-04-09
    mysql
  • mysql中创建表的方法
    小编给大家分享一下mysql中创建表的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.mysql中创建数据表的语法CREATE TABLE&nbs...
    99+
    2023-06-14
  • mysql主从的创建方法
    这篇文章主要介绍“mysql主从的创建方法”,在日常操作中,相信很多人在mysql主从的创建方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql主从的创建方法”的疑惑...
    99+
    2024-04-02
  • pandas创建series的三种方法小结
    目录pandas创建series方法创建方法一Series 创建方法二Series 创建方法三Pandas的Series常用方法1. 创建Series2. Series追加3. Se...
    99+
    2024-04-02
  • 实现mysql级联复制的方法示例
    所谓级联复制就是master服务器,只给一台slave服务器同步数据,然后slave服务器在向后端的所有slave服务器同步数据,降低master服务器的写压力,和复制数据的网络IO。 一,配置master...
    99+
    2024-04-02
  • mysql里创建函数的方法
    这篇文章主要介绍了mysql里创建函数的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql里创建函数的方法:首先查看创建函数的功能是否...
    99+
    2024-04-02
  • 《MySQL高级篇》六、索引的创建与设计原则
    文章目录 1. 索引的声明与使用1.1 索引的分类1.2 创建索引1、创建表的时候创建索引2、在已经存在的表上创建索引 1.3 删除索引 2. MySQL 8.0 索引新特性2.1 ...
    99+
    2023-09-01
    MySQL
  • mysql count提高方法总结
    mysql想必很多程序猿都是不陌生的。很多人在纠结count的用法,怎么样才能查询效果最好。今天来谈谈小编的一些看法,仅供参考。 1、咱们先准备建一个表,并准备好测试数据方便后续步骤测试 以InnoDB引擎...
    99+
    2024-04-02
  • SQLServer创建索引的5种方法小结
    目录前期准备:创建聚集索引方法 1、方法 2、创建复合索引创建覆盖索引创建唯一索引筛选索引总结:前期准备: create table Employee ( ID int not null prim...
    99+
    2023-04-26
    SQLServer创建索引 SQLServer索引创建
  • MySQL存储过程高级SQL语句怎么创建
    本篇内容主要讲解“MySQL存储过程高级SQL语句怎么创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL存储过程高级SQL语句怎么创建”吧!MySQL...
    99+
    2022-12-28
    mysql sql
  • SQL中联合主键创建的方法是什么
    在SQL中,创建联合主键即是通过在CREATE TABLE语句中使用多个列名来定义主键。例如: CREATE TABLE examp...
    99+
    2024-04-09
    sql
  • mysql创建桌面快捷的方法
    小编给大家分享一下mysql创建桌面快捷的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!mysql创建桌面快捷的方法:首先打开dos命令窗口输入【netstartmysql】;然后输入【m...
    99+
    2024-04-02
  • mysql创建密码错误的方法
    这篇文章主要介绍mysql创建密码错误的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql创建密码错误的方法:首先打开终端,输入代码【mysql> flush pri...
    99+
    2024-04-02
  • mysql创建只读用户的方法
    小编给大家分享一下mysql创建只读用户的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!mysql增加只读用户的方法:1、使用现有的root用户登录到Mysql;2、创建用户,并授权SEL...
    99+
    2024-04-02
  • 在mysql中创建函数的方法
    这篇文章主要介绍在mysql中创建函数的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在mysql中可以通过语法“CREATE FUNCTION func_name ( [fun...
    99+
    2024-04-02
  • MySQL创建存储程序的方法
    小编给大家分享一下MySQL创建存储程序的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!简单地说,存储过程就是一条或者多条S...
    99+
    2024-04-02
  • mysql登录创建用户的方法
    这篇文章主要介绍mysql登录创建用户的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql登录创建用户的方法:1、使用root帐户登陆mysql,代码为【mysql -ur...
    99+
    2024-04-02
  • MySql创建分区的方法实例
    目录一、Mysql分区类型二、RANGE分区二、Hash分区三、Key分区四、List分区附:查询分区,各区表数据量总结友情链接一、Mysql分区类型 1、RANGE 分区:基于属于...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作