im钱包安卓版下载
数字资产服务平台

im钱包安卓版下载是全球著名的数字资产交易平台之一,主要面向全球用户提供比特币、莱特币、以太币等数字资产的币币和衍生品交易服务。

imtoken官方正版app下载|union

时间:2024-03-07 21:41:19

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语言关键字​赞同 17​​4 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录

联合体(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​赞同 10​​1 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录零基础入门进阶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 语法