美文网首页
MySQL——创建高级联结(十)

MySQL——创建高级联结(十)

作者: 开心糖果的夏天 | 来源:发表于2017-06-21 22:58 被阅读49次

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

一、使用不同类型的联结

1.自联结

自联结通常作为外部语句来替代从相同表中检索数据时使用的子查询语句。虽然最终的结果是相同的,但有时候处理联结比处理子查询快得多。
例如:假如发现某物品(其ID为DTNTR)存在问题,因此想知道生产该物品的供应商生产的其他物品是否也存在这些问题。此查询要求首先找到生产ID为DTNTR的物品的供应商,然后找出这个供应商生产的其他物品。
方法一:

SELECT prod_id, prod_name FROM products WHERE vend_id = (SELECT vend_id FROM products WHERE prod_id = 'DTNTR');

此语句的输出如下图所示:



方法二(使用联结):

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';

此语句的输出如下图所示:


2.自然联结

无论何时对表进行联结,应该至少有一个列出现在不止一个表中(被联结的列)。标准的联结返回所有数据,甚至相同的列多次出现。自然连接排除多次出现,使每个列只返回一次。

自然联结是这样一种联结,其中你只能选择那些唯一的列。这一般是通过对表使用通配符(SELECT *),对所有其他表的列使用明确的子集来完成的。示例如下:

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';

3.外部联结

许多联结将一个表中的行与另一个表中的行相关联。但有时候会需要包含没有关联行的那些行。
内部联结如下:

SELECT customers.cust_id,orders.order_num FROM customers INNER JOIN orders ON customers.cust_id=orders.cust_id;

此语句的输出如下图所示:



外部联结如下:

SELECT customers.cust_id,orders.order_num FROM customers LEFT OUTER JOIN orders ON customers.cust_id=orders.cust_id;

此语句的输出如下图所示:


二、使用带聚集函数的联结

例如:检索所有客户以及每个客户所下的订单数。

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;

此语句的输出如下图所示:

三、使用联结和联结条件

(1)注意所使用的联结类型。一般我们使用内部联结,但使用外部联结也是有效的。
(2)保证使用正确的联结条件,否则将返回不正确的数据。
(3)应该总是提供联结条件,否则会得出笛卡尔积。
(4)在一个联结中可以包含多个表,甚至对于每个联结可以采用不同的联结类型。虽然这样做是合法的,一般也很有用,但应该在一起测试他们前,分别测试每个联结。这将使故障排除更为简单。

相关文章

  • MySQL——创建高级联结(十)

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQ...

  • Mysql创建高级联结

    一、使用表别名 咱们之前看到了如何使用别名引用被检索的表列。给列起别名的语法: mysql>select Conc...

  • 《SQL必知必会》笔记7-高级联结(as、self-join、o

    1 创建高级联结(别名、自联结、外联结) 1.1 使用表别名AS 使用别名的两个主要理由: 缩短SQL语句。 允许...

  • 03随风而逝

    写写今天学到的知识, 简单,少。 《mysql必知必会》:有 子查询,联结表,高级联结,组合查询,插入数据,更新和...

  • _13_ 创建高级联结

    本文DEMO https://gitee.com/changsanjiang/SQLDemo/tree/maste...

  • 【SQL】(十三):创建高级联结

    本系列为自己学习时的笔记及心得体会,转载请注明出处。 1、给表起别名 无需多说,给个例子: 2、使用不同类型的联结...

  • chapter16:创建高级联结

    使用表别名 SQL允许给表名起别名,理由如下: 缩短SQL语句; 允许在单挑SELECT语句中多次使用相同的表。例...

  • SQL必知必会学习笔记3

    SQL必知必会学习笔记3 十三、创建高级联结 1.使用表别名 警告: Oracle中没有AS,直接指定Custom...

  • 【MySQL笔记】4 子查询与创建联结

    MySQL笔记基于教材,笔记中用到的数据库可以点击该链接下载 子查询 Subquery 在多张表间查询相关的信息时...

  • MySQL笔记2

    MySQL笔记2 创建计算字段 1、拼接字段 拼接(concatenate):将值联结到一起(将一个值附加到另一个...

网友评论

      本文标题:MySQL——创建高级联结(十)

      本文链接:https://www.haomeiwen.com/subject/clcaqxtx.html