SQL | 计算字段
7-创建计算字段
7.1-计算字段
存储在数据库中的数据一般不是我们所需要的字段格式,
-
需要公司名称,同时也需要公司地址,但是这两个数据存储在不同的列中。
-
省,市,县和邮政编码存储在不同的列中,但是当我们需要发快递时,需要将他们组合在一起。
-
某一列的数据是大小写混写的,但是偶尔我们需要全部大写输出。
-
商品信息存储时,我们一般存储的有商品的数量,商品的总价,但是打印发票时我们需要知道商品的总价格。
-
例如,总数,平均数的计算等等。
上述这些例子,都不是应用程序应该做的事情,只需要我们检索时,经过转换,计算过的数据即可。这就是计算字段可以派上的用场。
字段,与列是相同的概念,经常互换使用,不过数据库列一般称为列,而字段这个术语通常在计算字段这种场合下使用。
需要特别注意,只有数据库知道select语句中,哪些列是实际的数据库表列,哪些列为计算字段。但是从客户端看,计算字段和数据库表列是一样的。
在SQL语句内可完成的许多转换和格式化工作都可以直接在客户端应用程序内完成。但一般来说,在数据库服务器上完成这些操作比在客户端中完成要快得多。
7.2-拼接字段
例如:Vendors表包含供应商名和地址信息。假如要生成一个供应商报表,需要在格式化的名称(位置)中列出供应商的位置。
此报表需要一个值,而表中数据存储在两个列vend_name和vend_country中。此外,需要用括号将vend_country括起来,这些东西都没有存储在数据库表中。
拼接:将值联结到一起(将一个值附加到另一个值)构成单个值
解决办法是把两个列拼接起来。在SQL中的SELECT语句中,可使用一个特殊的操作符来拼接两个列。根据你所使用的DBMS,此操作符可用加号(+)或两个竖杠(||)表示,SQL Server使用+号。DB2、Oracle、PostgreSQL和SQLite使用||。在MySQL和MariaDB中,必须使用特殊的函数。
使用加号(+)的例子:
SELECT vend_name + '(' + vend_country + ')'
FROM Vendors
ORDER BY vend_name;
使用两个竖杠(||)的例子:
SELECT vend_name || '(' || vend_country || ')'
FROM Vendors
ORDER BY vend_name;
MySQL或MariaDB时需要使用的语句:
SELECT Concat(vend_name, ' (', vend_country, ')')
FROM Vendors
ORDER BY vend_name;

由结果可以知道,上述语句先取出存储在vend_name中的名称,然后取出vend_country中的国家,然后使用Concat函数进行拼接,拼接后就会输出上述结果。
注意:有些(并不是所有数据库)数据库进行拼接的时候,会输出为列宽,也就是会多很多空格,所以我们需要使用SQL的RTRIM()函数来处理多余的空格。RTRIM()函数去掉值右边的所有空格。
例如:
SELECT vend_name + '(' + RTRIM(vend_country) + ')'
TRIM函数:大多数DBMS都支持RTRIM()(正如刚才所见,它去掉字符串右边的空格)、LTRIM()(去掉字符串左边的空格)以及TRIM()(去掉字符串左右两边的空格)。
7.2.1 使用别名
SQL支持列别名。别名(alias)是一个字段或值的替换名。别名用AS关键字赋予。
select Concat(vend_name,'(',vend_country,')')
as vend_title
from vendors
order vend_name;

查询到的列会将列名设置为vend_title
AS: as子句是可选的,但是如果有计算字段和拼接字段出现的时候,最好使用它,这被视为一条最佳实践。
别名的其他用途 别名还有其他用途。常见的用途包括在实际的表列名包含不合法的字符(如空格)时重新命名它,在原来的名字含混或容易误解时扩充它。
别名 别名的名字既可以是一个单词,也可以是一个字符串,可读性太差,无论是取别名还是取字段名应当见名知意。如果是后者,字符串应该括在引号中。虽然这种做法是合法的,但不建议这么去做。多单词的名字可读性高,不过会给客户端应用带来各种问题。因此,别名最常见的使用是将多个单词的列名重命名为一个单词的名字。
导出列 别名有时候也被称为导出列,代表的是相同的东西。
7.3-使用算术计算
计算字段另一个用途是对检索出的字段进行算术计算。Orders表包含收到的所有订单,OrderItems表包含每个订单中的各项物品。
select prod_id,quantity,item_price
from orderitems
where order_num = 20008;

上述SQL语句检索订单号为20008的所有订单。
检索到的数据中,item_price为商品单价,如果想要计算每种产品的总价。
select prod_id,quantity,item_price,quantity*item_price as total
from orderitems
where order_num = 20008;

通过数量×单价=总价,就可以得到每种产品的总价值。
SQL支持的基本操作符:

如何测试计算 SELECT语句为测试、检验函数和计算提供了很好的方法。虽然SELECT通常用于从表中检索数据,但是省略了FROM子句后就是简单地访问和处理表达式,例如SELECT 3 * 2;将返回6,SELECT Trim(' abc ');将返回abc,SELECT Curdate();使用Curdate()函数返回当前日期和时间。现在你明白了,可以根据需要使用SELECT语句进行检验。
练习
-
别名的常见用法是在检索出的结果中重命名表的列字段(为了符合特定的报表要求或客户需求)。编写SQL语句,从Vendors表中检索vend_id、vend_name、vend_address和vend_city,将vend_name重命名为vname,将vend_city重命名为vcity,将vend_address重命名为vaddress。按供应商名称对结果进行排序(可以使用原始名称或新的名称)。
select vend_id,vend_name as vname,vend_address as vaddress,vend_city as vcity from vendors order by vname;
-
我们的示例商店正在进行打折促销,所有产品均降价10%。编写SQL语句,从Products表中返回prod_id、prod_price和sale_price。sale_price是一个包含促销价格的计算字段。提示:可以乘以0.9,得到原价的90%(即10%的折扣)。
select prod_id,prod_price,prod_price*0.9 as sale_price from products;
相关文章:
SQL | 计算字段
7-创建计算字段 7.1-计算字段 存储在数据库中的数据一般不是我们所需要的字段格式, 需要公司名称,同时也需要公司地址,但是这两个数据存储在不同的列中。 省,市,县和邮政编码存储在不同的列中,但是当我们…...
leetcode做题笔记67
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 思路一:模拟题意 void reserve(char* s) {int len strlen(s);for (int i 0; i < len / 2; i) {char t s[i];s[i] s[len - i - 1], s[len - i - 1] t;} }char* addBinary(cha…...
fastadmin 自定义搜索分类和时间范围
1.分类搜索,分类信息获取----php 2.对应html页面,页面底部加搜索提交代码(这里需要注意:红框内容) 图上代码----方便直接复制使用 <script id"countrySearch" type"text/html"><!--form…...
Oracle Data Redaction与Data Pump
如果表定义了Redaction Policy,导出时数据会脱敏吗?本文解答这个问题。 按照Oracle文档Advanced Security Guide第13章,13.6.5的Tutorial,假设表HR.jobs定义了Redaction Policy。 假设HR用户被授予了访问目录对象的权限…...
设计模式(6)原型模式
一、介绍 Java中自带的原型模式是clone()方法。该方法是Object的方法,native类型。他的作用就是将对象的在内存的那一块内存数据一字不差地再复制一个。我们写简单类的时候只需要实现Cloneable接口,然后调用Object::clone方法就可实现克隆功能。这样实现…...
pywinauto结合selenium实现文件上传
简介 PC端-Windows上的元素识别可用viewWizard工具 PC端-Windows上的元素操作可用pywinauto库 浏览器上网页的元素识别可用selenium 安装 pip installer pywinauto 使用须知 pywinauto官方文档 确定app的可访问技术 1、win32 API(backend=“win32”) 一般是MFC、VB6、VC…...
【Java多线程学习7】Java线程池技术
线程池技术 一、什么是线程池 线程池顾名思义是管理一组线程的池子。当有任务要处理时,直接从线程池中获取线程来处理,处理完之后线程不会立即销毁,而是等待下一个任务。 二、为什么要使用线程池? 线程池的作用? 1、降低资源…...
VMware虚拟机NAT模式Ubuntu无法上网解决方案
发现只要NAT模式,ping地址时就报网络不可达,且右上方网络图标消失,但是外部USB网络设备又只能在NAT模式下使用。。。 博主的解决方案如下: 按WinR键入services.msc, 找到VMware DHCP Service、VMware NAT Service和V…...
Linux中无法忘记mysql密码处理办法
找到/etc/my.cnf或者/etc/mysql/my.cnf文件 添加下面两行代码,取消密码验证 [mysqld] skip-grant-table使用命令登录:mysql -u root -p,回车,回车使用sql语句来修改密码 mysql>use mysql; mysql>update user set password…...
vue 使用 el-upload 上传文件(自动上传/手动上传)
vue 使用 el-upload 上传文件(自动上传/手动上传) 文章目录 1. 自动上传(选择完文件后,调用axios上传)2.手动上传 1. 自动上传(选择完文件后,调用axios上传) <el-uploadref"upload1"action:multiple"false"accept".xlsx,.csv,.xls":auto-upl…...
服务器遭受攻击之后的常见思路
哈喽大家好,我是咸鱼 不知道大家有没有看过这么一部电影: 这部电影讲述了男主是一个电脑极客,在计算机方面有着不可思议的天赋,男主所在的黑客组织凭借着超高的黑客技术去入侵各种国家机构的系统,并引起了德国秘密警察…...
C语言学习笔记 使用vscode外部console出现闪退-12
前言 在使用vscode的外部console时,会出现闪退现象,这是因为程序运行结束后,系统自动退出了终端(终端机制决定的)。我们可以在C程序结束后,使用system函数来暂停DOS终端系统,这样就可以完整地看…...
从Spring源码看Spring如何解决循环引用的问题
Spring如何解决循环引用的问题 关于循环引用,首先说一个结论: Spring能够解决的情况为:两个对象都是单实例、且通过set方法进行注入。 两个对象都是单实例,通过构造方法进行注入,Spring不能进行循环引用问题&#x…...
03 - 通过git log可以查看版本演变历史
通过git log可以查看版本演变历史 主要包括: commit 哈希id提交的Author信息提交的日期和时间commit info信息 git log本人常用,显示简洁: git log --oneline当log条数很多的时候,可以如下指定显示的数量: git log…...
【图论】单源最短路
算法提高课笔记。(本篇还未更新完… 目录 单源最短路的建图方式例题热浪题意思路代码 信使题意思路代码 香甜的黄油题意思路代码 最小花费题意思路代码 最优乘车题意思路代码 昂贵的聘礼题意思路代码 单源最短路的建图方式 最短路问题可以分为以下两类:…...
闻道网络:2023宠物消费网络营销洞察数据报告(附下载)
关于报告的所有内容,公众【营销人星球】获取下载查看 核心观点 行业持续升级,增速放缓,正朝着多元化和专业化的方向发展;自公共事件以来,因,“猫不用遛”,养猫人士增速迅猛反超犬主人…...
Docker 安装和架构说明
Docker 并非是一个通用的容器工具,它依赖于已存在并运行的Linux内核环境。 Docker实质上是在已经运行的Liunx下制造了一个隔离的文件环境,因此他的执行效率几乎等同于所部署的linux主机。因此Docker必须部署在Linux内核系统上。如果其他系统想部署Docke…...
101. 对称二叉树
题目 原题链接 : 101.对称二叉树 题面 : 对于这一题呢,题目要求给出递归和迭代两种方式来解决!!! 注 : 这一题不仅仅是判断左右两个子节点是否对称,而是要遍历两棵树而且要比较内侧和外侧节点 递归 先确认递归三要素 : 确定递归函数的参数和返回值 bool …...
cmake应用:集成gtest进行单元测试
编写代码有bug是很正常的,通过编写完备的单元测试,可以及时发现问题,并且在后续的代码改进中持续观测是否引入了新的bug。对于追求质量的程序员,为自己的代码编写全面的单元测试是必备的基础技能,在编写单元测试的时候…...
静态时序分析与时序约束
一、时序分析的基本概念 1. 时钟 理性的时钟模型是一个占空比为50%且周期固定的方波: 实际电路中输入给FPGA的晶振时钟信号是正弦波: 2. 时钟抖动 Clock Jitter,时钟抖动,相对于理想时钟沿,实际时钟存在不随时钟存在…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
