SQL UNION 操作符 | 菜鸟教程
SQL UNION 操作符 | 菜鸟教程
菜鸟教程 -- 学的不仅是技术,更是梦想!
首页
HTML
CSS
JavaScript
Vue
Bootstrap
NodeJS
Python3
Python2
Java
C
C++
C#
Go
SQL
Linux
jQuery
本地书签
首页
HTML
CSS
JS
本地书签
Search
Python3 教程
Python2 教程
Vue3 教程
vue2 教程
Bootstrap3 教程
Bootstrap4 教程
Bootstrap5 教程
Bootstrap2 教程
SQL 教程
SQL 教程
SQL 简介
SQL 语法
SQL SELECT
SQL SELECT DISTINCT
SQL WHERE
SQL AND & OR
SQL ORDER BY
SQL INSERT INTO
SQL UPDATE
SQL DELETE
SQL 高级教程
SQL SELECT TOP
SQL LIKE
SQL 通配符
SQL IN
SQL BETWEEN
SQL 别名
SQL 连接(JOIN)
SQL INNER JOIN
SQL LEFT JOIN
SQL RIGHT JOIN
SQL FULL JOIN
SQL UNION
SQL SELECT INTO
SQL INSERT INTO SELECT
SQL CREATE DATABASE
SQL CREATE TABLE
SQL 约束
SQL NOT NULL
SQL UNIQUE
SQL PRIMARY KEY
SQL FOREIGN KEY
SQL CHECK
SQL DEFAULT
SQL CREATE INDEX
SQL DROP
SQL ALTER
SQL Auto Increment
SQL 视图
SQL 日期
SQL NULL 值
SQL NULL 函数
SQL 通用数据类型
SQL DB 数据类型
SQL 函数
SQL 函数
SQL AVG()
SQL COUNT()
SQL FIRST()
SQL LAST()
SQL MAX()
SQL MIN()
SQL SUM()
SQL GROUP BY
SQL HAVING
SQL EXISTS
SQL UCASE()
SQL LCASE()
SQL MID()
SQL LEN()
SQL ROUND()
SQL NOW()
SQL FORMAT()
SQL 快速参考
SQL 主机
SQL 总结
SQL FULL OUTER JOIN 关键字
SQL SELECT INTO 语句
SQL UNION 操作符
SQL UNION 操作符合并两个或多个 SELECT 语句的结果。
SQL UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
SQL UNION 语法
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
SQL UNION ALL 语法
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
注释:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
演示数据库
在本教程中,我们将使用 RUNOOB 样本数据库。
下面是选自 "Websites" 表的数据:
mysql> SELECT * FROM Websites;
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
| 4 | 微博 | http://weibo.com/ | 20 | CN |
| 5 | Facebook | https://www.facebook.com/ | 3 | USA |
| 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND |
+----+---------------+---------------------------+-------+---------+
下面是 "apps" APP 的数据:
mysql> SELECT * FROM apps;
+----+------------+-------------------------+---------+
| id | app_name | url | country |
+----+------------+-------------------------+---------+
| 1 | QQ APP | http://im.qq.com/ | CN |
| 2 | 微博 APP | http://weibo.com/ | CN |
| 3 | 淘宝 APP | https://www.taobao.com/ | CN |
+----+------------+-------------------------+---------+
3 rows in set (0.00 sec)
SQL UNION 实例
下面的 SQL 语句从 "Websites" 和 "apps" 表中选取所有不同的country(只有不同的值):
实例
SELECT country FROM WebsitesUNIONSELECT country FROM appsORDER BY country;
执行以上 SQL 输出结果如下:
注释:UNION 不能用于列出两个表中所有的country。如果一些网站和APP来自同一个国家,每个国家只会列出一次。UNION 只会选取不同的值。请使用 UNION ALL 来选取重复的值!
SQL UNION ALL 实例
下面的 SQL 语句使用 UNION ALL 从 "Websites" 和 "apps" 表中选取所有的country(也有重复的值):
实例
SELECT country FROM WebsitesUNION ALLSELECT country FROM apps
ORDER BY country;
执行以上 SQL 输出结果如下:
带有 WHERE 的 SQL UNION ALL
下面的 SQL 语句使用 UNION ALL 从 "Websites" 和 "apps" 表中选取所有的中国(CN)的数据(也有重复的值):
实例
SELECT country, name FROM WebsitesWHERE country='CN'UNION ALL
SELECT country, app_name FROM appsWHERE country='CN'ORDER BY
country;
执行以上 SQL 输出结果如下:
SQL FULL OUTER JOIN 关键字
SQL SELECT INTO 语句
3 篇笔记
写笔记
#0 转身幻影 lxi***sheng@163.com 83
select country from websites union select country from apps;
--连接两个表的查询结果集,重复的不显示
select country from websites union all select country from apps order by country;
--连接俩个个表的查询结果集,显示重复
select country,name from websites where country = 'CN' union all
select country,app_name from apps where country='CN' order by name;
--通过where条件查询的结果,连接连个表的结果集,并根据名字排序。转身幻影 转身幻影 lxi***sheng@163.com7年前 (2017-07-14)
#0 笙歌如梦 mhx***zy@163.com 176使用UNION命令时需要注意,只能在最后使用一个ORDER BY命令,是将两个查询结果合在一起之后,再进行排序!绝对不能写两个ORDER BY命令。另外,在使用ORDER BY排序时,注意两个结果的别名保持一致,使用别名排序很方便。当然也可以使用列数。笙歌如梦 笙歌如梦 mhx***zy@163.com7年前 (2017-07-20)
#0 官官 gua***n2011@163.com 87ORDER BY 除了可以对指定的字段进行排序,还可以使用函数进行排序:
order by abs(a);
ORDER BY 只能当前 SQL 查询结果进行排序,如要对 union all 出来的结果进行排序,需要先做集合。
select aa.* from
(select country,name from websites where country = 'CN'
union all select country,app_name from apps where country='CN' ) aa
order by aa.name;官官 官官 gua***n2011@163.com6年前 (2018-09-06)
点我分享笔记
取消
分享笔记
昵称昵称 (必填)
邮箱邮箱 (必填)
引用地址引用地址
分类导航
HTML / CSSHTML 教程HTML5 教程CSS 教程CSS3 教程Bootstrap3 教程Bootstrap4 教程Bootstrap5 教程Font Awesome 教程Foundation 教程 JavaScriptJavaScript 教程HTML DOM 教程jQuery 教程AngularJS 教程AngularJS2 教程Vue.js 教程Vue3 教程React 教程TypeScript 教程jQuery UI 教程jQuery EasyUI 教程Node.js 教程AJAX 教程JSON 教程Echarts 教程Chart.js 教程Highcharts 教程Google 地图 教程 服务端Python 教程Python2.x 教程Linux 教程Docker 教程Ruby 教程Java 教程C 教程C++ 教程Perl 教程Servlet 教程JSP 教程Lua 教程Rust 教程Scala 教程Go 教程PHP 教程数据结构与算法Django 教程FastAPI 教程Zookeeper 教程设计模式正则表达式Maven 教程Verilog 教程ASP 教程AppML 教程VBScript 教程 数据库SQL 教程MySQL 教程PostgreSQL 教程SQLite 教程MongoDB 教程Redis 教程Memcached 教程 数据分析Python 教程NumPy 教程Pandas 教程Matplotlib 教程Scipy 教程R 教程Julia 教程 移动端Android 教程Swift 教程jQuery Mobile 教程ionic 教程Kotlin 教程 XML 教程XML 教程DTD 教程XML DOM 教程XSLT 教程XPath 教程XQuery 教程XLink 教程XPointer 教程XML Schema 教程XSL-FO 教程SVG 教程 ASP.NETASP.NET 教程C# 教程Web Pages 教程Razor 教程MVC 教程Web Forms 教程 Web ServiceWeb Service 教程WSDL 教程SOAP 教程RSS 教程RDF 教程 开发工具Eclipse 教程Git 教程Svn 教程Markdown 教程 网站建设HTTP 教程网站建设指南浏览器信息网站主机教程TCP/IP 教程W3C 教程网站品质
Advertisement
反馈/建议
在线实例
·HTML 实例
·CSS 实例
·JavaScript 实例
·Ajax 实例
·jQuery 实例
·XML 实例
·Java 实例
字符集&工具
· HTML 字符集设置
· HTML ASCII 字符集
· JS 混淆/加密
· PNG/JPEG 图片压缩
· HTML 拾色器
· JSON 格式化工具
· 随机数生成器
最新更新
·
Rust 宏
·
Seaborn 教程
·
Pandas 相关性分析
·
31.2k star, 免...
·
Dev Home —...
·
免费开源的 AI ...
·
11.2k star, 免...
站点信息
·
意见反馈
·
免责声明
·
关于我们
·
文章归档
关注微信
Copyright © 2013-2024 菜鸟教程
runoob.com All Rights Reserved. 备案号:闽ICP备15012807号-1
微信关注
C语言丨关键字union的定义和使用 - 知乎
C语言丨关键字union的定义和使用 - 知乎首发于C语言切换模式写文章登录/注册C语言丨关键字union的定义和使用沐歌爱编程为框架而生,为架构而死,为编程奋斗一辈子。union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。但在“联合”中, 各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度 。一个联合体类型必须经过定义之后, 才能使用它,才能把一个变量声明定义为该联合体类型。当定义结构对象时,如果没有显式地初始化它们,则会采用一般初始化规则:如果该结构对象属于动态存储类型,那么其成员具有不确定的初始值。另一方面,如果结构对象具有静态存储周期,那么其非指针成员初始值是 0,其指针成员初始值是空指针。不同于结构成员——它们在结构中都具有单独的内存位置,联合成员则共享同一个内存位置。也就是说,联合中的所有成员都是从相同的内存地址开始。因此,可以定义一个拥有许多成员的联合,但是同一时刻只能有一个成员允许含有一个值。联合让程序员可以方便地通过不同方式使用同一个内存位置。一、定义联合(union)联合的定义方式与结构是一样的,只是把关键字 struct 改成 union:union [标签名称]{成员声明列表};下面的例子定义了一个名为Data的联合类型,它有 3 个成员:i、x 和 str:union Data { int i;double x;char str [16];};这种类型的对象可以存储一个整数、一个浮点数或一个短字符串。例如:union StateMachine { char character; int number; char *str; double exp; }; 一个union 只配置一个足够大的空间以来容纳最大长度的数据成员,以上例而言,最大长度是double 型态,所以StateMachine 的空间大小就是double 数据类型的大小。 在C++里,union 的成员默认属性页为public。union 主要用来压缩空间。如果一些数据不可能在同一时间同时被用到,则可以使用union。 二、初始化联合(union)与结构类似,通过初始化列表(initialization list)来初始化联合对象。但是,对联合来说,列表只有一个初始化器(initializer)。与结构一样,C99 允许在初始化器中使用成员指示符来指示哪个成员被初始化。而且,如果初始化器没有成员指示符,那么就与联合内的第一个成员关联。具有自动存储类的联合对象也可以使用已有的同类型对象来初始化。下面是一些初始化例子:union Data var1={77},var2={.str="Mary"},var3=var1,myData[100]={{.x=0.5},{1},var2};数组 myData 中的元素如果没有指定初始化器,会被隐式地初始化为 0 值。三、联合体变量的声明 联合变量的说明和结构变量的声明方式相同, 也有三种形式: 第一种 , 先定义联合体类型,再声明联合体变量 ; 第二种 ,定义联合体类型的同时声明联合体变量; 第三种 ,直接声明联合体(以匿名的形式定义联合体类型)。以perdata类型为例,说明如下: 第一种, 先定义联合体类型,再声明联合体变量union perdata{ int class; char officae[10];};union perdata a,b; /*说明a,b为perdata类型*/第二种, 定义联合体类型的同时声明联合体变量:union perdata{ int class;char office[10]; } a , b ;第三种, 直接声明联合体(以匿名的形式定义联合体类型):union{ int class;char office[10]; }a,b 经说明后的a,b变量均为perdata类型。a,b变量的长度应等于 perdata 的成员中最长的长度, 即等于office数组的长度,共10个字节。对a,b变量如赋予整型值时,只使用了2个字节,而赋予字符数组时,可用10个字节。四、联合体变量的赋值和使用 对联合体变量的赋值,使用都只能是对变量的成员进行。 联合变量的成员表示为: 联合变量名 . 成员名 例如,a被说明为perdata类型的变量之后,可使用 a.class,a.office 不允许只用联合变量名作赋值或其它操作。 也不允许对联合变量作初始化赋值,赋值只能在程序中进行。一个联合体变量, 每次只能赋予一个成员值。一个联合变量的值就是联合变员的某一个成员值。五、struct和union和区别1.结构和联合都是由多个不同的数据类型成员组成的,但是在任一时刻联合只存放一个被选中的成员,而结构的所有成员都存在。2。对于联合的不同成员赋值,将会对其他成员重写,原来成员的值就不存在了,而对结构的不同成员赋值是会不影响的。对联合变量的赋值,都只能对变量的成员进行,一个联合变量每次只能赋值给一个成员,一个联合变量的值就是当前联合变量的某一个成员值。应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。如果你正在学习编程遇到瓶颈,感到迷茫,困惑,值得加入我的【C语言C++学习企鹅圈子】学习交流,技术探讨,面试指导,简历修改...还有超多源码素材等学习资料,零基础的视频等着你!编程学习书籍:编程学习视频:发布于 2021-02-06 14:17UnionC(编程语言)C语言关键字赞同 174 条评论分享喜欢收藏申请转载文章被以下专栏收录
联合体(union)的使用方法及其本质-CSDN博客
>联合体(union)的使用方法及其本质-CSDN博客
联合体(union)的使用方法及其本质
最新推荐文章于 2023-09-02 16:33:56 发布
秦伟H
最新推荐文章于 2023-09-02 16:33:56 发布
阅读量10w+
收藏
768
点赞数
234
分类专栏:
C
深入浅出C语言
文章标签:
c语言
union
联合体
大端
使用
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/huqinwei987/article/details/23597091
版权
C
同时被 2 个专栏收录
36 篇文章
37 订阅
订阅专栏
深入浅出C语言
10 篇文章
167 订阅
订阅专栏
有些基础知识快淡忘了,所以有必要复习一遍,在不借助课本死知识的前提下做些推理判断,温故知新。
1.联合体union的基本特性——和struct的同与不同
union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。
不过区别也挺明显:
结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全分配。
而联合体(union)中是各变量是“互斥”的——缺点就是不够“包容”;但优点是内存使用更为精细灵活,也节省了内存空间。
2.双刃剑——多种访问内存途径共存
一个例子了然:
//example
#include
union var{
long int l;
int i;
};
main(){
union var v;
v.l = 5;
printf("v.l is %d\n",v.i);
v.i = 6;
printf("now v.l is %ld! the address is %p\n",v.l,&v.l);
printf("now v.i is %d! the address is %p\n",v.i,&v.i);
}
结果:
v.l is 5
now v.l is 6! the address is 0xbfad1e2c
now v.i is 6! the address is 0xbfad1e2c
所以说,管union的叫共用体还真是贴切——完全就是共用一个内存首地址,并且各种变量名都可以同时使用,操作也是共同生效。如此多的access内存手段,确实好用,不过这些“手段”之间却没法互相屏蔽——就好像数组+下标和指针+偏移一样。
上例中我改了v.i的值,结果v.l也能读取,那么也许我还以为v.l是我想要的值呢,因为上边提到了union的内存首地址肯定是相同的,那么还有一种情况和上边类似:
一个int数组变量a,一个long int(32位机中,long int占4字节,与int相同)变量b,我即使没给int变量b赋值,因为数据类型相同,我使用int变量b也完全会拿出int数组a中的a[0]来,一些时候一不小心用上,还以为用的就是变量b呢~
这种逻辑上的错误是很难找出来的(只有当数据类型相去甚远的时候稍好,出个乱码什么的很容易发现错误)。
#include
union var{
long int l;
int i;
};
int main(){
union var v;
v.l = 5;
printf("%ld\n",v.l);
v.i = 6;
}
3.联合体union和大小端(big-endian、little-endian): 下边示范了一种用途,代表四个含义的四个变量,但是可以用一个int来操作,直接int赋值,无论内存访问(指针大小的整数倍,访问才有效率),还是时间复杂度(一次和四次的区别,而且这四次有三次都是不整齐的地址),都会低一些。
#include
union var{
char c[4];
int i;
};
int main(){
union var data;
data.c[0] = 0x04;//因为是char类型,数字不要太大,算算ascii的范围~
data.c[1] = 0x03;//写成16进制为了方便直接打印内存中的值对比
data.c[2] = 0x02;
data.c[3] = 0x11;
//数组中下标低的,地址也低,按地址从低到高,内存内容依次为:04,03,02,11。总共四字节!
//而把四个字节作为一个整体(不分类型,直接打印十六进制),应该从内存高地址到低地址看,0x11020304,低位04放在低地址上。
printf("%x\n",data.i);
}
结果: 11020304 证明我的32位linux是小端(little-endian)
4.联合体union所占内存空间大小: 前边说了,首先,union的首地址是固定的,那么,union到底总共有多大?根据一些小常识,做个不严谨不高深的基础版验证吧。 根据:分配栈空间的时候内存地址基本上是连续的,至少同类型能保证在一起,连续就说明,我如果弄三个结构体出来,他们三个地址应该连着,看一下三个地址的间隔就知道了。
#include
union sizeTest{
int a;
double b;
};
main(){
union sizeTest unionA;
union sizeTest unionB;
union sizeTest unionC;
printf("the initial address of unionA is %p\n",&unionA);
printf("the initial address of unionB is %p\n",&unionB);
printf("the initial address of unionC is %p\n",&unionC);
}
打印,可以看到结果: the initial address of unionA is 0xbf9b8df8 the initial address of unionB is 0xbf9b8e00 the initial address of unionC is 0xbf9b8e08 很容易看出,8,0,8,这间隔是8字节,按double走的。 怕不保险,再改一下,把int改成数组,其他不变:
union sizeTest{
int a[10];
double b;
};
打印 the initial address of unionA is 0xbfbb7738 the initial address of unionB is 0xbfbb7760 the initial address of unionC is 0xbfbb7788 88-60=28 60-38=28 算错了?我说的可是16进制0x。那么0x28就是40个字节,正好是数组a的大小。
忘了提一个功能——sizeof()
用sizeof直接看,就知道union的大小了
printf("the sizeof of unionA is %d\n",sizeof(unionA));
printf("the sizeof of unionB is %d\n",sizeof(unionB));
printf("the sizeof of unionC is %d\n",sizeof(unionC));
printf("the sizeof of union is %d\n",sizeof(union sizeTest));
上边说的地址规律,没有特定规则,也可能和你的编译器有关。另外,那只是栈空间,还可以主动申请堆空间,当然,堆空间就没有连续不连续一说了。
5.联合体union适用场合: 有了前边那个验证,基本可以确认,union的内存是照着里边占地儿最大的那个变量分的。 也就可以大胆的推测一下,这种union的使用场合,是各数据类型各变量占用空间差不多并且对各变量同时使用要求不高的场合(单从内存使用上,我觉得没错)。 像上边做的第二个测试,一个数组(或者更大的数组int a[100]),和一个或者几个小变量写在一个union里,实在没什么必要,节省的空间太有限了,还增加了一些风险(最少有前边提到的逻辑上的风险)。所以,从内存占用分析,这种情况不如直接struct。
不过话说回来,某些情况下虽然不是很节约内存空间,但是union的复用性优势依然存在啊,比如方便多命名,这种“二义性”,从某些方面也可能是优势。这种方法还有个好处,就是某些寄存器或通道大小有限制的情况下,可以分多次搬运。
6.本质&进阶:
根据union固定首地址和union按最大需求开辟一段内存空间两个特征,可以发现,所有表面的定义都是虚的,所谓联合体union,就是在内存给你划了一个足够用的空间,至于你怎么玩~它不管~!(何止是union和struct,C不就是玩地址么,所以使用C灵活,也容易犯错)
没错,union的成员变量是相当于开辟了几个访问途径(即union包含的变量)!但是,没开辟的访问方式就不能用了?当然也能用!
写个小测试:
#include
union u{
int i;
double d;//这个union有8字节大小
};
main(){
union u uu;
uu.i = 10;
printf("%d\n",uu.i);
char * c;
c = (char *)&uu;//把union的首地址赋值、强转成char类型
c[0] = 'a';
c[1] = 'b';
c[2] = 'c';
c[3] = '\0';
c[4] = 'd';
c[5] = 'e';
//最多能到c[7]
printf("%s\n",c);//利用结束符'\0'打印字符串"abc"
printf("%c %c %c %c %c %c\n",c[0],c[1],c[2],c[3],c[4],c[5]);
}
一个例子了然,我的结构体只定义了int和double“接口”,只要我获得地址,往里边扔什么数据谁管得到?这就是C语言(不止union)的本质——只管开辟一段空间。
但是你获取地址并访问和存取的数据,最好确定是合法(语法)合理(用途符合)的地址,不然虽然能操作,后患无穷,C的头疼之处,可能出了问题你都找不到。
最近发现博客盗版严重(尤其是C结构体这篇),允许正规转载,欢迎举报盗版,感谢。博客https://blog.csdn.net/huqinweI987/article/details/23597091。
====================================================================================================================================
补充:
补充1:
解决一下捧场网友的困惑。
关于“有名”与“无名”联合体在结构体内所占空间的问题,其实这和是不是结构体无关,只和“有名”、“无名”有关,而且有名无名也是表象,其实是声明类型与定义变量的区别,看例子,直接打印,
#include
struct s1{
union u{
int i;
};
struct ss1{
int i;
};
};
struct s2{
union{
int i;
};
struct{
int i2;
};
};
struct s3{//the same to s2
union su3{
int i;
}su33;
struct ss3{
int i;
}ss33;
};
union su4{
int i;
};
struct ss4{
int i;
};
struct s4{//the same to s3
union su4 su44;
struct ss4 ss44;
};
struct s5{//the same to s1
union su4;
struct ss4;
};
struct s6{//the same to s1
union{
int;
};
struct{
int;
};
};
main(){
struct s1 sVal1;
struct s2 sVal2;
struct s3 sVal3;
struct s4 sVal4;
struct s5 sVal5;
struct s6 sVal6;
printf("sVal1's size:%d\n",sizeof(sVal1));
printf("sVal1:%p\t%d\n",&sVal1,sVal1);
printf("sVal2's size:%d\n",sizeof(sVal2));
printf("sVal2:%p\t%d\n",&sVal2,sVal2);
printf("sVal3's size:%d\n",sizeof(sVal3));
printf("sVal3:%p\t%d\n",&sVal3,sVal3);
printf("sVal4's size:%d\n",sizeof(sVal4));
printf("sVal4:%p\t%d\n",&sVal4,sVal4);
printf("sVal5's size:%d\n",sizeof(sVal5));
printf("sVal5:%p\t%d\n",&sVal5,sVal5);
printf("sVal6's size:%d\n",sizeof(sVal6));
printf("sVal6:%p\t%d\n",&sVal6,sVal6);
}
地址供参考,主要看size,分别为:
0,8,8,8,0,0
s1只有类型声明,没有定义,没有变量自然就没有空间占用(s5同)。
s2这种写法就是直接定了union和struct。
s3和s2的区别,只是s2过于简化,s3的意思是既声明了union su3,又定义了这个类型对应的变量su33.
s4和s5作为对比,为了更好的说明这一点。s5也是纯“贴”表达式,没声明变量。
s6乍一看类似s2,其实union内部没有具体变量,也是为了做对比的。和s1的不同之处是,一个是外部的union,一个是内部的int,都是干声明不定义,所以没成员,不占用空间。
类型就是类型,和是不是结构体、联合体无关的,你的“int i;”中i不就是个变量吗?如果换成int;结果相同(这就是s6)。
另外,这种做法编译的时候GCC会给你在相应的行做出提示“union_with_name.c:49: 警告:没有声明任何东西”
很多人表示打印结果不一样,我试过很多次,不一样的环境,都是一样的。
========================================================================================================================================================================================================================================================================
以上仅属于个人心得和推测,重点在于学习思维和推理验证过程,不保证正确性与权威性。有兴趣讨论或者有发现错误的,欢迎留言交流指正。 觉得好的,欢迎转载并注明出处。http://blog.csdn.net/huqinwei987/article/details/23597091 本人博客会根据个人经验升级情况随时补充修改。
优惠劵
秦伟H
关注
关注
234
点赞
踩
768
收藏
觉得还不错?
一键收藏
知道了
44
评论
联合体(union)的使用方法及其本质
有些基础知识快淡忘了,所以有必要复习一遍,在不借助课本死知识的前提下做些推理判断,温故知新。1.联合体union的基本特性——和struct的同与不同union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。不过区别也挺明显:结构体(struct)中所有变量是“共存”的...
复制链接
扫一扫
专栏目录
错误:sem_union的存储大小未知问题的解决方法
12-31
今天在编译代码的时候提示 错误: ‘sem_union’的存储大小未知
问题原因:在新版2.6内核中关于union sem_union 这个联合体已经被注释了,需要自己写这个联合体.
解决方案:在C文件中先定义:
union semun
{
int val;
struct semid_ds *buf;
unsigned short *array;
}sem_union;
随后编译时它就能找到预先定义好的sem_union联合体了.
Linux下编译时出现的错误及解决方法
(1)由于是Linux新手,所以现在才开始接触线程编程,照着GUN/Linux编程指南中的一个例子输入编译,结果出现
C语言 超详细 零基础入门 共用体(union) typedef的使用
最新发布
我亦无他,唯手熟尔
12-08
748
尚硅谷C语言零基础入门教程(宋红康c语言程序设计精讲,含C语言考研
44 条评论
您还未登录,请先
登录
后发表或查看评论
C语言编程中的联合体union入门学习教程
01-21
联合体(union)在C语言中是一个特殊的数据类型,能够存储不同类型的数据在同一个内存位置。可以定义一个联合体使用许多成员,但只有一个部件可以包含在任何时候给定的值。联合体会提供使用相同的存储器位置供多用途的有效方式。
定义联合体
要定义联合体,必须使用union语句很相似于定义结构。联合体声明中定义了一个新的数据类型,程序不止一个成员。联合体声明的格式如下:
union [union tag]
{
member definition;
member definition;
...
member definition;
} ;
union标签是可选的,每个成员的定义是一个正
联合体(共用体)的简单介绍
2301_76445610的博客
09-02
766
联合也是一种特殊的自定义类型。
这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。
MySql(5)—— union、limit
qq_44824574的博客
02-27
907
union
合并查询结果集
案例:查询工作岗位是MANAGER和SALESMAN的员工?
select ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';
select ename,job from emp where job in('MANAGER','SALESMAN');
+--------+----------+
| ename | job |
+--------+----------+
| ALLEN | SAL
C语言 | 联合体详解
热门推荐
嵌入式大杂烩
08-02
4万+
一、什么是联合体?
在C语言中,变量的定义是分配存储空间的过程。一般的,每个变量都具有其独有的存储空间,那么可不可以在同一个内存空间中存储不同的数据类型(不是同事存储)呢?
答案是可以的,使用联合体就可以达到这样的目的。联合体也叫共用体,在C语言中定义联合体的关键字是union。
定义一个联合类型的一般形式为:
union 联合名
{
成员表
};
成员表中含有若干成员,成员的一般形式为: 类型...
【C/C++】union联合体介绍
sinat_41752325的博客
10-09
987
联合体union用法
C/C++中的联合体union介绍
会意的博客
06-17
2万+
目录
union定义与简单使用
内存分配与所占空间
多种访问内存途径共存
数据存储位置
union应用之寄存器读取
union,中文名“联合体、共用体”,在某种程度上是类似结构体struct的一种数据结构,联合体(union)和结构体(struct)同样可以包含很多种数据类型和变量。
CODESYS 联合体变量(Union)
RXXW_Dor的博客
07-13
907
联合Union也是一种特殊的自定义类型这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体),联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)
认识联合体(共用体)以及联合体大小的计算方法
challenglistic的博客
10-23
1807
认识联合体(共用体)
联合体(共用体) union 的深入理解
anyway33的博客
03-27
5679
1.联合类型的定义:
联合也是一种特殊的自定义类型
这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。//联合类型的声明
union Un
{
char c;
int i;
};
//联合变量的定义
union Un un;
//计算连个变量的大小
printf("%d\n", sizeof(un));
解析:联合体(并不一定是共用完全部,有可能是不完全共用,只共用一小部分;或是联合体中的其他元素加起来的字节数要大于最大的那个元素的字节数,会把联合体共用完.
union联合体使用详解
weixin_34318326的博客
07-03
339
1.联合体联合体(union)与结构体(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在联合体中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。应该说
明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧...
union(联合体、结构体)的简介与使用
Xm行墨的博客
05-25
3万+
以前在学习C语言或C++的时候,只学习了一些常用的语法。对于一些少见的本着后面遇到了再来学的目的,就没有去学习过。
今天早上看群里面有人问,float怎么转换为4个字节。我一想,这不是我以前做协议解析时候的问题吗,当时我是用指针强制转换的方法去实现的。方法就像下面那代码片段一样。
//转换float数据到字节数组
unsigned char i;
float floatVariable;
u...
C语言-联合体union
爱上电路设计的博客
05-12
1万+
C语言-联合体union
c语言:联合体—union
m0_73790767的博客
12-12
2472
关于联合体的说明
【联合体的定义、大小;联合体变量的定义、初始化、访问和赋值】(学习笔记15--联合体)
北豼不太皮的博客
03-20
4986
目录联合体的定义联合体的大小联合体变量的定义联合体变量的初始化联合体变量的访问和赋值
联合体也称共用体或公用体,它和结构体相像,主要在类型定义格式的成员访问方面,但在内存存储上却有着天壤之别
联合体的定义
使用union关键字
union 联合体名
{
数据类型 成员1;
数据类型 成员2;
...
};
和结构体的定义格式非常相似,唯一不同的地方,就是把关键字struct换成了union
联合体的大小
联合体变量的定义
联合体变量的初始化
联合体变量的访问和赋值
...
C语言union(联合体 共用体)
paddybear的专栏
10-05
808
一直以来,union都是个很少用到的东西,对于这些不常用的结构往往记不住。这次看书又看到了,还是学习一下吧。
一般在Windows API的一些数据结构中才能看到这个union,其实并不复杂。本质上来说和结构体是一样的,但是从包装的角度来看有差异。
1、union中可以定义多个成员,union的大小由最大的成员的大小决定。
2、union成员共享同一块大小的内存,一次只能使用其中的一个
联合体union内存对齐
10-26
联合体(union)内存对齐和结构体(struct)内存对齐有些相似,但是也有一些不同。在联合体中,各成员共享同一段内存空间,一个联合变量的长度等于各成员中最长的长度。因此,联合体的字节数为最大成员的字节数。在...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
秦伟H
CSDN认证博客专家
CSDN认证企业博客
码龄15年
暂无认证
211
原创
3951
周排名
4138
总排名
168万+
访问
等级
1万+
积分
1万+
粉丝
1284
获赞
352
评论
4074
收藏
私信
关注
热门文章
C语言结构体(struct)常见使用方法
647859
联合体(union)的使用方法及其本质
199418
一步一步学调试——gdb命令小结
41626
云盘秒传原理的探讨——哈希查找与数据去重
36243
CF卡技术详解——笔记
32137
分类专栏
计算机视觉
8篇
SLAM
4篇
CV
7篇
三维重建
7篇
深入浅出C语言
10篇
非线性优化
1篇
轻松上手TensorFlow
14篇
学习note
65篇
《C++ PRIMER》笔记
24篇
shell&cmd
4篇
C++
38篇
C
36篇
杂七杂八
8篇
嵌入式
11篇
NAND FLASH
2篇
移植
SHELL
5篇
Linux
13篇
学习方法
2篇
algorithm
6篇
reverse string without buffer
1篇
by word
1篇
反转字符串
1篇
单词
1篇
逐字
1篇
流媒体
1篇
Live555
1篇
服务器
9篇
sql
7篇
游标
1篇
声明
1篇
变量
1篇
epoll
1篇
TCP
1篇
socket
1篇
缓冲区
1篇
编辑器试用
游戏开发
2篇
机器学习
27篇
python
21篇
tensorflow
19篇
分类问题
1篇
one-hot
2篇
classification
1篇
深度学习
23篇
算法
3篇
最新评论
C语言结构体(struct)常见使用方法
桂可欣:
后面花里胡哨的东西似是我看过的一篇无用文章
ubuntu20.04 root用户下使用中文输入法——root用户pycharm无法用中文输入法问题
dfh274112211:
不管用啊,有弄好的么
使用auto-encoder实现数据压缩、分类预测
Jiu__Yue:
你好,请问有空解答一下我的疑惑吗?请问怎么理解“因为两层全连接层的输出同是10(encode输出是3维,所以fc1没设置太大,没意义;en2以前不小于12,所以fc1也没设太小),有点像平行输出,所以第二层不能再加tanh激活,准确率会下降。” 中的描述: encoder输出是三维? 平行输出?不能再加tanh?
vs2015(VS2017等)配置属性里面没有c/c++ bug
廿八都啊:
添加源文件之后,就有C/C ++选项了
三维重建(SFM):针对360全景切割图像的单目重建的增量问题的分析与改进(colmap)
自律的人最帅:
大佬,对于全景图像重建有发现更优的方案吗,可以分享一下不?同做AR。
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
liosam 速腾RoboSense 32线激光雷达数据适配,timestamp位数不够
open_vins 安装(ubuntu18.04 opencv3.2.0)
ubuntu多用户环境dockerbug,卸载重装docker流程
2024年1篇
2023年8篇
2022年2篇
2021年10篇
2020年8篇
2019年21篇
2018年17篇
2017年1篇
2016年25篇
2015年18篇
2014年35篇
2013年9篇
2012年29篇
2011年35篇
目录
目录
分类专栏
计算机视觉
8篇
SLAM
4篇
CV
7篇
三维重建
7篇
深入浅出C语言
10篇
非线性优化
1篇
轻松上手TensorFlow
14篇
学习note
65篇
《C++ PRIMER》笔记
24篇
shell&cmd
4篇
C++
38篇
C
36篇
杂七杂八
8篇
嵌入式
11篇
NAND FLASH
2篇
移植
SHELL
5篇
Linux
13篇
学习方法
2篇
algorithm
6篇
reverse string without buffer
1篇
by word
1篇
反转字符串
1篇
单词
1篇
逐字
1篇
流媒体
1篇
Live555
1篇
服务器
9篇
sql
7篇
游标
1篇
声明
1篇
变量
1篇
epoll
1篇
TCP
1篇
socket
1篇
缓冲区
1篇
编辑器试用
游戏开发
2篇
机器学习
27篇
python
21篇
tensorflow
19篇
分类问题
1篇
one-hot
2篇
classification
1篇
深度学习
23篇
算法
3篇
目录
评论 44
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
C语言union的用法及好处_union函数-CSDN博客
>C语言union的用法及好处_union函数-CSDN博客
C语言union的用法及好处
最新推荐文章于 2024-01-24 17:00:00 发布
字节工匠
最新推荐文章于 2024-01-24 17:00:00 发布
阅读量2.5w
收藏
289
点赞数
91
分类专栏:
linux
文章标签:
linux
c语言
1024程序员节
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/rchris520/article/details/109232732
版权
linux
专栏收录该内容
2 篇文章
1 订阅
订阅专栏
Union 的用法以及好处
什么是Union?
union 共用体名{ 成员列表 };
union,“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。
结构体和共用体的区别在于: 结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全分配。而联合体(union)中是各变量是“互斥”的——缺点就是不够“包容”;但优点是内存使用更为精细灵活,也节省了内存空间。
结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
为什么使用union?
1.解决“相同信息”的困扰,避免重复代码,提高代码的简洁性。
相同成员公用,差异成员则通过 union 区分,这就避免了代码重复,也避免了代码耦合。
2.节省内存
C语言程序常用于资源比较紧张的嵌入式设备中,因此合格的C语言程序员应该都是“抠门”的,尽可能的节约资源。如果一些数据不可能在同一时间同时被用到,则可以使用union。
如何使用union?
Video info 是用于描述视频信息的结构体
有视频的地方常常也会有音频,所以我们的C语言程序还需要描述音频信息。音频信息也包括名称、地址、时间等信息,不过它也有与视频不同的参数,例如采样率,通道数。所以使用C语言描述音频信息,可以使用下面这个结构体:
这样一来,C语言程序描述视频和音频就简单了,只要使用 video_info 和 audio_info 结构体就可以了:
但是video_info 和 audio_info 仅个别成员不同,可以合并同类项:
合并以后需要描述视频和音频时,都使用 av_info 结构体:
不过,这样虽然将 video_info 和 audio_info 的重复代码合并了,同样也导致结构体所占用的内存变大了。同时代码的耦合性增强:用于描述视频的 vinfo 也能访问音频才有的 chnnl_cnt,用于描述音频的 ainfo 也能访问视频的 alg。
那这种情况下,C语言有没有办法,既能避免重复代码,又能避免耦合,同时还能节约资源呢?自然是有的,C语言中的 union 语法就是为此而设计的:
因为视音频都有名称、地址、大小信息,所以 av_info 中的 name,address,size 成员在描述视频和音频时都会被使用。视音频具有差异的几个成员则使用 union 描述,union 中的 vinfo和 ainfo 共用一块内存区域。
此时访问视频的编码算法和时间信息,可以如下实现:
访问音频的采样率和通道数,可以如下实现:
从上面这几行C语言代码可以看出,此时视音频的相同成员公用,差异成员则通过 union 区分,这就避免了代码重复,也避免了代码耦合。另外,由于union 中的 vinfo和 ainfo 共用一块内存空间,内存浪费的问题也解决了。这里说的节省内存,是相对于直接合并video_info 和 audio_info那种情况的节省。
这里继续补充一下ip地址的情况:
有ipv4自然就会有ipv6,所以一个结构体最好能同时描述出ipv6和ipv4。
这样子的话,就会省去很多重复的代码,不必为ipv4和ipv6分别定义两个结构体,只需要一个结构体就能描述它们了。
另一种节省内存的方式:
数据不会被同时应用。比如变量a 仅仅只是作为函数开头的一个循环控制值,退出循环后既不做返回值,也不作它用,这时候它所申请的栈内存空间的浪费的。b用作循环后面计算浮点数的,这时候使用union定义这个两个变量确实会节省内存
优惠劵
字节工匠
关注
关注
91
点赞
踩
289
收藏
觉得还不错?
一键收藏
知道了
13
评论
C语言union的用法及好处
Union 的用法以及好处什么是Union?union 共用体名{ 成员列表};union,“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。结构体和共用体的区别在于: 结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全分配。而联合体(union)中是各变量是“互斥”的——缺点就是不够“包容”;但优点是内存使..
复制链接
扫一扫
专栏目录
C++11中union的使用方法示例
01-01
前言
union即为联合,它是一种特殊的类。通过关键字union进行定义,一个union可以有多个数据成员。例如
union Token{
char cval;
int ival;
double dval;
};
c++11中union除了继承c语言的数据共享内存之外,行为上越来越像一个类,比如成员默认是public类型。
在C++11以后,很多基础语法都进行了修正。其中 union 的行为向类对象进行了发展,在兼容原有语法定义的基础上进行了扩充:
union可以拥有成员函数(包含构造函数和析构函数),但是不能有虚函数
union不能参与继承,不能成为基类也不能成为子类
unio
C语言中联合体union的实例详解
12-31
C语言中联合体union的实例详解
1.定义:
union(int i, short s, char c) un;
un.i = 3;
printf(“i=%d”,un.i);
printf(“length = %d\n”,sizeof(un);//==4,有最大的变量来决定
2.相当与java里的List T类型
3.数据交换
void swap(int *p , int *q){
int temp = *p;
*p = *q;
*q = temp;
}
4、打印地址
int i = 2;
printf(“%#x”,&i);
5.指针打印数组值
int arr[]
13 条评论
您还未登录,请先
登录
后发表或查看评论
C语言、C++中的union用法总结
09-04
主要介绍了C语言、C++中的union用法总结,本文讲解了什么是union、C中使用union、当union遇到对象等内容,需要的朋友可以参考下
C语言常见面试题:什么是联合体,联合体的作用是什么?
最新发布
dxl920807的博客
01-24
947
需要注意的是,由于联合体中的所有成员变量都占用同一块内存空间,因此同时只能存储其中的一个成员变量的值。此外,由于联合体的内存对齐规则,它可能会导致内存的使用效率降低。因此,在使用联合体时需要根据实际情况进行权衡和选择。在上面的代码中,我们定义了一个名为data的联合体,它包含了整型变量i、浮点型变量f和字符数组str。需要注意的是,联合体中的所有成员变量都占用同一块内存空间,并且同时只能存储其中的一个成员变量的值。联合体(union)是一种特殊的数据类型,它可以在同一块内存单元中存储不同的数据类型。
C语言 联合(union)
qq_43001551的博客
03-14
5409
1. 联合简介
联合(union)是一种数据类型,他能在同一块空间中存储不同数据类型,但不是同时存储。如果我们想设计一种结构,其能存储一些既无规律,也无顺序的数据,那么就可以用到联合。
创建联合和创建结构体相同,需要声明一个模板,再用这个模板创建变量,下面给出例子:
union STU
{
int num;
char sex;
double score;
char name[32];
};...
超详细C语言联合体union详解
m0_57180439的博客
09-22
2万+
文章目录前言一、联合(共用体)定义二、联合的特点及运用三、联合的大小计算总结
前言
上一期C语言快速入门我们学习了枚举类型及相关知识点,这期我们来跟着笔者学习一下联合体相关知识,相信聪明的你一定会有所收获!
提示:以下是本篇文章正文内容,下面案例可供参考
一、联合(共用体)定义
联合是一种特殊的自定义类型,该种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间,所以联合体也被称为共用体。
代码如下(示例):
#include
union Un//联合类型的声明.
C++:34---union:联合/共用体,一种节省空间的类
已离职-自由职业选手
12-10
930
一、联合(union)概述联合(union)是一种特殊的类一个union可以有多个数据成员,但是在任意时刻只有一个数据成员可以有值。当我们给union的某个成员赋值之后,该union的其...
sql union()函数
欢迎一起学习交流
09-29
1893
union 取的并集中,sql查询返回的结果,必须拥有相同的列,列的类型也必须相同。union 函数用于对两个或者多个sql查询结果进行取并集操作。对两个或者多个 sql查询结果取并集操作,并会过滤掉重复数据。对两个或者多个 sql查询结果取并集操作,不会过滤掉重复数据。有两张班级表class1和class2,查询两个班级中的得分,取并集。
union和union all函数的使用
boos_zhao的博客
12-15
2万+
union和union all函数的使用
在开发中,有些数据的存储可能涉及到分库分表,查询的时候,可能需要查询所有的分表,这个时候,就需要用到UNION或者UNION ALL。
1.union的使用:
UNION操作符用于合并两个或多个SELECT语句的结果集。
使用注意事项:
UNION内部的SELECT语句必须拥有相同数量的列,列也必须拥有相似的数据类型。
每条SELECT语句中列的顺序必须相同。
SELECT ID,name FROM emp1
UNION
SELECT ID,name
C语言-联合体union
爱上电路设计的博客
05-12
1万+
C语言-联合体union
C语言 | 联合体详解
热门推荐
嵌入式大杂烩
08-02
4万+
一、什么是联合体?
在C语言中,变量的定义是分配存储空间的过程。一般的,每个变量都具有其独有的存储空间,那么可不可以在同一个内存空间中存储不同的数据类型(不是同事存储)呢?
答案是可以的,使用联合体就可以达到这样的目的。联合体也叫共用体,在C语言中定义联合体的关键字是union。
定义一个联合类型的一般形式为:
union 联合名
{
成员表
};
成员表中含有若干成员,成员的一般形式为: 类型...
C语言中的结构体和联合体
Peter的专栏
02-17
3280
【推荐阅读】C语言指针-从底层原理到花式技巧,用图文和代码帮你讲解透彻嵌入式工程师常用的宏定义C语言实现面向对象的原理在 C 语言中,结构体(struct)是一个或多个变量的集合,这些变量...
C语言学习之共用体union
01-06
以前在学习c语言的时候,有接触过共用体。 彼时对共用体Union的理解无非就是: union { int a; int b; char c; } 对union内的任意成员赋值都会覆盖掉其他成员,当时觉得很好理解,觉得懂了。 但是对于共用...
C、C++中union用法总结
ny1986的专栏
10-27
3582
开始的话
已经好长时间没有更新了,对不起自己,更对不起我亲爱的读者,同时也对不起自己开办的这个博客平台。忙,太忙了,忙于找工作,找一份好工作,纠结于去大城市闯呢,还是回到本省的首府城市。大家都在纠结这个问题,也希望大家和我讨论讨论。别的先不说了,都工作这么长时间了,还回过头来总结union,确实有点过分,要是和大家说我一直从事于C++开发,还不懂union,大家可能还真的不信。我们每天都在总
python中union函数_如何掌握Python union()方法及怎么用?
weixin_26795617的博客
02-03
1万+
不断学习python的过程里,总能遇到各种形形色色的函数或者方法,本章给大家带来python union的用法,具体内容如下:union()方法描述:union() 取并集,效果等同于 | ,重复元素只会出现一次,但是括号里可以是 list,tuple,其他 , 甚至是 dict语法:set.union(set1,set2...)参数:set1 -- 必需,合并的目标集合set2 -- 可选,其...
python union,Python中的Union()函数
weixin_39793098的博客
03-25
4131
在本文中,我们将学习有关union()在set()类型上执行的操作之一。所有输入集的并集是最小的集合,其中包含所有集合中的元素(集合中不存在重复元素)。语法.union(,.......)返回类型-类型符号-用功能的第一个字母表示,即概率中的“ U”示例#Python3.x.setunion()functionset_1={'a','b'}set_2={'b','c','d'}s...
Python 集合 union()函数使用详解,Python合并集合
wangyuxiang946的博客
07-22
1万+
union() 可以「合并」集合
union() 接收的参数是可迭代类型(iterable ),这意味着我们可以将集合与其他可迭代类型合并。
c语言中联合体作用,浅谈C语言中的联合体
weixin_33656445的博客
05-16
489
联合体union当多个数据须要共享内存或者多个数据每次仅仅取其一时。能够利用联合体(union)。在C Programming Language 一书中对于联合体是这么描写叙述的:1)联合体是一个结构;2)它的全部成员相对于基地址的偏移量都为0;3)此结构空间要大到足够容纳最"宽"的成员;4)其对齐方式要适合当中全部的成员;以下解释这四条描写叙述:因为联合体中的全部成员是共享一段内存的。因此每一个...
union 函数学习
qq_31513339的博客
06-26
3812
今天 学习了union函数,可以把两个不同的表,或者是同一个表,(但是对应的字段必须一致(要联合起来的字段))如一:同一个表create table USERS( id NUMBER, uname VARCHAR2(10), upwd VARCHAR2(10), sex VARCHAR2(10))select t1.uname from USERS t1 where t1.un...
c语言union用法
09-08
C语言中的union是一种特殊的数据类型,它允许在相同的内存位置存储不同的数据类型。union的定义类似于结构体,但不同的是,union中的所有成员共享同一块内存空间。
使用union可以节省内存空间,因为union所占用的内存空间大小等于其最大成员的大小。而且,通过修改union中的一个成员,可以影响到其他成员的值。
下面是一个示例,演示了如何使用union:
```c
#include
union Data {
int i;
float f;
char str[20];
};
int main() {
union Data data;
printf("Memory size occupied by data: %d\n", sizeof(data));
data.i = 10;
printf("Data.i: %d\n", data.i);
data.f = 220.5;
printf("Data.f: %f\n", data.f);
strcpy(data.str, "C Programming");
printf("Data.str: %s\n", data.str);
return 0;
}
```
在上面的示例中,我们创建了一个名为Data的union。它有三个成员:整数i、浮点数f和字符串数组str。在主函数中,我们分别给这些成员赋值,并打印出它们的值。请注意,修改一个成员的值会影响到其他成员的值。
希望对你有所帮助!如果你还有其他问题,请继续提问。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
字节工匠
CSDN认证博客专家
CSDN认证企业博客
码龄6年
暂无认证
3
原创
31万+
周排名
96万+
总排名
4万+
访问
等级
284
积分
14
粉丝
113
获赞
15
评论
391
收藏
私信
关注
热门文章
C语言union的用法及好处
25310
在ARM开发板的屏幕上画一个圆,并使圆动起来
13034
Linux C 消息队列实现简单的聊天功能
2165
分类专栏
Linux C 课程设计99例
【软考】系统架构设计师
数据结构与算法
myprogramme
1篇
linux
2篇
最新评论
C语言union的用法及好处
RE_CALLED:
有一段不太正确,联合体内存未必等于最长成员占用的内存。比如一个联合体有char arr[7]的数组,和一个int,这时候会因为内存对齐机制给联合体分配8个byte。
以上内容为vs2019环境
C语言union的用法及好处
weixin_45511299:
我不太理解,这样的话,那么av.ainfo不久等于av.ainfo了吗?
C语言union的用法及好处
是白小木吖:
终于明白为啥要有union这个东西了!!!!!大佬牛批
C语言union的用法及好处
重修剑心:
需要内存足够大的时候再想想
C语言union的用法及好处
weixin_46794634:
谢谢,清楚明了
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
Linux C 消息队列实现简单的聊天功能
在ARM开发板的屏幕上画一个圆,并使圆动起来
2020年1篇
2018年2篇
目录
目录
分类专栏
Linux C 课程设计99例
【软考】系统架构设计师
数据结构与算法
myprogramme
1篇
linux
2篇
目录
评论 13
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
sql union 详细作用及其用法_sql union 去掉的是哪个-CSDN博客
>sql union 详细作用及其用法_sql union 去掉的是哪个-CSDN博客
sql union 详细作用及其用法
最新推荐文章于 2023-09-11 07:15:00 发布
家里有蜘蛛
最新推荐文章于 2023-09-11 07:15:00 发布
阅读量4.6k
收藏
6
点赞数
4
分类专栏:
# sql server
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44983621/article/details/99657101
版权
sql server
专栏收录该内容
12 篇文章
0 订阅
订阅专栏
sql union用法
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
1.使用union会去除完全重复的值
select stuAge,stuNumber from Tbstudent union
//去除完全相同的一行
2.使用union可以合并相同数据类型列 下面把stuAge和stuMath合并 stuNumber和stuEnglish合并
--union 语法如下 最后一个不写union
select stuAge,stuNumber from Tbstudent union
select stuMath,stuEnglish from Tbstudent
使用union all 则会保留下来完全重复的值 union all和union类似 语法如上。
3.行列转换 union all实例
select MAX(stuEnglish) as 最高分,MIN(stuEnglish) as 最低分,AVG(stuEnglish) as 平均分 from Tbstudent
select '最高分' as 类别,MAX(stuMath) as 分数 from Tbstudent union all
select '最小值' as 类别,MIN(stuMath) as 分数 from Tbstudent union all
select '平均值' as 类别,AVG(stuMath) as 分数 from Tbstudent
转换效果如下: 这个里面用到了union all 因为可能有重复的数据,使用这个不会清除重复的数据。
优惠劵
家里有蜘蛛
关注
关注
4
点赞
踩
6
收藏
觉得还不错?
一键收藏
知道了
0
评论
sql union 详细作用及其用法
sql union用法UNION 操作符用于合并两个或多个 SELECT 语句的结果集。使用union会去除完全重复的值语法如下 最后一个不写union--union select stuAge,stuNumber from Tbstudent unionselect stuMath,stuEnglish from Tbstudentselect MAX(stuEnglish),M...
复制链接
扫一扫
专栏目录
SQLServer2008查询性能优化 2/2
03-02
书名: SQLServer2008查询性能优化
作者: 弗里奇(Grant Fritchey)
出版社: 人民邮电出版社
出版日期: 2010年8月1日
ISBN: 9787115230294
编辑推荐
《SQL Server 2008查询性能优化》为你提供了处理查询性能所需要的工具。建立、维护数据库和数据库服务器可能是个困难的工作。当服务器的运行越来越慢时,这个工作就变得更加困难。来自用户的愤怒的电话以及站在你办公桌周围的管理人员都使你很不快活。在开发代码的同时,如果你花费时间和精力来开发一个性能故障排错的方法。那么你就能避免这种情况——至少可以快速而有效地做出反应。《SQL Server 2008查询性能优化》指出的性能要点之一是数据库随着用户和数据的日益增多而进行扩展的必要性。你需要理解性能低下的起因。以及识别并修复它们的方法。《SQL Server 2008查询性能优化》将帮助你:
使用性能监视器、SQL Trace以及动态管理视图和函数建立性能基线
理解一般系统中发生瓶颈的地方。以及解决瓶颈的方法
识别常见性能问题以及对其快速处理的方法
实施修复甚至预防性能问题的T-SQL最佳实践
《SQL Server 2008查询性能优化》不是理论书籍,它的目的是帮助你避免数据库出现性能低下的状况,它还能帮助你保住你的工作。
内容提要
《SQL Server 2008查询性能优化》通过大量实例,详细介绍了SQL Server数据库系统优化的各种方法和技巧。内容涵盖了数据库应用系统中各种性能瓶颈的表现形式及其发生的根源和解决方法,从硬件瓶颈到查询、索引设计以及数据库管理等,贯穿了数据库系统知识的各个方面。最后以一个实际的工作负载将所有技巧联系起来,并且提供了“宝典”式的最佳实践列表。
《SQL Server 2008查询性能优化》适合于关心数据库应用系统性能的开发人员和数据库管理人员阅读。通过阅读《SQL Server 2008查询性能优化》,不仅可以学习到数据库性能管理的许多知识和技巧,还有助于养成良好的编程习惯,为实现高性能的数据库应用系统打下基础。
目录
第1章 SQL查询性能调整 1
1.1 性能调整过程 2
1.1.1 核心过程 2
1.1.2 迭代过程 4
1.2 性能vs.价格 7
1.2.1 性能目标 7
1.2.2 “足够好”的调整 7
1.3 性能基线 8
1.4 工作的重点 9
1.5 SQL Server性能杀手 10
1.5.1 低质量的索引 10
1.5.2 不精确的统计 11
1.5.3 过多的阻塞和死锁 11
1.5.4 不基于数据集的操作 11
1.5.5 低质量的查询设计 12
1.5.6 低质量的数据库设计 12
1.5.7 过多的碎片 12
1.5.8 不可重用的执行计划 13
1.5.9 低质量的执行计划 13
1.5.10 频繁重编译计划 13
1.5.11 游标的错误使用 13
1.5.12 错误配置数据库日志 14
1.5.13 过多使用或者错误配置tempdb 14
1.6 小结 14
第2章 系统性能分析 15
2.1 性能监视器工具 15
2.2 动态管理视图 17
2.3 硬件资源瓶颈 18
2.3.1 识别瓶颈 18
2.3.2 瓶颈解决方案 19
2.4 内存瓶颈分析 19
2.4.1 SQL Server内存管理 20
2.4.2 Available Bytes 23
2.4.3 Pages/sec和Page Faults/sec计数器 23
2.4.4 Buffer Cache Hit Ratio 24
2.4.5 Page Life Expectancy 24
2.4.6 Checkpoint Pages/sec 24
2.4.7 Lazy writes/sec 24
2.4.8 Memory Grants Pending 25
2.4.9 Target Server Memory(KB)和Total Server Memory(KB) 25
2.5 内存瓶颈解决方案 25
2.5.1 优化应用程序工作负载 26
2.5.2 为SQL Server分配更多内存 27
2.5.3 增加系统内存 27
2.5.4 更换32位处理器为64位处理器 27
2.5.5 启用3GB进程空间 28
2.5.6 在32位SQL Server中使用4GB以上内存 28
2.6 磁盘瓶颈分析 29
2.6.1 磁盘计数器 30
2.6.2 % Disk Time 30
2.6.3 Current Disk Queue Length 31
2.6.4 Disk Transfers/sec 31
2.6.5 Disk Bytes/sec 32
2.6.6 Avg. Disk Sec/Read和Avg. Disk Sec/Write 32
2.7 磁盘瓶颈解决方案 32
2.7.1 优化应用程序工作负载 33
2.7.2 使用更快的磁盘驱动器 33
2.7.3 使用一个RAID阵列 33
2.7.4 使用SAN系统 35
2.7.5 恰当地对齐磁盘 35
2.7.6 使用电池后备的控制器缓存 36
2.7.7 添加系统内存 36
2.7.8 创建多个文件和文件组 36
2.7.9 将表和索引放在不同的磁盘上 39
2.7.10 将日志文件保存到独立的物理磁盘 39
2.7.11 表的分区 40
2.8 处理器瓶颈分析 40
2.8.1 % Processor Time 41
2.8.2 % Privileged Time 41
2.8.3 Processor Queue Length 42
2.8.4 Context Switches/sec 42
2.8.5 Batch Requests/sec 42
2.8.6 SQL Compilations/sec 42
2.8.7 SQL Recompilations/sec 43
2.9 处理器瓶颈解决方案 43
2.9.1 优化应用程序工作负载 43
2.9.2 消除过多的编译/重编译 43
2.9.3 使用更多或更快的处理器 44
2.9.4 使用大的二级(L2)/三级(L3)缓存 44
2.9.5 运行更高效的控制器/驱动程序 44
2.9.6 不运行不必要的软件 45
2.10 网络瓶颈分析 45
2.10.1 Bytes Total/sec 45
2.10.2 % Net Utilization 46
2.11 网络瓶颈解决方案 46
2.11.1 优化应用程序工作负载 46
2.11.2 增加网络适配器 47
2.11.3 节制和避免中断 47
2.12 SQL Server总体性能 47
2.12.1 丢失索引 48
2.12.2 数据库阻塞 49
2.12.3 不可重用的执行计划 50
2.12.4 总体表现 50
2.13 创建一个基线 51
2.13.1 创建性能计数器的一个可重用列表 51
2.13.2 使用性能计数器列表创建一个计数器日志 54
2.13.3 最小化性能监视器开销 55
2.14 以基线为标准的系统状态分析 56
2.15 小结 57
第3章 SQL查询性能分析 58
3.1 SQL Profiler工具 58
3.1.1 Profiler跟踪 59
3.1.2 事件 60
3.1.3 数据列 62
3.1.4 过滤器 64
3.1.5 跟踪模板 65
3.1.6 跟踪数据 65
3.2 跟踪的自动化 66
3.2.1 使用GUI捕捉跟踪 66
3.2.2 使用存储过程捕捉跟踪 67
3.3 结合跟踪和性能监视器输出 68
3.4 SQL Profiler建议 69
3.4.1 限制事件和数据列 69
3.4.2 丢弃性能分析所用的启动事件 70
3.4.3 限制跟踪输出大小 70
3.4.4 避免在线数据列排序 71
3.4.5 远程运行Profiler 71
3.4.6 限制使用某些事件 71
3.5 没有Profiler情况下的查询性能度量 71
3.6 开销较大的查询 72
3.6.1 识别开销较大的查询 73
3.6.2 识别运行缓慢的查询 77
3.7 执行计划 78
3.7.1 分析查询执行计划 80
3.7.2 识别执行计划中开销较大的步骤 82
3.7.3 分析索引有效性 83
3.7.4 分析连接有效性 84
3.7.5 实际执行计划vs.估算执行计划 88
3.7.6 计划缓存 89
3.8 查询开销 90
3.8.1 客户统计 90
3.8.2 执行时间 91
3.8.3 STATISTICS IO 92
3.9 小结 94
第4章 索引分析 95
4.1 什么是索引 95
4.1.1 索引的好处 97
4.1.2 索引开销 98
4.2 索引设计建议 100
4.2.1 检查WHERE子句和连接条件列 100
4.2.2 使用窄索引 102
4.2.3 检查列的唯一性 103
4.2.4 检查列数据类型 106
4.2.5 考虑列顺序 107
4.2.6 考虑索引类型 109
4.3 聚簇索引 109
4.3.1 堆表 110
4.3.2 与非聚簇索引的关系 110
4.3.3 聚簇索引建议 112
4.4 非聚簇索引 117
4.4.1 非聚簇索引维护 117
4.4.2 定义书签查找 117
4.4.3 非聚簇索引建议 118
4.5 聚簇索引vs.非聚簇索引 118
4.5.1 聚簇索引相对于非聚簇索引的好处 119
4.5.2 非聚簇索引相对于聚簇索引的好处 120
4.6 高级索引技术 121
4.6.1 覆盖索引 122
4.6.2 索引交叉 124
4.6.3 索引连接 125
4.6.4 过滤索引 126
4.6.5 索引视图 128
4.6.6 索引压缩 132
4.7 特殊索引类型 134
4.7.1 全文索引 134
4.7.2 空间索引 135
4.7.3 XML 135
4.8 索引的附加特性 135
4.8.1 不同的列排序顺序 135
4.8.2 在计算列上的索引 136
4.8.3 BIT数据类型列上的索引 136
4.8.4 作为一个查询处理的CREATE INDEX语句 136
4.8.5 并行索引创建 136
4.8.6 在线索引创建 137
4.8.7 考虑数据库引擎调整顾问 137
4.9 小结 137
第5章 数据库引擎调整顾问 139
5.1 数据库引擎调整顾问机制 139
5.2 数据库引擎调整顾问实例 143
5.2.1 调整一个查询 143
5.2.2 调整一个跟踪工作负载 146
5.3 数据库引擎调整顾问的局限性 148
5.4 小结 149
第6章 书签查找分析 150
6.1 书签查找的目的 150
6.2 书签查找的缺点 152
6.3 分析书签查找的起因 153
6.4 解决书签查找 155
6.4.1 使用一个聚簇索引 155
6.4.2 使用一个覆盖索引 155
6.4.3 使用索引连接 158
6.5 小结 160
第7章 统计分析 161
7.1 统计在查询优化中的角色 161
7.2 索引列上的统计 162
7.2.1 更新统计的好处 162
7.2.2 过时统计的缺点 164
7.3 在非索引列上的统计 165
7.3.1 在非索引列上统计的好处 166
7.3.2 丢失非索引列上的统计的缺点 169
7.4 分析统计 172
7.4.1 密度 174
7.4.2 多列索引上的统计 174
7.4.3 过滤索引上的统计 175
7.5 统计维护 176
7.5.1 自动维护 177
7.5.2 人工维护 179
7.5.3 统计维护状态 181
7.6 为查询分析统计的有效性 182
7.6.1 解决丢失统计问题 182
7.6.2 解决过时统计问题 184
7.7 建议 186
7.7.1 统计的向后兼容性 186
7.7.2 自动创建统计 186
7.7.3 自动更新统计 187
7.7.4 自动异步更新统计 189
7.7.5 收集统计的采样数量 189
7.8 小结 190
第8章 碎片分析 191
8.1 碎片的成因 191
8.1.1 UPDATE语句引起的页面分割 193
8.1.2 INSERT语句引起的页面分割 196
8.2 碎片开销 197
8.3 分析碎片数量 200
8.4 碎片解决方案 204
8.4.1 卸载并重建索引 204
8.4.2 使用DROP_EXISTING子句重建索引 205
8.4.3 执行ALTER INDEX REBUILD语句 205
8.4.4 执行ALTER INDEX REORGANIZE语句 207
8.5 填充因子的重要性 209
8.6 自动维护 212
8.7 小结 217
第9章 执行计划缓冲分析 218
9.1 执行计划生成 218
9.1.1 解析器 219
9.1.2 代数化器 220
9.1.3 优化 221
9.2 执行计划缓冲 227
9.3 执行计划组件 227
9.3.1 查询计划 227
9.3.2 执行上下文 227
9.4 执行计划的老化 228
9.5 分析执行计划缓冲 228
9.6 执行计划重用 229
9.6.1 即席工作负载 230
9.6.2 预定义工作负载 231
9.6.3 即席工作负载的计划可重用性 231
9.6.4 预定义工作负载的计划可重用性 239
9.7 查询计划Hash和查询Hash 248
9.8 执行计划缓冲建议 251
9.8.1 明确地参数化查询的可变部分 252
9.8.2 使用存储过程实现业务功能 252
9.8.3 使用sp_executesql编程以避免存储过程维护 252
9.8.4 实现准备/执行模式以避免重传查询字符串 253
9.8.5 避免即席查询 253
9.8.6 对于动态查询sp_executesql优于EXECUTE 253
9.8.7 小心地参数化查询的可变部分 254
9.8.8 不要允许查询中对象的隐含解析 254
9.9 小结 254
第10章 存储过程重编译 256
10.1 重编译的好处和缺点 256
10.2 确认导致重编译的语句 258
10.3 分析重编译起因 260
10.3.1 架构或绑定变化 261
10.3.2 统计变化 261
10.3.3 延迟对象解析 264
10.3.4 SET选项变化 266
10.3.5 执行计划老化 266
10.3.6 显式调用sp_recompile 267
10.3.7 显式使用RECOMPILE子句 268
10.4 避免重编译 269
10.4.1 不要交替使用DDL和DML语句 270
10.4.2 避免统计变化引起的重编译 271
10.4.3 使用表变量 273
10.4.4 避免在存储过程中修改SET选项 275
10.4.5 使用OPTIMIZE FOR查询提示 276
10.4.6 使用计划指南 277
10.5 小结 281
第11章 查询设计分析 282
11.1 查询设计建议 282
11.2 在小结果集上操作 283
11.2.1 限制选择列表中的列数 283
11.2.2 使用高选择性的WHERE子句 284
11.3 有效地使用索引 284
11.3.1 避免不可参数化的搜索条件 285
11.3.2 避免WHERE子句列上的算术运算符 289
11.3.3 避免WHERE子句列上的函数 290
11.4 避免优化器提示 292
11.4.1 连接提示 293
11.4.2 索引提示 295
11.5 使用域和参照完整性 296
11.5.1 非空约束 297
11.5.2 声明参照完整性 299
11.6 避免资源密集型查询 301
11.6.1 避免数据类型转换 301
11.6.2 使用EXISTS代替COUNT(*)验证数据存在 303
11.6.3 使用UNION ALL代替UNION 304
11.6.4 为聚合和排序操作使用索引 305
11.6.5 避免在批查询中的局部变量 306
11.6.6 小心地命名存储过程 309
11.7 减少网络传输数量 311
11.7.1 同时执行多个查询 311
11.7.2 使用SET NOCOUNT 311
11.8 降低事务开销 312
11.8.1 减少日志开销 312
11.8.2 减少锁开销 314
11.9 小结 315
第12章 阻塞分析 316
12.1 阻塞基础知识 316
12.2 理解阻塞 317
12.2.1 原子性 317
12.2.2 一致性 320
12.2.3 隔离性 320
12.2.4 持久性 321
12.3 数据库锁 321
12.3.1 锁粒度 322
12.3.2 锁升级 325
12.3.3 锁模式 326
12.3.4 锁兼容性 332
12.4 隔离级别 332
12.4.1 未提交读 333
12.4.2 已提交读 333
12.4.3 可重复读 335
12.4.4 可序列化(Serializable) 338
12.4.5 快照(Snapshot) 343
12.5 索引对锁的作用 343
12.5.1 非聚簇索引的作用 344
12.5.2 聚簇索引的作用 346
12.5.3 索引在可序列化隔离级别上的作用 346
12.6 捕捉阻塞信息 347
12.6.1 使用SQL捕捉阻塞信息 347
12.6.2 Profiler跟踪和被阻塞进程报告事件 349
12.7 阻塞解决方案 351
12.7.1 优化查询 352
12.7.2 降低隔离级别 352
12.7.3 分区争用的数据 353
12.7.4 争用数据上的覆盖索引 354
12.8 减少阻塞的建议 354
12.9 自动化侦测和收集阻塞信息 355
12.10 小结 359
第13章 死锁分析 360
13.1 死锁基础知识 360
13.2 使用错误处理来捕捉死锁 361
13.3 死锁分析 362
13.3.1 收集死锁信息 362
13.3.2 分析死锁 364
13.4 避免死锁 368
13.4.1 按照相同的时间顺序访问资源 368
13.4.2 减少被访问资源的数量 369
13.4.3 最小化锁的争用 369
13.5 小结 370
第14章 游标开销分析 372
14.1 游标基础知识 372
14.1.1 游标位置 373
14.1.2 游标并发性 374
14.1.3 游标类型 376
14.2 游标开销比较 378
14.2.1 游标位置的开销比较 378
14.2.2 游标并发性上的开销比较 380
14.2.3 在游标类型上的开销比较 381
14.3 默认结果集 383
14.3.1 好处 384
14.3.2 缺点 384
14.4 分析SQL Server游标开销 386
14.5 游标建议 390
14.6 小结 392
第15章 数据库工作负载优化 393
15.1 工作负载优化基础知识 393
15.2 工作负载优化步骤 394
15.3 捕捉工作负载 397
15.4 分析工作负载 399
15.5 识别开销最大的查询 400
15.6 确定开销最大的查询的基线资源使用 402
15.6.1 总体资源使用 402
15.6.2 详细资源使用 402
15.7 分析和优化外部因素 405
15.7.1 分析应用程序使用的批级别选项 405
15.7.2 分析统计有效性 406
15.7.3 分析碎片整理需求 406
15.8 分析开销最大的查询的内部行为 410
15.8.1 分析查询执行计划 410
15.8.2 识别执行计划中开销较大的步骤 412
15.8.3 分析处理策略的效率 412
15.9 优化代价最大的查询 412
15.9.1 修改现有索引 413
15.9.2 分析连接提示的应用 415
15.9.3 避免聚簇索引扫描操作 417
15.9.4 修改过程 418
15.10 分析对数据库工作负载的影响 420
15.11 迭代各个优化阶段 421
15.12 小结 424
第16章 SQL Server优化检查列表 425
16.1 数据库设计 425
16.1.1 平衡不足和过多的规范化 426
16.1.2 从实体完整性约束中得利 427
16.1.3 从域和参照完整性约束中得利 428
16.1.4 采用索引设计最佳实践 430
16.1.5 避免在存储过程名称中使用sp_前缀 431
16.1.6 最小化触发器的使用 431
16.2 查询设计 432
16.2.1 使用SET NOCOUNT ON命令 432
16.2.2 显式定义对象所有者 432
16.2.3 避免不可参数化的搜索条件 432
16.2.4 避免WHERE子句列上的算术运算符 433
16.2.5 避免优化器提示 434
16.2.6 远离嵌套视图 434
16.2.7 确保没有隐含的数据类型转换 435
16.2.8 最小化日志开销 435
16.2.9 采用重用执行计划的最佳实践 435
16.2.10 采用数据库事务最佳实践 436
16.2.11 消除或减少数据库游标开销 437
16.3 配置设置 437
16.3.1 Affinity Mask 437
16.3.2 内存配置选项 437
16.3.3 并行性开销阈值 438
16.3.4 最大并行度 438
16.3.5 优化即席工作负载 438
16.3.6 查询调控器开销限制 439
16.3.7 填充因子(%) 439
16.3.8 被阻塞过程阈值 439
16.3.9 数据库文件布局 439
16.3.10 数据库压缩 440
16.4 数据库管理 440
16.4.1 保持统计最新 440
16.4.2 保持最小数量的索引碎片数量 441
16.4.3 循环使用SQL错误日志文件 441
16.4.4 避免像AUTO_CLOSE或AUTO_SHRINK这样的自动化数据库功能 441
16.4.5 最小化SQL跟踪开销 442
16.5 数据库备份 442
16.5.1 增量和事务日志备份频率 442
16.5.2 备份分布 443
16.5.3 备份压缩 444
16.6 小结 444
作者介绍
作者:(美国)弗里奇(Grant Fritchey) (美国)达姆(Sajal Dam) 译者:姚军
弗里奇(Grant Fritchey),为FM Global(一家行业领先的工程和保险公司)工作,担任首席DBA。他使用各种语言(如VB、C#和Java等)开发了许多大规模的应用程序,从版本6.0开始使用SQL Server。他曾经为3家失败的.com公司担任财务和咨询工作,还是Dissecting SQL Server Execution Plans一书的作者。
达姆(Sajal Dam),拥有位于印度班加罗尔的印度理工学院的计算机科学技术硕士学位,并且使用微软技术超过16年。他已经在设计数据库应用和管理软件开发方面拥有了很广泛的背景。Saial还在从前端网页到后端数据库的基于微软技术的应用程序上,具备了故障定位和性能优化的大量经验。他有许多为《财富》500强公司设计可伸缩的数据库解决方案和最大化数据库环境性能的经验。
SQLServer2008查询性能优化 1/2
03-02
书名: SQLServer2008查询性能优化
作者: 弗里奇(Grant Fritchey)
出版社: 人民邮电出版社
出版日期: 2010年8月1日
ISBN: 9787115230294
编辑推荐
《SQL Server 2008查询性能优化》为你提供了处理查询性能所需要的工具。建立、维护数据库和数据库服务器可能是个困难的工作。当服务器的运行越来越慢时,这个工作就变得更加困难。来自用户的愤怒的电话以及站在你办公桌周围的管理人员都使你很不快活。在开发代码的同时,如果你花费时间和精力来开发一个性能故障排错的方法。那么你就能避免这种情况——至少可以快速而有效地做出反应。《SQL Server 2008查询性能优化》指出的性能要点之一是数据库随着用户和数据的日益增多而进行扩展的必要性。你需要理解性能低下的起因。以及识别并修复它们的方法。《SQL Server 2008查询性能优化》将帮助你:
使用性能监视器、SQL Trace以及动态管理视图和函数建立性能基线
理解一般系统中发生瓶颈的地方。以及解决瓶颈的方法
识别常见性能问题以及对其快速处理的方法
实施修复甚至预防性能问题的T-SQL最佳实践
《SQL Server 2008查询性能优化》不是理论书籍,它的目的是帮助你避免数据库出现性能低下的状况,它还能帮助你保住你的工作。
内容提要
《SQL Server 2008查询性能优化》通过大量实例,详细介绍了SQL Server数据库系统优化的各种方法和技巧。内容涵盖了数据库应用系统中各种性能瓶颈的表现形式及其发生的根源和解决方法,从硬件瓶颈到查询、索引设计以及数据库管理等,贯穿了数据库系统知识的各个方面。最后以一个实际的工作负载将所有技巧联系起来,并且提供了“宝典”式的最佳实践列表。
《SQL Server 2008查询性能优化》适合于关心数据库应用系统性能的开发人员和数据库管理人员阅读。通过阅读《SQL Server 2008查询性能优化》,不仅可以学习到数据库性能管理的许多知识和技巧,还有助于养成良好的编程习惯,为实现高性能的数据库应用系统打下基础。
目录
第1章 SQL查询性能调整 1
1.1 性能调整过程 2
1.1.1 核心过程 2
1.1.2 迭代过程 4
1.2 性能vs.价格 7
1.2.1 性能目标 7
1.2.2 “足够好”的调整 7
1.3 性能基线 8
1.4 工作的重点 9
1.5 SQL Server性能杀手 10
1.5.1 低质量的索引 10
1.5.2 不精确的统计 11
1.5.3 过多的阻塞和死锁 11
1.5.4 不基于数据集的操作 11
1.5.5 低质量的查询设计 12
1.5.6 低质量的数据库设计 12
1.5.7 过多的碎片 12
1.5.8 不可重用的执行计划 13
1.5.9 低质量的执行计划 13
1.5.10 频繁重编译计划 13
1.5.11 游标的错误使用 13
1.5.12 错误配置数据库日志 14
1.5.13 过多使用或者错误配置tempdb 14
1.6 小结 14
第2章 系统性能分析 15
2.1 性能监视器工具 15
2.2 动态管理视图 17
2.3 硬件资源瓶颈 18
2.3.1 识别瓶颈 18
2.3.2 瓶颈解决方案 19
2.4 内存瓶颈分析 19
2.4.1 SQL Server内存管理 20
2.4.2 Available Bytes 23
2.4.3 Pages/sec和Page Faults/sec计数器 23
2.4.4 Buffer Cache Hit Ratio 24
2.4.5 Page Life Expectancy 24
2.4.6 Checkpoint Pages/sec 24
2.4.7 Lazy writes/sec 24
2.4.8 Memory Grants Pending 25
2.4.9 Target Server Memory(KB)和Total Server Memory(KB) 25
2.5 内存瓶颈解决方案 25
2.5.1 优化应用程序工作负载 26
2.5.2 为SQL Server分配更多内存 27
2.5.3 增加系统内存 27
2.5.4 更换32位处理器为64位处理器 27
2.5.5 启用3GB进程空间 28
2.5.6 在32位SQL Server中使用4GB以上内存 28
2.6 磁盘瓶颈分析 29
2.6.1 磁盘计数器 30
2.6.2 % Disk Time 30
2.6.3 Current Disk Queue Length 31
2.6.4 Disk Transfers/sec 31
2.6.5 Disk Bytes/sec 32
2.6.6 Avg. Disk Sec/Read和Avg. Disk Sec/Write 32
2.7 磁盘瓶颈解决方案 32
2.7.1 优化应用程序工作负载 33
2.7.2 使用更快的磁盘驱动器 33
2.7.3 使用一个RAID阵列 33
2.7.4 使用SAN系统 35
2.7.5 恰当地对齐磁盘 35
2.7.6 使用电池后备的控制器缓存 36
2.7.7 添加系统内存 36
2.7.8 创建多个文件和文件组 36
2.7.9 将表和索引放在不同的磁盘上 39
2.7.10 将日志文件保存到独立的物理磁盘 39
2.7.11 表的分区 40
2.8 处理器瓶颈分析 40
2.8.1 % Processor Time 41
2.8.2 % Privileged Time 41
2.8.3 Processor Queue Length 42
2.8.4 Context Switches/sec 42
2.8.5 Batch Requests/sec 42
2.8.6 SQL Compilations/sec 42
2.8.7 SQL Recompilations/sec 43
2.9 处理器瓶颈解决方案 43
2.9.1 优化应用程序工作负载 43
2.9.2 消除过多的编译/重编译 43
2.9.3 使用更多或更快的处理器 44
2.9.4 使用大的二级(L2)/三级(L3)缓存 44
2.9.5 运行更高效的控制器/驱动程序 44
2.9.6 不运行不必要的软件 45
2.10 网络瓶颈分析 45
2.10.1 Bytes Total/sec 45
2.10.2 % Net Utilization 46
2.11 网络瓶颈解决方案 46
2.11.1 优化应用程序工作负载 46
2.11.2 增加网络适配器 47
2.11.3 节制和避免中断 47
2.12 SQL Server总体性能 47
2.12.1 丢失索引 48
2.12.2 数据库阻塞 49
2.12.3 不可重用的执行计划 50
2.12.4 总体表现 50
2.13 创建一个基线 51
2.13.1 创建性能计数器的一个可重用列表 51
2.13.2 使用性能计数器列表创建一个计数器日志 54
2.13.3 最小化性能监视器开销 55
2.14 以基线为标准的系统状态分析 56
2.15 小结 57
第3章 SQL查询性能分析 58
3.1 SQL Profiler工具 58
3.1.1 Profiler跟踪 59
3.1.2 事件 60
3.1.3 数据列 62
3.1.4 过滤器 64
3.1.5 跟踪模板 65
3.1.6 跟踪数据 65
3.2 跟踪的自动化 66
3.2.1 使用GUI捕捉跟踪 66
3.2.2 使用存储过程捕捉跟踪 67
3.3 结合跟踪和性能监视器输出 68
3.4 SQL Profiler建议 69
3.4.1 限制事件和数据列 69
3.4.2 丢弃性能分析所用的启动事件 70
3.4.3 限制跟踪输出大小 70
3.4.4 避免在线数据列排序 71
3.4.5 远程运行Profiler 71
3.4.6 限制使用某些事件 71
3.5 没有Profiler情况下的查询性能度量 71
3.6 开销较大的查询 72
3.6.1 识别开销较大的查询 73
3.6.2 识别运行缓慢的查询 77
3.7 执行计划 78
3.7.1 分析查询执行计划 80
3.7.2 识别执行计划中开销较大的步骤 82
3.7.3 分析索引有效性 83
3.7.4 分析连接有效性 84
3.7.5 实际执行计划vs.估算执行计划 88
3.7.6 计划缓存 89
3.8 查询开销 90
3.8.1 客户统计 90
3.8.2 执行时间 91
3.8.3 STATISTICS IO 92
3.9 小结 94
第4章 索引分析 95
4.1 什么是索引 95
4.1.1 索引的好处 97
4.1.2 索引开销 98
4.2 索引设计建议 100
4.2.1 检查WHERE子句和连接条件列 100
4.2.2 使用窄索引 102
4.2.3 检查列的唯一性 103
4.2.4 检查列数据类型 106
4.2.5 考虑列顺序 107
4.2.6 考虑索引类型 109
4.3 聚簇索引 109
4.3.1 堆表 110
4.3.2 与非聚簇索引的关系 110
4.3.3 聚簇索引建议 112
4.4 非聚簇索引 117
4.4.1 非聚簇索引维护 117
4.4.2 定义书签查找 117
4.4.3 非聚簇索引建议 118
4.5 聚簇索引vs.非聚簇索引 118
4.5.1 聚簇索引相对于非聚簇索引的好处 119
4.5.2 非聚簇索引相对于聚簇索引的好处 120
4.6 高级索引技术 121
4.6.1 覆盖索引 122
4.6.2 索引交叉 124
4.6.3 索引连接 125
4.6.4 过滤索引 126
4.6.5 索引视图 128
4.6.6 索引压缩 132
4.7 特殊索引类型 134
4.7.1 全文索引 134
4.7.2 空间索引 135
4.7.3 XML 135
4.8 索引的附加特性 135
4.8.1 不同的列排序顺序 135
4.8.2 在计算列上的索引 136
4.8.3 BIT数据类型列上的索引 136
4.8.4 作为一个查询处理的CREATE INDEX语句 136
4.8.5 并行索引创建 136
4.8.6 在线索引创建 137
4.8.7 考虑数据库引擎调整顾问 137
4.9 小结 137
第5章 数据库引擎调整顾问 139
5.1 数据库引擎调整顾问机制 139
5.2 数据库引擎调整顾问实例 143
5.2.1 调整一个查询 143
5.2.2 调整一个跟踪工作负载 146
5.3 数据库引擎调整顾问的局限性 148
5.4 小结 149
第6章 书签查找分析 150
6.1 书签查找的目的 150
6.2 书签查找的缺点 152
6.3 分析书签查找的起因 153
6.4 解决书签查找 155
6.4.1 使用一个聚簇索引 155
6.4.2 使用一个覆盖索引 155
6.4.3 使用索引连接 158
6.5 小结 160
第7章 统计分析 161
7.1 统计在查询优化中的角色 161
7.2 索引列上的统计 162
7.2.1 更新统计的好处 162
7.2.2 过时统计的缺点 164
7.3 在非索引列上的统计 165
7.3.1 在非索引列上统计的好处 166
7.3.2 丢失非索引列上的统计的缺点 169
7.4 分析统计 172
7.4.1 密度 174
7.4.2 多列索引上的统计 174
7.4.3 过滤索引上的统计 175
7.5 统计维护 176
7.5.1 自动维护 177
7.5.2 人工维护 179
7.5.3 统计维护状态 181
7.6 为查询分析统计的有效性 182
7.6.1 解决丢失统计问题 182
7.6.2 解决过时统计问题 184
7.7 建议 186
7.7.1 统计的向后兼容性 186
7.7.2 自动创建统计 186
7.7.3 自动更新统计 187
7.7.4 自动异步更新统计 189
7.7.5 收集统计的采样数量 189
7.8 小结 190
第8章 碎片分析 191
8.1 碎片的成因 191
8.1.1 UPDATE语句引起的页面分割 193
8.1.2 INSERT语句引起的页面分割 196
8.2 碎片开销 197
8.3 分析碎片数量 200
8.4 碎片解决方案 204
8.4.1 卸载并重建索引 204
8.4.2 使用DROP_EXISTING子句重建索引 205
8.4.3 执行ALTER INDEX REBUILD语句 205
8.4.4 执行ALTER INDEX REORGANIZE语句 207
8.5 填充因子的重要性 209
8.6 自动维护 212
8.7 小结 217
第9章 执行计划缓冲分析 218
9.1 执行计划生成 218
9.1.1 解析器 219
9.1.2 代数化器 220
9.1.3 优化 221
9.2 执行计划缓冲 227
9.3 执行计划组件 227
9.3.1 查询计划 227
9.3.2 执行上下文 227
9.4 执行计划的老化 228
9.5 分析执行计划缓冲 228
9.6 执行计划重用 229
9.6.1 即席工作负载 230
9.6.2 预定义工作负载 231
9.6.3 即席工作负载的计划可重用性 231
9.6.4 预定义工作负载的计划可重用性 239
9.7 查询计划Hash和查询Hash 248
9.8 执行计划缓冲建议 251
9.8.1 明确地参数化查询的可变部分 252
9.8.2 使用存储过程实现业务功能 252
9.8.3 使用sp_executesql编程以避免存储过程维护 252
9.8.4 实现准备/执行模式以避免重传查询字符串 253
9.8.5 避免即席查询 253
9.8.6 对于动态查询sp_executesql优于EXECUTE 253
9.8.7 小心地参数化查询的可变部分 254
9.8.8 不要允许查询中对象的隐含解析 254
9.9 小结 254
第10章 存储过程重编译 256
10.1 重编译的好处和缺点 256
10.2 确认导致重编译的语句 258
10.3 分析重编译起因 260
10.3.1 架构或绑定变化 261
10.3.2 统计变化 261
10.3.3 延迟对象解析 264
10.3.4 SET选项变化 266
10.3.5 执行计划老化 266
10.3.6 显式调用sp_recompile 267
10.3.7 显式使用RECOMPILE子句 268
10.4 避免重编译 269
10.4.1 不要交替使用DDL和DML语句 270
10.4.2 避免统计变化引起的重编译 271
10.4.3 使用表变量 273
10.4.4 避免在存储过程中修改SET选项 275
10.4.5 使用OPTIMIZE FOR查询提示 276
10.4.6 使用计划指南 277
10.5 小结 281
第11章 查询设计分析 282
11.1 查询设计建议 282
11.2 在小结果集上操作 283
11.2.1 限制选择列表中的列数 283
11.2.2 使用高选择性的WHERE子句 284
11.3 有效地使用索引 284
11.3.1 避免不可参数化的搜索条件 285
11.3.2 避免WHERE子句列上的算术运算符 289
11.3.3 避免WHERE子句列上的函数 290
11.4 避免优化器提示 292
11.4.1 连接提示 293
11.4.2 索引提示 295
11.5 使用域和参照完整性 296
11.5.1 非空约束 297
11.5.2 声明参照完整性 299
11.6 避免资源密集型查询 301
11.6.1 避免数据类型转换 301
11.6.2 使用EXISTS代替COUNT(*)验证数据存在 303
11.6.3 使用UNION ALL代替UNION 304
11.6.4 为聚合和排序操作使用索引 305
11.6.5 避免在批查询中的局部变量 306
11.6.6 小心地命名存储过程 309
11.7 减少网络传输数量 311
11.7.1 同时执行多个查询 311
11.7.2 使用SET NOCOUNT 311
11.8 降低事务开销 312
11.8.1 减少日志开销 312
11.8.2 减少锁开销 314
11.9 小结 315
第12章 阻塞分析 316
12.1 阻塞基础知识 316
12.2 理解阻塞 317
12.2.1 原子性 317
12.2.2 一致性 320
12.2.3 隔离性 320
12.2.4 持久性 321
12.3 数据库锁 321
12.3.1 锁粒度 322
12.3.2 锁升级 325
12.3.3 锁模式 326
12.3.4 锁兼容性 332
12.4 隔离级别 332
12.4.1 未提交读 333
12.4.2 已提交读 333
12.4.3 可重复读 335
12.4.4 可序列化(Serializable) 338
12.4.5 快照(Snapshot) 343
12.5 索引对锁的作用 343
12.5.1 非聚簇索引的作用 344
12.5.2 聚簇索引的作用 346
12.5.3 索引在可序列化隔离级别上的作用 346
12.6 捕捉阻塞信息 347
12.6.1 使用SQL捕捉阻塞信息 347
12.6.2 Profiler跟踪和被阻塞进程报告事件 349
12.7 阻塞解决方案 351
12.7.1 优化查询 352
12.7.2 降低隔离级别 352
12.7.3 分区争用的数据 353
12.7.4 争用数据上的覆盖索引 354
12.8 减少阻塞的建议 354
12.9 自动化侦测和收集阻塞信息 355
12.10 小结 359
第13章 死锁分析 360
13.1 死锁基础知识 360
13.2 使用错误处理来捕捉死锁 361
13.3 死锁分析 362
13.3.1 收集死锁信息 362
13.3.2 分析死锁 364
13.4 避免死锁 368
13.4.1 按照相同的时间顺序访问资源 368
13.4.2 减少被访问资源的数量 369
13.4.3 最小化锁的争用 369
13.5 小结 370
第14章 游标开销分析 372
14.1 游标基础知识 372
14.1.1 游标位置 373
14.1.2 游标并发性 374
14.1.3 游标类型 376
14.2 游标开销比较 378
14.2.1 游标位置的开销比较 378
14.2.2 游标并发性上的开销比较 380
14.2.3 在游标类型上的开销比较 381
14.3 默认结果集 383
14.3.1 好处 384
14.3.2 缺点 384
14.4 分析SQL Server游标开销 386
14.5 游标建议 390
14.6 小结 392
第15章 数据库工作负载优化 393
15.1 工作负载优化基础知识 393
15.2 工作负载优化步骤 394
15.3 捕捉工作负载 397
15.4 分析工作负载 399
15.5 识别开销最大的查询 400
15.6 确定开销最大的查询的基线资源使用 402
15.6.1 总体资源使用 402
15.6.2 详细资源使用 402
15.7 分析和优化外部因素 405
15.7.1 分析应用程序使用的批级别选项 405
15.7.2 分析统计有效性 406
15.7.3 分析碎片整理需求 406
15.8 分析开销最大的查询的内部行为 410
15.8.1 分析查询执行计划 410
15.8.2 识别执行计划中开销较大的步骤 412
15.8.3 分析处理策略的效率 412
15.9 优化代价最大的查询 412
15.9.1 修改现有索引 413
15.9.2 分析连接提示的应用 415
15.9.3 避免聚簇索引扫描操作 417
15.9.4 修改过程 418
15.10 分析对数据库工作负载的影响 420
15.11 迭代各个优化阶段 421
15.12 小结 424
第16章 SQL Server优化检查列表 425
16.1 数据库设计 425
16.1.1 平衡不足和过多的规范化 426
16.1.2 从实体完整性约束中得利 427
16.1.3 从域和参照完整性约束中得利 428
16.1.4 采用索引设计最佳实践 430
16.1.5 避免在存储过程名称中使用sp_前缀 431
16.1.6 最小化触发器的使用 431
16.2 查询设计 432
16.2.1 使用SET NOCOUNT ON命令 432
16.2.2 显式定义对象所有者 432
16.2.3 避免不可参数化的搜索条件 432
16.2.4 避免WHERE子句列上的算术运算符 433
16.2.5 避免优化器提示 434
16.2.6 远离嵌套视图 434
16.2.7 确保没有隐含的数据类型转换 435
16.2.8 最小化日志开销 435
16.2.9 采用重用执行计划的最佳实践 435
16.2.10 采用数据库事务最佳实践 436
16.2.11 消除或减少数据库游标开销 437
16.3 配置设置 437
16.3.1 Affinity Mask 437
16.3.2 内存配置选项 437
16.3.3 并行性开销阈值 438
16.3.4 最大并行度 438
16.3.5 优化即席工作负载 438
16.3.6 查询调控器开销限制 439
16.3.7 填充因子(%) 439
16.3.8 被阻塞过程阈值 439
16.3.9 数据库文件布局 439
16.3.10 数据库压缩 440
16.4 数据库管理 440
16.4.1 保持统计最新 440
16.4.2 保持最小数量的索引碎片数量 441
16.4.3 循环使用SQL错误日志文件 441
16.4.4 避免像AUTO_CLOSE或AUTO_SHRINK这样的自动化数据库功能 441
16.4.5 最小化SQL跟踪开销 442
16.5 数据库备份 442
16.5.1 增量和事务日志备份频率 442
16.5.2 备份分布 443
16.5.3 备份压缩 444
16.6 小结 444
作者介绍
作者:(美国)弗里奇(Grant Fritchey) (美国)达姆(Sajal Dam) 译者:姚军
弗里奇(Grant Fritchey),为FM Global(一家行业领先的工程和保险公司)工作,担任首席DBA。他使用各种语言(如VB、C#和Java等)开发了许多大规模的应用程序,从版本6.0开始使用SQL Server。他曾经为3家失败的.com公司担任财务和咨询工作,还是Dissecting SQL Server Execution Plans一书的作者。
达姆(Sajal Dam),拥有位于印度班加罗尔的印度理工学院的计算机科学技术硕士学位,并且使用微软技术超过16年。他已经在设计数据库应用和管理软件开发方面拥有了很广泛的背景。Saial还在从前端网页到后端数据库的基于微软技术的应用程序上,具备了故障定位和性能优化的大量经验。他有许多为《财富》500强公司设计可伸缩的数据库解决方案和最大化数据库环境性能的经验。
参与评论
您还未登录,请先
登录
后发表或查看评论
SQL 去除重复数据 UNION all 和UNION 的用法
dear_Alice_moon的专栏
02-07
3512
SQL 去除重复数据 UNION all 和UNION 的用法
SQL Server Union(并集)
chenmo2001的博客
03-17
2689
SQL Server Union(并集)
SQL Server union 是一组集合操作,用于将两个select语句的结果组合到一个结果集中,该结果集包括属于union中select语句的所有行。
语法:
query_1
UNION
query_2
要求:
-两个查询中列的数量必须相同
-相应列的数据类型必须相同或兼容
UNION与UNION ALL
默认情况下,UNION运算符从结果集中删除所有重复的行。如果要保留重复的行,则需要明确指定all关键.
数据库-union和union all的区别(举例说明)
Dove_Knowledge的博客
05-08
7591
union在进行表求并集后会去掉重复的元素,所以会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
union all则只是简单地将两个结果集合并后就返回结果。因此,如果返回的两个结果集中有重复的数据,那么返回的结果就会包含重复的数据。
从上面的对比可以看出,在执行查询操作时,union all要比union快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据,
SQL语句中union all和union的区别以及用法
demopy’s blog
01-02
2682
起因
一次渗透过程中目标使用的SQL Server有联合注入,发现使用union all 不报错,union报错,同时还有一个就是字段的类型,发现类型不对也会报错,贴张图
union+all+select+123123,1,'2','3',null,null,null--+- 不报错
union+select+123123,1,'2','3',null,null,null--+- 报错
注意点:
1 union结果集种的列名总是等于第一个select语句中的类型。
2 union
sql查询中union和union all的区别
cug-jdc的博客
11-20
4831
概念
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
注意:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。Union因为要进行重复值扫描,所以效率低。如果合并没有刻意要删除重复行,那么就使用Union All,两个要联合的SQL语句字段个数必须一样,而且字段类型要“相容”(一致)。
含义:如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union
SQL中的UNION和UNION ALL的区别及用法详解、“提高SQL查询效率:UNION和UNION ALL的比较、使用实例详解SQL中的UNION和UNION ALL操作符
weixin_42279822的博客
04-19
9834
UNION和UNION ALL都是 SQL 中用于将多个 SELECT 语句的结果合并成一个结果集的操作符。它们都适用于需要将多个表或查询结果合并在一起的情况。但是它们的行为略有不同。在 SQL 查询中,UNION和UNION ALL都是将多个查询结果集合并在一起的操作符。UNION会去除结果集中的重复行,而UNION ALL则保留所有的行。在使用UNION和UNION ALL时需要注意,两个查询的列数必须相同,并且对应列的数据类型也必须相同。此外,如果需要去重,应该使用UNION;
SQL 中union的使用
热门推荐
Huc673619的博客
10-13
1万+
采用where的解法
select
name,population,area
from World
where
area>3000000
or
population>25000000
;
使用union的解法
select
name,population,area
from World
where
area>3000000
union
select
name,population,area
from World
where
population>25000000
;
使用 u.
如何使用SQL系列 之 如何在SQL中使用联合(UNION)
CHQIUU的专栏
09-11
1万+
按照本指南,你可以使用UNION和UNION ALL操作从多个表中检索数据。你还使用了WHERE子句来过滤结果,并使用ORDER BY子句来对结果进行排序。最后,你了解了如果SELECT语句产生不同的数据格式,可能出现的错误和意外行为。虽然这里包含的命令应该适用于大多数关系数据库,但请注意,每个SQL数据库都使用自己独特的语言实现。
经典SQL脚本大全
12-24
│ │ 6.1.3 使用UNION实现库存报表的示例.sql │ │ 6.1.5 按指定上下限区间进行数据统计的示例.sql │ │ 6.1.6 随机出题的示例.sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(定义各汇总列标题).sql │ │ 6.2.1 ...
使用ssms连接数据库登录失败的原因
qq_44983621的博客
08-06
5124
此次讲解使用的的sql server 2017。
1.使用windows身份登录验证
这个登录失败的话可能就是开机没有自动启动下图的选项
进去这个界面需要右键单机我的电脑进入管理把上图那个选中的启动,再设置成开机自启,下一次也就不那么麻烦了。
2.使用Sql server 账号密码登录
使用这个登录登陆不上的问题可能有很多种
(1).首先要使用windows身份验证登录查看上图
单机上图选中的有个...
sql server2017创建数据库时,遇到错误
qq_44983621的博客
08-07
1721
sql server2017创建数据库时,错误提示如下:尝试打开或创建物理‘c:\数据库\db.mdf’时,Create File遇到操作系统错误5(拒绝访问)
如果是刚下载使用sql server 很有可用需要手动更爱一些东西。
例如:
create database SchoolMate
on primary
(
name = 'SchoolMain',
size = 10mb,
...
sql语句 order by 和 group by
qq_44983621的博客
08-15
1581
sql 语句 中的order by 和 group by
以下Tbstudent为表名
语法 order by 字段名 asc(升序)/desc(降序)
--order by 排序, 一个select中只能有一个order by 如果不写asc 默认是asc
select stuName,stuNumber,stuMath from Tbstudent order by stuMath asc
s...
sql语句修改表结构和添加约束
qq_44983621的博客
08-07
1309
sql语句修改表结构和添加约束
create table Tbclass
(
clsId int primary key identity(1,1),
clsName nvarchar(8) unique,
clsTeacher nvarchar(4),
clsNumber smallint check(clsNumber >= 20 and clsNumber <= 80)
...
sql server中的数据类型及其区别
qq_44983621的博客
08-06
768
数据类型
1.整数类型:int 、smallint、bigint和decimal(高精度)
2.实数类型:float 、real (精度不同)
3. 字符串类型:
(1) char/nchar
(2) varchar/nvarchar
上面有var 和没var 的区别是 var带表的是可变长度的字符串类型,没有var的是定长的,定长如果字符串没有达到该长度会在后面加空格补够该长度。
但是两个都有...
sql 无限极 回查
最新发布
01-16
SQL中的无限级回查指的是在一个表中查询一个节点的所有上级(父级,祖父级等)以及所有下级(子级,孙子级等)。在SQL中实现此功能有多种方法,下面以一个示例表结构来说明。
假设我们有一个表t_node保存了节点的信息,其中包含节点id和父节点id。表的结构如下:
```
t_node
------
id INT PRIMARY KEY
parent_id INT
其他字段...
```
要实现无限级回查功能,可以使用递归查询或者使用递归联接。
递归查询是通过在查询语句中嵌套多个子查询实现的。具体操作如下:
```sql
-- 查询某个节点及其所有上级
WITH RECURSIVE node_tree(id, parent_id, level) AS (
-- 基准查询:查询起始节点
SELECT id, parent_id, 0
FROM t_node
WHERE id = <节点id> -- 替换为具体的节点id
UNION ALL
-- 递归查询:查询上级节点
SELECT t_node.id, t_node.parent_id, node_tree.level + 1
FROM t_node
INNER JOIN node_tree ON t_node.id = node_tree.parent_id
)
SELECT *
FROM node_tree;
```
递归联接的原理是通过自连接表来实现节点的递归查询。具体操作如下:
```sql
-- 查询某个节点及其所有上级
SELECT t1.*
FROM t_node t1
INNER JOIN t_node t2 ON t1.id = t2.id
WHERE t2.id = <节点id> -- 替换为具体的节点id
```
以上就是使用SQL实现无限级回查的方法。通过递归查询或递归联接,我们可以方便地查询一个节点及其所有上级或者下级。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
家里有蜘蛛
CSDN认证博客专家
CSDN认证企业博客
码龄5年
暂无认证
114
原创
4万+
周排名
204万+
总排名
24万+
访问
等级
3577
积分
104
粉丝
552
获赞
151
评论
847
收藏
私信
关注
热门文章
flex居中(justify-content: center和 align-items:center )遇坑。
21359
js中"Uncaught TypeError: Cannot set property 'innerHTML' of null"错误
15853
c#中的DataSet原理和用法
13164
使用js制作完整轮播图 (解决最后一张切换到前面一张的动画问题)
11902
vue3.0中使用swiper
11445
分类专栏
JavaScript深入学习
4篇
WebSocket
1篇
node.js
4篇
Taro
2篇
webpack
3篇
TypeScript
1篇
Cypress
1篇
前端基础
HTML+CSS
5篇
flex布局
1篇
原生js
18篇
js高级
7篇
jQuery
3篇
AJAX
2篇
ES6
2篇
前端高级
3篇
promise
3篇
axios
3篇
前端路由
1篇
React.js
6篇
React学习笔记
16篇
redux
1篇
React项目开发问题总结
4篇
Vue
8篇
微信小程序
5篇
.Net
ADO.net
2篇
c#学习笔记
12篇
数据库
sql server
12篇
NoSQL--MongoDB
3篇
Git
1篇
mvc
1篇
搭建网站
Nginx
1篇
最新评论
微信小程序踩坑”日记“--Failed to load image xxx (404)
怀苍:
有帮助,谢谢
flex居中(justify-content: center和 align-items:center )遇坑。
@lnln:
这个确实没想到
近期面试心得
我要吃一条街:
有被帮助到,谢谢
js循环精灵图
小洋猪ck:
如出一辙
使用js制作完整轮播图 (解决最后一张切换到前面一张的动画问题)
以太猪猪:
第六张和第一张切换的时候有一个明显的停顿感
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
Serverless初体验--跟我们前端有什么关系?
近期面试心得
js实现call,apply,bind
2021年11篇
2020年29篇
2019年74篇
目录
目录
分类专栏
JavaScript深入学习
4篇
WebSocket
1篇
node.js
4篇
Taro
2篇
webpack
3篇
TypeScript
1篇
Cypress
1篇
前端基础
HTML+CSS
5篇
flex布局
1篇
原生js
18篇
js高级
7篇
jQuery
3篇
AJAX
2篇
ES6
2篇
前端高级
3篇
promise
3篇
axios
3篇
前端路由
1篇
React.js
6篇
React学习笔记
16篇
redux
1篇
React项目开发问题总结
4篇
Vue
8篇
微信小程序
5篇
.Net
ADO.net
2篇
c#学习笔记
12篇
数据库
sql server
12篇
NoSQL--MongoDB
3篇
Git
1篇
mvc
1篇
搭建网站
Nginx
1篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
一文讲懂SQL联合查询UNION - 知乎
一文讲懂SQL联合查询UNION - 知乎首发于零基础入门进阶SQL切换模式写文章登录/注册一文讲懂SQL联合查询UNION喵宁一大家好,我是宁一。今天讲解SQL教程第13课:UNION 联合查询。前两节课讲的JOIN连接,可以对多个表进行横向列合并。这节课讲的UNION 操作符,是将多个查询结果,按行纵向合并。基本语法:SELECT <字段名> FROM <表名>
UNION
SELECT <字段名> FROM <表名>1、单张表联合查询UNION 合并结果集的时候,如果合并的结果集中有重复行,只会保留其中一行。实例:查询出Students表中,将学生编号Sid为2到5的记录和1到3的记录通过UNION联合起来。实例解析:UNION上面的结果集中有Sid为1、2、3的记录,UNION下面的结果集中有Sid为2、3、4、5的记录。UNION联合时,会只保留重复行(即Sid为2、3的记录)其中的一行。SELECT * FROM Students
WHERE Sid BETWEEN 2 AND 5
UNION
SELECT * FROM Students
WHERE Sid BETWEEN 1 AND 3如果想要保留所有重复行,可以使用UNION All合并结果集。SELECT * FROM Students
WHERE Sid BETWEEN 2 AND 5
UNION ALL
SELECT * FROM Students
WHERE Sid BETWEEN 1 AND 32、不同表联合查询UNION 操作符上下两个结果集的列数必须相等,否则会报错。最终合并表的列名,由上面的结果集决定。实例:将Students表中,生日Sage在1995年之前出生的学生姓名Sname与Teachers表中老师姓名Tname合并。SELECT Sname FROM Students
WHERE Sage < '1995-01-01'
UNION
SELECT Tname FROM Teachers3、语句执行顺序如果后面跟了ORDER BY、LIMIT子句,这些子句不是只作用于最后一个查询语句,而是会等UNION将结果集合并之后再执行。SELECT * FROM Students
WHERE Sid BETWEEN 2 AND 5
UNION
SELECT * FROM Students
WHERE Sid BETWEEN 1 AND 3
ORDER BY SidORDER BY 会等结果集合并之后,再给整个结果集排序,不是只作用于最后一个查询语句。LIMIT子句也会等结果集合并之后,再取前几条记录。SELECT * FROM Students
WHERE Sid BETWEEN 2 AND 5
UNION
SELECT * FROM Students
WHERE Sid BETWEEN 1 AND 3
LIMIT 2下节课,我们来讲讲聚合函数。点击关注,更新课程第一时间通知哦~发布于 2022-06-14 13:45SQLUnionSQL 2000赞同 101 条评论分享喜欢收藏申请转载文章被以下专栏收录零基础入门进阶SQL从最基础的增删改查到子查询窗口
SQL UNION 和 UNION ALL 操作符
SQL UNION 和 UNION ALL 操作符
w3school 在线教程
HTML 系列教程
浏览器脚本
服务器脚本
编程教程
XML 系列教程
建站手册
参考手册
SQL 基础教程
SQL 教程
SQL 简介
SQL 语法
SQL select
SQL distinct
SQL where
SQL AND & OR
SQL Order By
SQL insert
SQL update
SQL delete
SQL 高级教程
SQL Top
SQL Like
SQL 通配符
SQL In
SQL Between
SQL Aliases
SQL Join
SQL Inner Join
SQL Left Join
SQL Right Join
SQL Full Join
SQL Union
SQL Select Into
SQL Create DB
SQL Create Table
SQL Constraints
SQL Not Null
SQL Unique
SQL Primary Key
SQL Foreign Key
SQL Check
SQL Default
SQL Create Index
SQL Drop
SQL Alter
SQL Increment
SQL View
SQL Date
SQL Nulls
SQL isnull()
SQL 数据类型
SQL 服务器
SQL 函数
SQL functions
SQL avg()
SQL count()
SQL first()
SQL last()
SQL max()
SQL min()
SQL sum()
SQL Group By
SQL Having
SQL ucase()
SQL lcase()
SQL mid()
SQL len()
SQL round()
SQL now()
SQL format()
SQL 总结
SQL 快速参考
SQL 教程总结
SQL 测验
SQL 测验
SQL UNION 和 UNION ALL 操作符
SQL Full Join
SQL Select Into
SQL UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SQL UNION 语法
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
SQL UNION ALL 语法
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
下面的例子中使用的原始表:
Employees_China:
E_ID
E_Name
01
Zhang, Hua
02
Wang, Wei
03
Carter, Thomas
04
Yang, Ming
Employees_USA:
E_ID
E_Name
01
Adams, John
02
Bush, George
03
Carter, Thomas
04
Gates, Bill
使用 UNION 命令
实例
列出所有在中国和美国的不同的雇员名:
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA
结果
E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Gates, Bill
注释:这个命令无法列出在中国和美国的所有雇员。在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。UNION 命令只会选取不同的值。
UNION ALL
UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。
SQL Statement 1
UNION ALL
SQL Statement 2
使用 UNION ALL 命令
实例:
列出在中国和美国的所有的雇员:
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA
结果
E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Carter, Thomas
Gates, Bill
SQL Full Join
SQL Select Into
SQL 测验
W3School 简体中文版提供的内容仅用于培训和测试,不保证内容的正确性。通过使用本站内容随之而来的风险与本站无关。版权所有,保留一切权利。
关于 W3School
帮助 W3School
使用条款
隐私条款
技术支持:赢科
蒙ICP备06004630号
SQL UNION 运算符
SQL UNION 运算符
w3schools 教程
HTML
CSS
JAVASCRIPT
BOOTSTRAP
JQUERY
PHP
SQL
PYTHON
PYTHON2
JAVA
C
C++
C#
Linux
AI
教程库
参考手册
测验
练习
HOWTO
FAQ
SQL 教程
SQL 教程
SQL 简介
SQL 语法
SQL Select
SQL Select Distinct
SQL Where
SQL And, Or, Not
SQL Order By
SQL Insert Into
SQL Null Values
SQL Update
SQL Delete
SQL Select Top
SQL Min 和 Max
SQL Count, Avg, Sum
SQL Like
SQL 通配符
SQL In
SQL Between
SQL 别名
SQL 联接
SQL Inner Join
SQL Left Join
SQL Right Join
SQL Full Join
SQL 自联接
SQL Union
SQL Group By
SQL Having
SQL Exists
SQL Any, All
SQL Select Into
SQL Insert Into Select
SQL Case
SQL Null 函数
SQL 存储过程
SQL 注释
SQL 运算符
SQL 数据库
SQL 创建数据库
SQL 删除数据库
SQL 数据库备份
SQL Create Table
SQL Drop Table
SQL Alter Table
SQL 约束
SQL Not Null
SQL Unique
SQL Primary Key
SQL Foreign Key
SQL Check
SQL Default
SQL Index
SQL 自动增量
SQL 日期
SQL 视图
SQL 注入
SQL 托管
SQL 数据类型
SQL 参考手册
SQL 关键字
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE
MySQL 函数
String 字符串函数
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Numeric 数值函数
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Date 日期函数
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
高级功能
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server 函数
String 字符串函数
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Numeric 数值函数
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Date 日期函数
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
高级功能
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access 函数
String 字符串函数
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Numeric 数值函数
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Date 日期函数
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
其他函数
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL 快速参考手册
SQL 实例
SQL 实例
SQL 测验
SQL 练习
❮ 上一节
下一节 ❯
SQL UNION 操作符
SQL UNION 操作符
UNION 操作符用于组合两个或多个SELECT语句的结果集。
UNION 中的每个 SELECT 语句必须具有相同的列数
列还必须具有类似的数据类型
每个 SELECT 语句中的列的顺序也必须相同
UNION 语法
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
UNION ALL 语法
默认情况下,UNION 操作符仅选择不同的值。要允许重复值,请使用UNION ALL:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
注释: 结果集中的列名通常等于 UNION 中第一个 SELECT 语句中的列名。
演示数据库
在本教程中,我们将使用著名的 Northwind 示例数据库。
以下是从 "Customers" 表中选择的内容:
CustomerID
CustomerName
ContactName
Address
City
PostalCode
Country
1
Alfreds Futterkiste
Maria Anders
Obere Str. 57
Berlin
12209
Germany
2
Ana Trujillo Emparedados y helados
Ana Trujillo
Avda. de la Constitución 2222
México D.F.
05021
Mexico
3
Antonio Moreno Taquería
Antonio Moreno
Mataderos 2312
México D.F.
05023
Mexico
以及从 "Suppliers" 表中选择的内容:
SupplierID
SupplierName
ContactName
Address
City
PostalCode
Country
1
Exotic Liquid
Charlotte Cooper
49 Gilbert St.
London
EC1 4SD
UK
2
New Orleans Cajun Delights
Shelley Burke
P.O. Box 78934
New Orleans
70117
USA
3
Grandma Kelly's Homestead
Regina Murphy
707 Oxford Rd.
Ann Arbor
48104
USA
SQL UNION 实例
以下 SQL 语句从 "Customers" 和 "Suppliers" 表返回城市(仅不同的值):
实例
SELECT City FROM CustomersUNIONSELECT City FROM SuppliersORDER BY City;
亲自试一试 »
注释: 如果一些客户或供应商拥有相同的城市,每个城市将只列出一次,因为 UNION 只选择不同的值。使用 UNION ALL 还可以选择重复值!
SQL UNION ALL 实例
以下 SQL 语句从"Customers"和"Suppliers"表中返回 cities(也有重复值):
实例
SELECT City FROM CustomersUNION ALLSELECT City FROM Suppliers
ORDER BY City;
亲自试一试 »
带有 WHERE 的 SQL UNION
以下 SQL 语句从 "Customers" 和 "Suppliers" 表中返回德国(German)城市(仅不同的值):
实例
SELECT City, Country FROM CustomersWHERE Country='Germany'UNION
SELECT City, Country FROM SuppliersWHERE Country='Germany'ORDER BY City;
亲自试一试 »
带有 WHERE 的 SQL UNION ALL
以下 SQL 语句从 "Customers" 和 "Suppliers" 表返回德国(German)城市(值也重复):
实例
SELECT City, Country FROM CustomersWHERE Country='Germany'UNION ALL
SELECT City, Country FROM SuppliersWHERE Country='Germany'ORDER BY City;
亲自试一试 »
另一个 UNION 实例
以下 SQL 语句列出了所有客户和供应商:
实例
SELECT 'Customer' AS Type, ContactName, City, CountryFROM Customers
UNIONSELECT 'Supplier', ContactName, City, CountryFROM Suppliers;
亲自试一试 »
请注意上面的 "AS Type" ——它是一个别名。SQL 别名用于为表或列提供临时名称。别名仅在查询期间存在。因此,我们在这里创建了一个名为 "Type" 的临时列,列出联系人是"客户"还是"供应商"。
❮ 上一节
下一节 ❯
颜色选择器
SQL 参考手册
SQL 实例
SQL 测验/考试
热门教程
HTML 教程
CSS 教程
JavaScript 教程
Python 教程
SQL 教程
PHP 教程
JAVA 教程
Excel 教程
读后有收获微信请站长喝咖啡
报告错误
打印
关于
学习路线
×
错误报告
如果您发现内容有误或提出修改建议,请随时向我们发送 E-mail 邮件:
421660149@qq.com
您的建议:
您的 E-mail:
页面地址:
内容描述:
提交
×
感谢您的帮助!
您的建议已发送到 W3schools。
W3Schools 在线教程提供的内容仅用于学习和测试,不保证内容的正确性。通过使用本站内容随之而来的风险与本站无关。
Copyright 2020-2024 关于我们 | 隐私条款 | 学习路线 | 京ICP备14045893号-9
UNION中文(简体)翻译:剑桥词典
UNION中文(简体)翻译:剑桥词典
词典
翻译
语法
同义词词典
+Plus
剑桥词典+Plus
Shop
剑桥词典+Plus
我的主页
+Plus 帮助
退出
剑桥词典+Plus
我的主页
+Plus 帮助
退出
登录
/
注册
中文 (简体)
查找
查找
英语-中文(简体)
union 在英语-中文(简体)词典中的翻译
unionnoun uk
Your browser doesn't support HTML5 audio
/ˈjuː.njən/ us
Your browser doesn't support HTML5 audio
/ˈjuː.njən/
union noun
(JOINING)
Add to word list
Add to word list
B2 [ S or U ] the act or the state of being joined together
联合;结合;合并;统一
Meanwhile the debate on European political and monetary union continues.
同时,有关欧洲政治和货币联盟的争论还在继续。
formal She believes that the union (= marriage) of man and woman in holy matrimony is for ever.
她相信男女之间的神圣结合是永久的。
the Union
[ S ] (in the American Civil War) the states that did not separate from the United States
(美国内战时的)联邦
更多范例减少例句The signing of the treaty marked a major milestone on the road to European union.The two countries are holding a summit to discuss economic and monetary union.
union noun
(WORKERS)
B1 [ C, + sing/pl verb ] a
trade union UK
工会(同 trade union)
the electricians' union
电工工会
更多范例减少例句Management are having discussions with the union about possible redundancies.The car workers' union is demanding a 7% pay rise this year.Her debating skills were honed in the students' union.The union decided to ballot its members on the issue .The union safeguards the interests of all its members.
(union在剑桥英语-中文(简体)词典的翻译 © Cambridge University Press)
union的例句
union
The nominal wage is fixed by the monopolistic household unions, before firms choose employment.
来自 Cambridge English Corpus
The widening split between the maritime unions and the general labour movement is also illustrated well by the events of mid-1917.
来自 Cambridge English Corpus
Once again, many of the concerns identified by the unions would appear to be better addressed by a no-fault system than by an adversarial system.
来自 Cambridge English Corpus
How were the unions' links to political parties established ?
来自 Cambridge English Corpus
We might have expected membership of trade unions and professional associations to produce a gender gap, because few women were members of these groups.
来自 Cambridge English Corpus
Institutions of civil society, including trade unions, churches and voluntary associations, were also intimately involved in the development of the administration of the welfare state.
来自 Cambridge English Corpus
The dual multiplicative connectives and correspond simply to disjoint unions and connected sums of bordisms.
来自 Cambridge English Corpus
Unions hired and, in practice, unions determined who was fired.
来自 Cambridge English Corpus
示例中的观点不代表剑桥词典编辑、剑桥大学出版社和其许可证颁发者的观点。
B2,B1
union的翻译
中文(繁体)
聯結, 聯合, 結合…
查看更多内容
西班牙语
unión, sindicato, sindicato [masculine…
查看更多内容
葡萄牙语
união, sindicato, sindicato [masculine]…
查看更多内容
更多语言
in Marathi
日语
土耳其语
法语
加泰罗尼亚语
in Dutch
in Tamil
in Hindi
in Gujarati
丹麦语
in Swedish
马来语
德语
挪威语
in Urdu
in Ukrainian
俄语
in Telugu
阿拉伯语
in Bengali
捷克语
印尼语
泰语
越南语
波兰语
韩语
意大利语
जोडी, एकत्रीकरण, संघटना…
查看更多内容
労働組合, 連邦, 連合国家…
查看更多内容
sendika, birlik, birleşme…
查看更多内容
syndicat [masculine], union [masculine], union…
查看更多内容
sindicat, unió…
查看更多内容
unie, verbintenis…
查看更多内容
சட்டம் அல்லது ஒன்றாக இணைந்திருக்கும் நிலை, ஒரு [X:தொழிற்சங்க]UK…
查看更多内容
मिलन, मिलाप, संघ…
查看更多内容
યોગ, જોડાણ, એકીકરણ…
查看更多内容
union, forening, sammenslutning…
查看更多内容
förening, enande, union…
查看更多内容
penyatuan, Kesatuan…
查看更多内容
die Vereinigung, die Verbindung, die Union…
查看更多内容
fagforening [masculine], union [masculine], enhet [masculine]…
查看更多内容
ہم آہنگی, ملاپ, یگانگت…
查看更多内容
об'єднання, союз, шлюбний союз…
查看更多内容
профсоюз, союз, объединение…
查看更多内容
కలిసి ఉండే చర్య లేదా స్థితి, ఐక్యత సంఘం…
查看更多内容
اِتِّحاد…
查看更多内容
মিলন (বিবাহ বন্ধন), ঐক্য, একতা…
查看更多内容
spojení, svazek, svaz…
查看更多内容
persatuan, persekutuan, serikat…
查看更多内容
การรวมตัวกัน, การสมรส, สหภาพ…
查看更多内容
sự hợp nhất, sự kết hợp, sự kết hôn…
查看更多内容
związek zawodowy, unia, zjednoczenie…
查看更多内容
조합, 연합, 연방…
查看更多内容
sindacato, unione…
查看更多内容
需要一个翻译器吗?
获得快速、免费的翻译!
翻译器工具
union的发音是什么?
在英语词典中查看 union 的释义
浏览
uninterrupted
uninterruptedly
uninvited
uninviting
union
Union Jack
union suit
union-basher
union-bashing
union更多的中文(简体)翻译
全部
non-union
anti-union
craft union
inter-union
labor union
multi-union
rugby union
查看全部意思»
“每日一词”
veggie burger
UK
Your browser doesn't support HTML5 audio
/ˈvedʒ.i ˌbɜː.ɡər/
US
Your browser doesn't support HTML5 audio
/ˈvedʒ.i ˌbɝː.ɡɚ/
a type of food similar to a hamburger but made without meat, by pressing together small pieces of vegetables, seeds, etc. into a flat, round shape
关于这个
博客
Forget doing it or forget to do it? Avoiding common mistakes with verb patterns (2)
March 06, 2024
查看更多
新词
stochastic parrot
March 04, 2024
查看更多
已添加至 list
回到页面顶端
内容
英语-中文(简体)例句翻译
©剑桥大学出版社与评估2024
学习
学习
学习
新词
帮助
纸质书出版
Word of the Year 2021
Word of the Year 2022
Word of the Year 2023
开发
开发
开发
词典API
双击查看
搜索Widgets
执照数据
关于
关于
关于
无障碍阅读
剑桥英语教学
剑桥大学出版社与评估
授权管理
Cookies与隐私保护
语料库
使用条款
京ICP备14002226号-2
©剑桥大学出版社与评估2024
剑桥词典+Plus
我的主页
+Plus 帮助
退出
词典
定义
清晰解释自然的书面和口头英语
英语
学习词典
基础英式英语
基础美式英语
翻译
点击箭头改变翻译方向。
双语词典
英语-中文(简体)
Chinese (Simplified)–English
英语-中文(繁体)
Chinese (Traditional)–English
英语-荷兰语
荷兰语-英语
英语-法语
法语-英语
英语-德语
德语-英语
英语-印尼语
印尼语-英语
英语-意大利语
意大利语-英语
英语-日语
日语-英语
英语-挪威语
挪威语-英语
英语-波兰语
波兰语-英语
英语-葡萄牙语
葡萄牙语-英语
英语-西班牙语
西班牙语-英语
English–Swedish
Swedish–English
半双语词典
英语-阿拉伯语
英语-孟加拉语
英语-加泰罗尼亚语
英语-捷克语
英语-丹麦语
English–Gujarati
英语-印地语
英语-韩语
英语-马来语
英语-马拉地语
英语-俄语
English–Tamil
English–Telugu
英语-泰语
英语-土耳其语
英语-乌克兰语
English–Urdu
英语-越南语
翻译
语法
同义词词典
Pronunciation
剑桥词典+Plus
Shop
剑桥词典+Plus
我的主页
+Plus 帮助
退出
登录 /
注册
中文 (简体)
Change
English (UK)
English (US)
Español
Русский
Português
Deutsch
Français
Italiano
中文 (简体)
正體中文 (繁體)
Polski
한국어
Türkçe
日本語
Tiếng Việt
हिंदी
தமிழ்
తెలుగు
关注我们
选择一本词典
最近的词和建议
定义
清晰解释自然的书面和口头英语
英语
学习词典
基础英式英语
基础美式英语
语法与同义词词典
对自然书面和口头英语用法的解释
英语语法
同义词词典
Pronunciation
British and American pronunciations with audio
English Pronunciation
翻译
点击箭头改变翻译方向。
双语词典
英语-中文(简体)
Chinese (Simplified)–English
英语-中文(繁体)
Chinese (Traditional)–English
英语-荷兰语
荷兰语-英语
英语-法语
法语-英语
英语-德语
德语-英语
英语-印尼语
印尼语-英语
英语-意大利语
意大利语-英语
英语-日语
日语-英语
英语-挪威语
挪威语-英语
英语-波兰语
波兰语-英语
英语-葡萄牙语
葡萄牙语-英语
英语-西班牙语
西班牙语-英语
English–Swedish
Swedish–English
半双语词典
英语-阿拉伯语
英语-孟加拉语
英语-加泰罗尼亚语
英语-捷克语
英语-丹麦语
English–Gujarati
英语-印地语
英语-韩语
英语-马来语
英语-马拉地语
英语-俄语
English–Tamil
English–Telugu
英语-泰语
英语-土耳其语
英语-乌克兰语
English–Urdu
英语-越南语
词典+Plus
词汇表
选择语言
中文 (简体)
English (UK)
English (US)
Español
Русский
Português
Deutsch
Français
Italiano
正體中文 (繁體)
Polski
한국어
Türkçe
日本語
Tiếng Việt
हिंदी
தமிழ்
తెలుగు
内容
英语-中文(简体)
Noun
union (JOINING)
the Union
union (WORKERS)
例句
Translations
语法
所有翻译
我的词汇表
把union添加到下面的一个词汇表中,或者创建一个新词汇表。
更多词汇表
前往词汇表
对该例句有想法吗?
例句中的单词与输入词条不匹配。
该例句含有令人反感的内容。
取消
提交
例句中的单词与输入词条不匹配。
该例句含有令人反感的内容。
取消
提交
SQL UNION 操作符 | 学SQL
SQL UNION 操作符 | 学SQL
学SQL
SQL Language
SQL 简介
SQL 语法
SQL SELECT 语句
SQL SELECT DISTINCT 语句
SQL WHERE 子句
SQL AND & OR 运算符
SQL ORDER BY 关键字
SQL INSERT INTO 语句
SQL UPDATE 语句
SQL DELETE 语句
SQL SELECT TOP, LIMIT, ROWNUM 子句
SQL LIKE 操作符
SQL 通配符
SQL IN 操作符
SQL BETWEEN 操作符
SQL 别名
SQL 连接(JOIN)
SQL INNER JOIN 关键字
SQL LEFT JOIN 关键字
SQL RIGHT JOIN 关键字
SQL FULL OUTER JOIN 关键字
SQL UNION 操作符
MariaDB教程
SQLite教程
其他文章
UNIXETC
Autohotkey
openSUSE
李跳跳
7zip
八号网
LTE中文网
QGIS中文网
白鹿原
冰与火之歌
LearnSQL
RGB色码
晚清沧海事
VPS
CDN
古文观止
SQL UNION 操作符
SQL UNION 操作符
SQL UNION 语法
SQL UNION ALL 语法
SQL UNION 操作符合并两个或多个 SELECT 语句的结果。
SQL UNION 操作符
#
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
SQL UNION 语法
#
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
SQL UNION ALL 语法
#
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
注释:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
SQL UNION 操作符
SQL UNION 语法
SQL UNION ALL 语法