当前位置: 首页 > news >正文

【MySQL】创建高级联结

目录

一、使用表别名

二、使用不同类型的联结

1.自联结

2.自然联结

3.外部联结

3.使用带聚集函数的联结

4.使用联结和联结条件


一、使用表别名

别名除了用于列名和计算字段外,SQL还允许给表名起别名

起别名有两个好处:

  • 一个是缩短SQL语句;
  • 一个是允许在单条select语句中多次使用相同的表。

示例:

输入:select prod_name,prod_desc

          from products as p,vendors as v

          where p.vend_id = v.vend_id

          and prod_price = 4.5;

输出:

 from子句中两个表都有别名,products AS p建立p作为products的别名,等等。这使得能使用省写的p而不是全名products。在此例子中,表别名只用于where子句。但是表别名不仅能用于where子句,它还可以用于select的列表、order by子句以及子句的其他部分。

注意:表别名只在查询执行中使用。与列别名不一样,表别名不反悔到客户机。

二、使用不同类型的联结

1.自联结

当在相同的一张表中查询且该表的表名要出现2次在select语句中时使用自联结。即自己和自己联结。

使用子查询:

输入:select prod_id,prod_name

           from products

           where vend_id =  

                                   (select vend_id

                                    from products

                                    where prod_id = 2);

使用自联结:

输入: select p1.prod_id,p2.prod_name

            from products as p1,products as p2

            where p1.vend_id = p2.vend_id

            and p2.prod_id = 2;

输出:

 products第一次出现为别名p1,第二次出现为别名p2。select语句使用p1前缀明确的给出所需列的全名,如果不这样,MySQL将返回错误的数据。

自联结和子查询都可以进行在相同的表中进行查询,返回的结果是相同的,但是自联结更快一些。

2.自然联结

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

示例:

输入:

select c.*,o.order_num,o.order_date

           from customers as c,orders as o

           where c.cust_id = o.cust_id

           and prod_id = 3;

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

3.外部联结

许多联结将一个表的行与另一个表中的行进行联结,但有时候会需要包含没有关联行的那些行。

联结包含了那些在相关表中没有关联行的行。这种类型的联结被称为外部联结。

示例:

输入:select customers,cust_id,orders.order_num

           from customers inner join orders

          on customers.cust_id = orders.cust_id;

此处的inner join用来指定表,只不过要用on进行联结而不是where,传递出给on的实际条件与传递给where的相同。

输入:select customers.cust_id,orders.order_num

          from customers left outer join orders

          on customers.cust_id = orders_id;

以上两个查询语句返回的结果是相同的。

第二条select语句采用了outer join来指定联结的类型(代替where)。但是,与内部联结关联两个表中的行不同的是:外部联结还包括没有关联的行。在使用outer join语法时,必须使用right或left关键字指定包括其所有行的表(right指出的是outer join右边的表,left则相反)。left outer join则是选择from子句中左边的表(customers表)中选择所有行,right outer join 则是选择orders表中的所有行。

注意:在外部联结中可通过颠倒from或where子句中的表的顺序转换为右外部联结。因此,两种类型的外部联结都可以互换使用。

3.使用带聚集函数的联结

聚集函数用来汇总数据。这些函数也可以和联结一起使用。

4.使用联结和联结条件

  1. 注意所使用的联结类型。一般使用内部联结,但使用外部联结也是有效的
  2. 保证使用正确的联结条件,否则将返回不正确的数据
  3. 应该总是提供联结条件,否则会得出笛卡儿积
  4. 在一个联结中可以包含多个表,甚至对于每个联结可以采用不同的联结类型。但应该在测试它们之前,分别测试每个联结。这将使故障排除更为方便。

http://www.lryc.cn/news/118617.html

相关文章:

  • chatGPT应用于房地产行业
  • java之jmh初识及使用
  • 利用状态监测和机器学习提高冷却塔性能的具体方法
  • LeetCode_02_1289. 下降路径最小和 II
  • consul servicecheck 查看健康信息
  • 什么是信息孤岛?如何打破信息孤岛?
  • Android开源 Skeleton 骨架屏
  • 都说IT就业难?到底难在哪?
  • STM32芯片的内部架构介绍
  • Angular FormControl value属性的一些事
  • Nim游戏:取石头
  • springboot国际化
  • 12种不宜使用的Javascript语法
  • vue3+element-plus点击列表中的图片预览时,图片被表格覆盖
  • flutter:二维码生成与读取
  • Camunda 7.x 系列【14】核心概念
  • matplotlib 笔记:hist2d 2D直方图
  • 数据库优化脚本执行报错
  • TopN漏洞--sql注入
  • 【论文阅读】UNICORN:基于运行时来源的高级持续威胁检测器(NDSS-2020)
  • Linux的基本介绍和常用命令
  • Flutter 中
  • 可视化高级绘图技巧100篇-总论
  • Android AOSP源码编译——AOSP下载(一)
  • Qt 文件对话框使用 Deepin风格
  • .net core 配置swagger
  • leetcode707. 设计链表(单链表+虚拟头指针+双指针遍历)
  • 电脑麦克风没声音?
  • React Native元素旋转一定的角度
  • LeetCode 1749. 任意子数组和的绝对值的最大值