MySQL学习笔记十四

第十六章创建高级联结

16.1使用表别名

输入:

SELECT CONCAT(vend_name,'(',RTRIM(vend_country),')') AS vend_title
FROM vendors
ORDER BY vend_name;

输出:

输入:

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

输出:

说明:别名除了用于列名和计算字段外,SQL还允许给表名起别名,这样做一是可以缩短SQL语句,二是可以允许在单条SELECT语句中多次使用相同的表。表别名只在查询执行中使用。

16.2使用不同类型的联结

16.2.1自联结

输入:

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

输出:

说明:使用表别名的原因之一就是能在单条SELECT语句中不止一次的引用相同的表。上面的例子就是想要查找与商品ID为DTNTR的商品同一个供应商的其他产品。这里是借助子查询解决了问题,首先找到该商品对应的供货商ID,再将其作为过滤条件筛选该供应商的其他产品。

输入:

SELECT p1.prod_id, p1.prod_name
FROM products p1, products p2
WHERE p1.vend_id = p2.vend_id
AND p2.prod_id = 'DTNTR';

输出:

说明:这里的逻辑其实就是自己和自己对账,但是只要产品ID为DTNTR的对应行,由于是对P2中的行进行的筛选,选择的列名应该是P1中的。如果写成P2的,会发生如下所示的结果。

输入:

SELECT p2.prod_id, p2.prod_name
FROM products p1, products p2
WHERE p1.vend_id = p2.vend_id
AND p2.prod_id = 'DTNTR';

输出:

说明:这个结果的出现是因为已经要求了P2中的商品ID是DTNTR,P1中所有行对应的P2中的行都是该商品代码的,P1中有几条记录就筛选出了几条。

16.2.2自然联结

输入:

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

输出:

说明:输出图没有截全。无论何时对表进行联结,应该至少有一个列出现在不止一个表中(被联结的列)。标准的联结返回所有的数据,甚至相同的列多次出现。自然联结排除多次出现,使每个列只返回一次。自然联结只能选择那些唯一的列,这一般是通过对表使用通配符(SELECT *),对所有其他表的列使用明确的子集来完成的。迄今为止建立的每个内部联结都是自然联结,不是自然联结的内部联结可能永远都不会用到。

16.2.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_id, orders.order_num
FROM customers RIGHT OUTER JOIN orders
ON customers.cust_id = orders.cust_id;

输出:

说明:外部联结是指联结包含了那些在相关表中没有关联的行。使用OUTER JOIN时,必须使用RIGHT和LEFT关键字指定包含其所有行的表(RIGHT指出OUTER JOIN右边的表,右边的表是依据,所有行都被保存,哪怕是左边的表匹配不上的也要保存。LEFT指出OUTER JOIN左边的表,左边的表是依据,所有行都被保存。),两种联结可以通过颠倒FROM或WHERE子句中的表的顺序相互转换。

16.3使用带聚集函数的联结

输入:

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_id进行分组。

输入:

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;

输出:

16.4使用联结和联结条件

  • 注意所使用的联结的类型,一般使用内部联结,但使用外部联结也是有效的。
  • 保证使用正确的联结条件。
  • 总是应该提供联结条件,否则会得出笛卡尔积。
  • 一个联结中可以包含多个表,甚至对于每个联结可以采用不同的联结类型,但在一起测试它们之前,分别测试每个联结会使故障排除更加简单。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/77372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring MVC 框架 的核心概念、组件关系及流程的详细说明,并附表格总结

以下是 Spring MVC 框架 的核心概念、组件关系及流程的详细说明,并附表格总结: 1. 核心理念 Spring MVC 是基于 MVC(Model-View-Controller)设计模式 的 Web 框架,其核心思想是 解耦: Model:数…

Android里蓝牙使用流程以及问题详解

一、基础流程 请简述 Android 蓝牙开发的基本流程 1. 权限处理:动态申请蓝牙和定位权限(注意Android 12新权限) 2. 初始化蓝牙适配器:通过BluetoothManager获取BluetoothAdapter 3. 设备发现:- 注册BroadcastReceive…

OpenWrt 上安装Tailscale

在 OpenWrt 上安装 Tailscale 非常简单,主要步骤如下: 1. 确保 OpenWrt 设备可联网 首先,确保你的 OpenWrt 设备已经联网,可以访问外网,并且 SSH 进入你的路由器(通常是 192.168.1.1)&#xff…

蓝桥杯刷题总结 + 应赛技巧

当各位小伙伴们看到这篇文章的时候想必蓝桥杯也快开赛了,那么本篇文章博主就来总结一下一些蓝桥杯的应赛技巧,那么依旧先来走个流程 那么接下来我们分成几个板块进行总结 首先是一些基本语法 编程语言的基本语法 首先是数组,在存数据的时候…

TCP重传率高与传输延迟问题

目录标题 排查步骤:TCP重传率高与传输延迟问题v1.0通过 rate(node_netstat_Tcp_RetransSegs[3m]) 排查 TCP 重传问题的步骤1. **指标含义与初步分析**2. **关联指标排查**3. **定位具体问题源**4. **解决方案**5. **验证与监控** v2.0一、基础检查二、网络层分析三、…

【LeetCode 热题100】73:矩阵置零(详细解析)(Go语言版)

🚀 力扣热题 73:矩阵置零(详解 多种解法) 📌 题目描述 给定一个 m x n 的整数矩阵 matrix,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请你 原地 使用常量空间解决。 &#x1f3a…

组播网络构建:IGMP、PIM 原理及应用实践

IP组播基础 组播基本架构 组播IP地址 一个组播IP地址并不是表示具体的某台主机,而是一组主机的集合,主机声明加入某组播组即标识自己需要接收目的地址为该组播地址的数据IP组播常见模型分为ASM模型和SSM模型ASM:成员接收任意源组播数据&…

Unity UGUI使用手册

概述 UGUI(Unity Graphical User Interface) :Unity 图像用户界面 在游戏开发中,我们经常需要搭建一些图形用户界面。Unity内置的UGUI可以帮助开发者可视化地拼接界面,提高开发效率。UGUI提供不同样式的UI组件,并且封装了对应功能的API&am…

Python web程序在服务器上面部署详细步骤

在服务器上部署Python web程序通常涉及以下步骤: 设置服务器环境: 选择合适的服务器,如AWS EC2、DigitalOcean Droplet等。配置服务器操作系统,例如Ubuntu、CentOS等。安装必要的软件,如Python、pip、git等。 准备Python web程序…

条件生成对抗网络(Conditional GAN, CGAN)原理及实现(pytorch版)

CGAN 原理及实现 一、CGAN 原理1.1 基本概念1.2 与传统GAN的区别1.3 目标函数1.4 损失函数1.5 条件信息的融合方式1.6 与其他GAN变体的对比1.7 CGAN的应用1.8 改进与变体 二、CGAN 实现2.1 导包2.2 数据加载和处理2.3 构建生成器2.4 构建判别器2.5 训练和保存模型2.6 绘制训练损…

Go语言比较递归和循环执行效率

一、概念 1.递归 递归是指一个函数在其定义中直接或间接调用自身的编程方法 。简单来说,就是函数自己调用自己。递归主要用于将复杂的问题分解为较小的、相同类型的子问题,通过不断缩小问题的规模,直到遇到一个最简单、最基础的情况&#x…

keepalived高可用介绍

keepalived 是 Linux 一个轻量级的高可用解决方案,提供了心跳检测和资源接管、检测集群中的系统服务,在集群节点间转移共享IP 地址的所有者等。 工作原理 keepalived 通过 VRRP(virtual router redundancy protocol)虚拟路由冗余…

数据分享:汽车测评数据

说明:如需数据可以直接到文章最后关注获取。 1.数据背景 Car Evaluation汽车测评数据集是一个经典的机器学习数据集,最初由 Marko Bohanec 和 Blaz Zupan 创建,并在 1997 年发表于论文 "Classifier learning from examples: Common …

NLP简介及其发展历史

自然语言处理(Natural Language Processing,简称NLP)是人工智能和计算机科学领域中的一个重要分支,致力于实现人与计算机之间自然、高效的语言交流。本文将介绍NLP的基本概念以及其发展历史。 一、什么是自然语言处理&#xff1f…

HOOPS Visualize:跨平台、高性能的三维图形渲染技术解析

在当今数字化时代,三维可视化技术已成为众多行业的核心竞争力。HOOPS Visualize作为一款功能强大的三维图形渲染引擎,凭借其卓越的渲染能力、跨平台支持、丰富的交互功能、高度定制化以及快速部署等特性,为开发人员提供了构建高质量、高性能3…

蓝桥杯速成刷题清单(上)

一、1.排序 - 蓝桥云课 &#xff08;快速排序&#xff09;算法代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N 5e5 10; int a[N];int main() {int n;cin >> n;for (int i 0; i < n; i) {cin >> a[i];}sort(a, a n);for …

Java面试黄金宝典44

1. 查看进程的运行堆栈信息命令 gstack gstack 是 Linux 系统下用于查看指定进程运行时堆栈信息的工具。当程序出现崩溃、死锁或者性能瓶颈等问题时,借助 gstack 可以查看进程中各个线程的调用栈,从而辅助开发人员定位问题。 定义 gstack 本质上是一个封装了底层 ptrace 系统…

嵌入式硬件篇---TOF陀螺仪SPI液晶屏

文章目录 前言1. TOF传感器&#xff08;Time of Flight&#xff09;原理STM32使用方法硬件连接SDASCLVCC\GND 软件配置初始化I2C外设库函数驱动&#xff1a;读取数据 2. 陀螺仪&#xff08;如MPU6050&#xff09;原理STM32使用方法硬件连接SDA/SCLINTVCC/GND 软件配置初始化I2C…

【scikit-learn基础】--『预处理』之 正则化

数据的预处理是数据分析&#xff0c;或者机器学习训练前的重要步骤。 通过数据预处理&#xff0c;可以 提高数据质量&#xff0c;处理数据的缺失值、异常值和重复值等问题&#xff0c;增加数据的准确性和可靠性整合不同数据&#xff0c;数据的来源和结构可能多种多样&#xff…

LeetCode Hot100 刷题笔记(2)—— 子串、普通数组、矩阵

目录 前言 一、子串 1. 和为 K 的子数组 2. 滑动窗口最大值 3. 最小覆盖子串 二、普通数组 4. 最大子数组和 5. 合并区间 6. 轮转数组 7. 除自身以外数组的乘积 8. 缺失的第一个正数 三、矩阵 9. 矩阵置零 10. 螺旋矩阵 11. 旋转图像 12. 搜索二维矩阵 II 前言 一、子串&#…