文学起点网
当前位置: 首页 文学百科

sql数据库查询语句select(如何利用SQLUNION)

时间:2023-07-14 作者: 小编 阅读量: 3 栏目名: 文学百科

利用UNION,可给出多条SELECT语句,将它们的结果组合成一个结果集。如上所述,创建UNION涉及编写多条SELECT语句。第二条SELECT利用简单的相等测试找出所有Fun4All。这种行为带来一个有意思的副作用。如果遵守了这些基本规则或限制,则可以将UNION用于任何数据检索操作。

sql数据库查询语句select?目录本文介绍如何利用 SQL UNION 操作符将多条 SELECT 语句组合成一个结果集使用 UNION 可极大地简化复杂的 WHERE 子句,简化从多个表中检索数据的工作,我来为大家科普一下关于sql数据库查询语句select?以下内容希望对你有帮助!

sql数据库查询语句select

目录

  • 一、组合查询
  • 二、创建组合查询2.1 使用 UNION2.2 UNION 规则2.3 包含或取消重复的行2.4 对组合查询结果排序
  • 三、小结

本文介绍如何利用 SQL UNION 操作符将多条 SELECT 语句组合成一个结果集。使用 UNION 可极大地简化复杂的 WHERE 子句,简化从多个表中检索数据的工作。

一、组合查询

多数 SQL 查询只包含从一个或多个表中返回数据的单条 SELECT 语句。但是,SQL 也允许执行多个查询(多条 SELECT 语句),并将结果作为一个查询结果集返回。

这些组合查询通常称为并(union)或复合查询(compound query)。

主要有两种情况需要使用组合查询:

  • 在一个查询中从不同的表返回结构数据;
  • 对一个表执行多个查询,按一个查询返回数据。

提示:组合查询和多个 WHERE 条件

多数情况下,组合相同表的两个查询所完成的工作与具有多个 WHERE 子句条件的一个查询所完成的工作相同。

换句话说,任何具有多个 WHERE 子句的 SELECT 语句都可以作为一个组合查询,在下面可以看到这一点。

二、创建组合查询

可用 UNION 操作符来组合数条 SQL 查询。利用 UNION,可给出多条 SELECT 语句,将它们的结果组合成一个结果集。

2.1 使用 UNION

使用 UNION 很简单,所要做的只是给出每条 SELECT 语句,在各条语句之间放上关键字 UNION。

举个例子,假如需要 Illinois、Indiana 和 Michigan 等美国几个州的所有顾客的报表,还想包括不管位于哪个州的所有的 Fun4All。

当然可以利用 WHERE 子句来完成此工作,不过这次我们使用 UNION。

如上所述,创建 UNION 涉及编写多条 SELECT 语句。首先来看单条语句:

SELECT cust_name, cust_contact, cust_emailFROM CustomersWHERE cust_state IN ('IL','IN','MI');

输出:

cust_namecust_contactcust_email------------------------------------Village ToysJohn Smithsales@villagetoys.comFun4AllJim Jonesjjones@fun4all.comThe Toy StoreKim HowardNULL

输入:

SELECT cust_name, cust_contact, cust_emailFROM CustomersWHERE cust_name = 'Fun4All';

输出:

cust_namecust_contactcust_email------------------------------------Fun4AllJim Jonesjjones@fun4all.comFun4AllDenise L. Stephensdstephens@fun4all.com

第一条 SELECT 把 Illinois、Indiana、Michigan 等州的缩写传递给 IN 子句,检索出这些州的所有行。

第二条 SELECT 利用简单的相等测试找出所有 Fun4All。你会发现有一条记录出现在两次结果里,因为它满足两次的条件。

组合这两条语句,可以如下进行:

SELECT cust_name, cust_contact, cust_emailFROM CustomersWHERE cust_state IN ('IL','IN','MI')UNIONSELECT cust_name, cust_contact, cust_emailFROM CustomersWHERE cust_name = 'Fun4All';

输出:

cust_namecust_contactcust_email--------------------------------------Fun4AllDenise L. Stephensdstephens@fun4all.comFun4AllJim Jones jjones@fun4all.comVillage ToysJohn Smithsales@villagetoys.comThe Toy StoreKim HowardNULL

这条语句由前面的两条 SELECT 语句组成,之间用 UNION 关键字分隔。UNION 指示 DBMS 执行这两条 SELECT 语句,并把输出组合成一个查询结果集。

为了便于参考,这里给出使用多条 WHERE 子句而不是 UNION 的相同查询:

SELECT cust_name, cust_contact, cust_emailFROM CustomersWHERE cust_state IN ('IL','IN','MI') OR cust_name='Fun4All';

在这个简单的例子中,使用 UNION 可能比使用 WHERE 字句更为复杂。但对于较复杂的过滤条件,或者从多个表(而不是一个表)中检索数据的情形,使用 UNION 可能会使处理更简单。

提示:UNION 的限制

使用 UNION 组合 SELECT 语句的数目,SQL 没有标准限制。但是,最好是参考一下具体的 DBMS 文档,了解它是否对 UNION 能组合的最大语句数目有限制。

注意:性能问题

多数好的 DBMS 使用内部查询优化程序,在处理各条 SELECT 语句前组合它们。

理论上讲,这意味着从性能上看使用多条 WHERE 子句条件还是 UNION 应该没有实际的差别。

不过我说的是理论上,实践中多数查询优化程序并不能达到理想状态,所以最好测试一下这两种方法,看哪种工作得更好。

2.2 UNION 规则

可以看到,UNION 非常容易使用,但在进行组合时需要注意几条规则。

  • UNION 必须有两条或两条以上的 SELECT 语句组成,语句之间用关键字 UNION 分隔(因此,如果组合四条 SELECT 语句,将要使用三个 UNION 关键字)。
  • UNION 中的每个查询必须包含相同的列、表达式或聚集函数(不过,各个列不需要以相同的次序列出)。
  • 列数据类型必须兼容:类型不必完全相同,但必须是 DBMS 可以隐含转换的类型(例如,不同的数值类型或不同的日期类型)。

说明:UNION 的列名

如果结合 UNION 使用的 SELECT 语句遇到不同的列名,那么会返回什么名字呢?比如说,如果一条语句是 SELECT prod_name,而另一条语句是 SELECT productname,那么查询结果返回的是什么名字呢?

答案是它会返回第一个名字,举的这个例子就会返回 prod_name,而不管第二个不同的名字。这也意味着你可以对第一个名字使用别名,因而返回一个你想要的名字。

这种行为带来一个有意思的副作用。由于只使用第一个名字,那么想要排序也只能用这个名字。

拿我们的例子来说,可以用 ORDER BY prod_name 对结果排序,如果写成 ORDER BY productname 就会出错,因为查询结果里没有叫作 productname 的列。

如果遵守了这些基本规则或限制,则可以将 UNION 用于任何数据检索操作。

2.3 包含或取消重复的行

回到 2.1 节,我们看看所用的 SELECT 语句。

注意到在分别执行语句时,第一条 SELECT 语句返回 3 行,第二条 SELECT 语句返回 2 行。而在用 UNION 组合两条 SELECT 语句后,只返回 4 行而不是 5 行。

UNION 从查询结果集中自动去除了重复的行;换句话说,它的行为与一条 SELECT 语句中使用多个 WHERE 子句条件一样。

因为 Indiana 州有一个 Fun4All 单位,所以两条 SELECT 语句都返回该行。使用 UNION 时,重复的行会被自动取消。

这是 UNION 的默认行为,如果愿意也可以改变它。事实上,如果想返回所有的匹配行,可使用 UNION ALL 而不是 UNION。

请看下面的例子:

SELECT cust_name, cust_contact, cust_emailFROM CustomersWHERE cust_state IN ('IL','IN','MI')UNION ALLSELECT cust_name, cust_contact, cust_emailFROM CustomersWHERE cust_name = 'Fun4All';

输出:

cust_namecust_contactcust_email------------------------------------Village ToysJohn Smith sales@villagetoys.comFun4AllJim Jonesjjones@fun4all.comThe Toy StoreKim Howard NULLFun4AllJim Jonesjjones@fun4all.comFun4AllDenise L. Stephensdstephens@fun4all.com

使用 UNION ALL,DBMS 不取消重复的行。因此,这里返回 5 行,其中有一行出现两次。

提示:UNION 与 WHERE

本文一开始我们说过,UNION 几乎总是完成与多个 WHERE 条件相同的工作。

UNION ALL 为 UNION 的一种形式,它完成 WHERE 子句完成不了的工作。

如果确实需要每个条件的匹配行全部出现(包括重复行),就必须使用 UNION ALL,而不是 WHERE。

2.4 对组合查询结果排序

SELECT 语句的输出用 ORDER BY 子句排序。

在用 UNION 组合查询时,只能使用一条 ORDER BY 子句,它必须位于最后一条 SELECT 语句之后。

对于结果集,不存在用一种方式排序一部分,而又用另一种方式排序另一部分的情况,因此不允许使用多条 ORDER BY 子句。

下面的例子对前面 UNION 返回的结果进行排序:

SELECT cust_name, cust_contact, cust_emailFROM CustomersWHERE cust_state IN ('IL','IN','MI')UNIONSELECT cust_name, cust_contact, cust_emailFROM CustomersWHERE cust_name = 'Fun4All'ORDER BY cust_name, cust_contact;

输出:

cust_namecust_contactcust_email-------------------------------------Fun4AllDenise L. Stephensdstephens@fun4all.comFun4AllJim Jonesjjones@fun4all.comThe Toy StoreKim Howard NULLVillage ToysJohn Smith sales@villagetoys.com

这条 UNION 在最后一条 SELECT 语句后使用了 ORDER BY 子句。

虽然 ORDER BY 子句似乎只是最后一条 SELECT 语句的组成部分,但实际上 DBMS 将用它来排序所有 SELECT 语句返回的所有结果。

说明:其他类型的 UNION

某些 DBMS 还支持另外两种 UNION:EXCEPT(有时称为 MINUS)可用来检索只在第一个表中存在而在第二个表中不存在的行;

而 INTERSECT 可用来检索两个表中都存在的行。实际上,这些 UNION 很少使用,因为相同的结果可利用联结得到。

提示:操作多个表

为了简单,本文中的例子都是使用 UNION 来组合针对同一表的多个查询。

实际上,UNION 在需要组合多个表的数据时也很有用,即使是有不匹配列名的表,在这种情况下,可以将 UNION 与别名组合,检索一个结果集。

三、小结

本文介绍了如何用 UNION 操作符来组合 SELECT 语句。利用 UNION,可以把多条查询的结果作为一条组合查询返回,不管结果中有无重复。

使用 UNION 可极大地简化复杂的 WHERE 子句,简化从多个表中检索数据的工作。

    推荐阅读
  • 荷塘月色简笔画彩图(荷塘的场景图简笔画)

    今日份简笔画荷塘月色.感恩日记1.,我来为整理几张简单漂亮的荷塘月色简笔画彩图?以下简笔画图片总有一款是你喜欢的,希望对你有帮助来看看吧!荷塘月色简笔画彩图今日份简笔画荷塘月色.感恩日记1.荷塘月色好看的儿童画图片儿童简笔画大全荷塘月色简笔画儿童画

  • 直硬头发软化前后效果图(头发软化前后效果图)

    可以使头发变软,变柔顺,变贴服,且价格也很便宜,普通的美发沙龙价格为50到80元左右,软化比较自然。头发软化后几天可以洗刚做完软化2至3天不要洗头,刚做完软化不要用力拉头发,会有损发质和效果。软化也是伤头发的,不过比不停地做一次性夹头发而言小很多,如果是短发做软化还是不错的。如果想让头发蓬蓬的,最好不要全头做软化,甚至不建议做软化。具体情况,建议咨询理发师。用药水要用好一点的,对头发伤害才不会很大。

  • 赞美运动员的话(赞美运动员的话有什么)

    年轻的我们自信飞扬,青春的气息如同出生的朝阳,蓬勃的力量如同阳光的挥洒此时此刻,跑道便是我们精彩的舞台,声声加油便是我们最高的奖项论何成功,谈何荣辱,心中的信念只有一个:拼搏,我来为大家科普一下关于赞美运动员的话?赞美运动员的话年轻的我们自信飞扬,青春的气息如同出生的朝阳,蓬勃的力量如同阳光的挥洒。所有的努力都是为了迎接这一刹那,所有的拼搏都是为了这一声令下。

  • 长安uni-k车主反映这款车怎么样(新车长安UNI-K登场)

    据长安汽车最新消息,中大型SUVUNI-K官图曝光,这是长安UNI系列的第二款车型。新车将搭载蓝鲸系列2.0T发动机并匹配8AT变速箱,将于广州车展首发亮相。新车亮点1.采用了全新的“V”型面设计和无边界格栅。新车概况新车前脸依然采用无边界设计并融入了V型面概念,不同于UNI-T,UNI-K的大灯位置设计在了最上方。车尾方面采用了时下流行的贯穿式尾灯设计,与UNI-T的V型后导流造型不同,UNI-K采用了新的航天器式造型,立式尾灯十分显眼。

  • 渡劫经典语录(关于渡劫的语录精选)

    情到深处人孤独,爱至穷时尽沧桑堕落的天使啊,你无知的游走着。我将于茫茫人海中访我唯一灵魂之伴侣;得之,我幸;不得,我命。玲珑骰子安红豆,入骨相思君知否。于千万人之中遇见你所遇见的人,于千万年时间无涯的荒野里,没有早一步,也没有晚一步,刚巧赶上了。生命是一朵千瓣莲花,我拒绝了绽放的同时,我也拒绝了枯萎和零落。就算哭泣也要皱眉优雅,就算失败也要转身潇洒。之后我也学会了阳奉阴违,发生了什么与我再无所谓。

  • 孤城闭什么时候上映(谁是主演)

    以下内容大家不妨参考一二希望能帮到您!孤城闭什么时候上映《孤城闭》将于2020年起在湖南卫视上映播出。该剧主要由王凯、江疏影、任敏、杨玏、边程、叶祖新、喻恩泰、王楚然、刘钧、孙坚等主演。《孤城闭》改编自米兰lady同名小说,以北宋为背景,在风起云涌的朝堂之事与剪不断理还乱的儿女情长之间,还原了一个复杂而真实的宋仁宗。

  • 大众朗逸所有灯图解(认识汽车灯图解)

    大众朗逸所有灯图解作为新手,汽车灯光就是一道难题,下面我们一起通过图解来认识一下汽车各种灯光吧。双闪灯的作用是当车辆发生意外情况后,引起其他车辆警惕,防止发生追尾事故。当踩下制动踏板后,制动灯立即亮起,并发出红色灯光,提醒后方车辆。倒车灯是白色,作用是为了照亮车尾的路面,减少倒车时盲区,另外也是对后方的提醒。

  • 雪里红的腌制方法(做雪里红腌菜的步骤)

    下面更多详细答案一起来看看吧!雪里红的腌制方法雪里红摘干净,根部用刀劈开,正一层反一层放入盆中,取盐均匀地洒在雪里红上,腌制1-2天。烧开水放凉,加盐,搅拌均匀,盐水倒入雪里红中泡制一天。泡好的雪里红捆成一小捆放入密封罐,倒入泡雪里红的盐水,盖好密封罐,即吃即取。

  • 郑州婚纱照推荐哪家好(郑州拍婚纱照团购)

    中国红喜嫁秀爆朋友圈的婚纱照中式婚纱照新中式婚纱照婚纱照风格高级感婚纱照婚纱照秀禾服的中式嫁衣,是完美诠释了东方女性温婉古典美。让人完全移不开目光~每一个女孩子都应该拥有这样华丽的喜嫁风太精致完全属于中式婚纱照的浪漫感~

  • 胎梦最准的位置(从胎梦看看你腹中的孩子给你暗示了吗)

    估计生完孩子和正在孕期的妈妈都会经历过这种事情,就是我们会经常做梦,而且会梦见一些动物植物什么的,这在老人眼里属于“胎梦”。你梦见的什么会预示着即将出生的宝宝是男孩还是女孩。你的胎梦准不准,来看看一下别人的胎梦。哈哈,看来有些胎梦还是挺准的,或许都是巧合吧,总之,宝宝来了就是我们的命中注定。