返回顶部
首页 > 资讯 > 数据库 >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://lsjlt.com/news/36837.html(转载时请注明来源链接)

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

猜你喜欢
  • MySQL创建高级联结的方法
    1.  使用表别名别名除了用于列名和计算字段外, SQL还允许给表名起别名。这样做有两个主要理由:缩短SQL语句;允许在单条SELECT语句中多次使用相同的表。mysql> SELE...
    99+
    2024-04-02
  • mysql必知必会-创建高级联结
    使用表别名 使用别名引用被检索的表列 别名除了用于列名和计算字段外,SQL还允许给表名起别名。这样做 有两个主要理由: 缩短SQL语句; 允许在单条 SELECT 语句中多次使用相同的表。 可以看到, FROM 子...
    99+
    2017-02-25
    mysql必知必会-创建高级联结
  • 【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
  • 创建生成级联上级字符的函数
    需求:现有表dw,里面字段bm(编码),sj(上级编码),      新增字段px,要求在新字段中添加字符串,字符串为单位的级联上级及自身, 并从顶向下,从左到右排序,中间以“...
    99+
    2024-04-02
  • mysql创建表的语法结构和表的使用方法
    首先我们都知道只有成功创建数据库后,才能创建数据表,数据表是字段的集合,在表中数据按行和列的格式存储。创建表MySQL 使用 CREATE TABLE 创建表。其中有多个选择,主要由表创建定义(create...
    99+
    2024-04-02
  • mysql主从的创建方法
    这篇文章主要介绍“mysql主从的创建方法”,在日常操作中,相信很多人在mysql主从的创建方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql主从的创建方法”的疑惑...
    99+
    2024-04-02
  • mysql中创建表的方法
    小编给大家分享一下mysql中创建表的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.mysql中创建数据表的语法CREATE TABLE&nbs...
    99+
    2023-06-14
  • pandas创建series的三种方法小结
    目录pandas创建series方法创建方法一Series 创建方法二Series 创建方法三Pandas的Series常用方法1. 创建Series2. Series追加3. Se...
    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级联复制的方法示例
    所谓级联复制就是master服务器,只给一台slave服务器同步数据,然后slave服务器在向后端的所有slave服务器同步数据,降低master服务器的写压力,和复制数据的网络IO。 一,配置master...
    99+
    2024-04-02
  • mysql创建数据库的方法
    不知道大家之前对类似mysql创建数据库的方法的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完mysql创建数据库的方法你一定会有所收获的。使用MySQL来创建数据...
    99+
    2024-04-02
  • mysql里创建函数的方法
    这篇文章主要介绍了mysql里创建函数的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql里创建函数的方法:首先查看创建函数的功能是否...
    99+
    2024-04-02
  • mysql count提高方法总结
    mysql想必很多程序猿都是不陌生的。很多人在纠结count的用法,怎么样才能查询效果最好。今天来谈谈小编的一些看法,仅供参考。 1、咱们先准备建一个表,并准备好测试数据方便后续步骤测试 以InnoDB引擎...
    99+
    2024-04-02
  • MySQL存储过程高级SQL语句怎么创建
    本篇内容主要讲解“MySQL存储过程高级SQL语句怎么创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL存储过程高级SQL语句怎么创建”吧!MySQL...
    99+
    2022-12-28
    mysql sql
  • SQLServer创建索引的5种方法小结
    目录前期准备:创建聚集索引方法 1、方法 2、创建复合索引创建覆盖索引创建唯一索引筛选索引总结:前期准备: create table Employee ( ID int not null prim...
    99+
    2023-04-26
    SQLServer创建索引 SQLServer索引创建
  • SQL中联合主键创建的方法是什么
    在SQL中,创建联合主键即是通过在CREATE TABLE语句中使用多个列名来定义主键。例如: CREATE TABLE examp...
    99+
    2024-04-09
    sql
  • 创建MySQL子分区方法
    本文主要给大家介绍创建MySQL子分区方法,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下创建MySQL子分区方法吧。CREATE TABL...
    99+
    2024-04-02
  • VUE中常用的四种高级方法总结
    目录1. provide/inject2. 自定义v-model3. 事件总线(EventBus)3.1 创建一个全局Vue实例作为事件总线:3.2 在需要发送事件的组件中,使用$e...
    99+
    2023-05-18
    vue 高级用法 vue高级技巧 vue常用的方法有哪些
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作