数据库中的集合查询

数据库中的集合操作主要包括3个方面:

1. Union合并行

union的作用是为了合并两个查询结果,而且在合并的同时把相同的行去重。

例如:

如果我们需要显示全部的并集,即不去重,可以使用union all,如下:

我们只需要使用union来连接两个select-from-where语句块即可。

union有如下几个注意点:

1)union是可交换的操作,A union B的结果和B union A的结果相同;

2)理论上,select语句块在union中出现的顺序对于运行速度没有影响,但是在实际应用中可能有影响。我们尽量把小表的查询放在union的前面,因为优化器合并中间结果和除去重复行的方式不同。当然,不同的DBMS的影响可能不同;

3)intersect的优先级比union、except要高。其中,intersect是查找相同行,except是查找不同行。这也是和不同DBMS有关的;

4)在可以使用组合的select-from-where语句块的情况下,尽量不要使用union;

5)当union和union all混合使用的时候,要使用括号来明确合并的顺序,因为这涉及到到底哪些查询结果需要合并;

6)即使没有使用order by语句,union的结果也可能是排序的,而union all由于不去重,所以不需要排序。排序需要很多的额外时间,所以我们能使用union all就尽量不使用union;

2. intersect查找相同行

intersect操作是取两个查询结果的相同行。

mySQL不支持intersect,我们可以使用exists谓词来实现相同的功能。

3. except查找不同行

A except B就是查找属于A但是不属于B的查找结果。

mySQL不支持except,我们可以使用not exists、not in等谓词来实现相同的功能。

时间: 2024-10-11 22:30:10

数据库中的集合查询的相关文章

ORACLE和SYBASE数据库中实现数据查询条数限制的SQL语句实现

一.概述 对于某些需要通过数据库与大量数据打交道的软件来说,处理性能相当的重要.为了保证软件能够将所有数据处理完而不至于崩溃,分批处理的思想应运而生.分批处理的具体做法是编写SQL语句,每次返回规定条数的数据给软件处理,待这一批数据处理完之后,再接着处理下一批. 本文通过对具体的数据库表(tb_employeeinfo)的操作过程,展示了ORACLE和SYBASE数据库中分批处理SQL语句的编写方法. 二.ORACLE数据库中的处理 首先,建立tb_employeeinfo表,其定义如下: be

ORCALE 中的集合查询

集合操作不适用于LOB,Varray和潜逃表列 Union.intersect.minus操作符不适用于long列 如果选择列表中包含有表达式或者函数,那么必须为表达式或函数定义列别名 1.Union:无重并集,并以第一列的结果进行升序排序,去掉合并后的重复记录 SELECT ename,job,sal FROM emp_eason WHERE job = 'MANAGRE' UNION SELECT ename,job,sal FROM emp_eason WHERE sal>2500; 2.

java编写在数据库中按条件查询数据

package lianxi2; import java.sql.*; import java.util.Scanner; public class lianxi2 { public static void main(String[] args) { Connection conn = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); String strUrl ="jdbc:Oracle:thin:@

数据库中的简单查询

1.简单查询 select * from Info --查所有数据select Code,Name from Info --查指定列的数据select Code as '代号',Name as '姓名' from Info --给列指定别名 2.条件查询 select * from Info where Code='p001'select * from Info where Sex='true' and Nation='n001' --多条件并的关系select * from Info wher

数据库中日期作为查询条件的写法

sql server 数据库 select CustomerCord,Deposit,ActualMoney,GiveChange,Registration userName,RecordTime,k.Kh_mc cusName,k.IcCardNoCpu cardcode from PositiveDeposit pd inner join Khda k on pd.CustomerCord=k.Kh_dm  where Convert(varchar(10),pd.RecordTime,12

think PHP提取字符串中的数字,并到数据库中使用in查询所关联表的字段值

/* * 提取数字并去数据库取得相应的分类名 * $strs 需要处理的字符串 * $table 数据表名 * $condition 条件字段 * $field 获取的字段 */ public function extractNumberGetName($strs,$table,$condition,$field){ if(empty($strs)){ return ''; } $patterns = "/\d+/"; preg_match_all($patterns,$strs,$a

sql serve数据库中对in查询到的数据排序

SELECT    * , ROW_NUMBER() OVER ( ORDER BY ffavoriteid ) AS numFROM      V_EBFavorite_TransportWHERE     FStatus IN ( 2, 1, 4 )                  ORDER BY CHARINDEX(RTRIM(CAST(FStatus AS VARCHAR(30))), '2, 1, 4')

Sqlite数据库中如何优化like查询

Sqlite数据库中like的查询和Mysql一级Oracel等数据库一样,可以进行模糊查询,但是在Sqlite数据库中like查询是不会走索引的,当数据库数据库较大时用模糊查询就会显得特别的慢. 因此,如何才能让模糊查询走索引呢?下面提供一个找了很久很久才找到的方法,绝对比网上提供的那些好用的多. 如:where name like 'W%' 可以转换成 where name >='W' and name<='Wa' //大于等于本身,小于等于本身加a 此种转换只使用最后一位是字母的 如:w

转:SQL SERVER数据库中实现快速的数据提取和数据分页

探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo].[TGongwen] (    --TGongwen是红头文件表名 [Gid] [int] IDENTITY (1, 1) NOT NULL , --本表的id号,也是主键 [title] [varchar] (80) COLLATE Chinese_PRC_CI_AS NULL ,  --红头文件