-
SQL Server—并查询、交查询、差查询
2020-05-12 20:54:18交查询 差查询 student表 sc表 并查询 什么是并查询? 将两个select语句查询到的结果合并 如图,将查询到的A结果集和B结果集结合在一起 代码实现: select a.CId,a.score ,b.Sname ...目录
student表
sc表
并查询
什么是并查询?
将两个select语句查询到的结果合并
如图,将查询到的A结果集和B结果集结合在一起
代码实现:
select a.CId,a.score ,b.Sname --找出指定学生 from sc a, student b where a.SId =b.SId and CId = 01 union select ' ',sum(score),'合计' --成绩总数 from sc a, student b where a.SId =b.SId and CId = 01
执行结果:
交查询
什么是交查询?
将两个select语句结果集结合在一起,求他们共有的部分
如图,得到结果集A和结果集B,求他们共同拥有的结果集C部分
代码实现:
select a.CId ,a.score ,b.Sname from sc a ,student b --查询课程为801,考试为01的学生 where a.SId =b.SId and a.CId ='01' and a.课程编号 ='801' intersect select top 10 a.CId ,a.score ,b.Sname from sc a, student b --查询课程为801,成绩前10的学生 where a.SId =b.SId and a.课程编号 ='801' order by a.score desc
执行结果:
差查询
差查询求的是哪部分?
去除select两个结果集不想交的地方
代码实现:
select a.CId ,a.score ,b.Sname from sc a ,student b --查询考试为01的学生 where a.SId =b.SId and a.CId ='01' except select top 15 a.CId ,a.score ,b.Sname from sc a, student b --查询课程为801,成绩前10的学生 where a.SId =b.SId and a.课程编号 ='801' order by a.score desc
执行结果:
-
数据库之SQL(交查询、差查询、并查询)
2018-07-19 17:29:06一、交查询(INTERSECT) ①交查询查出的数据是两个数据表中的哪块数据呢? A,B数据的交集C部分为交查询最后的查询结果。 ②我想要查询两个数据表之间的交查询,是不是把两个表用intersect连接起来就行了呢? ...一、交查询(INTERSECT)
①交查询查出的数据是两个数据表中的哪块数据呢?
A,B数据的交集C部分为交查询最后的查询结果。
②我想要查询两个数据表之间的交查询,是不是把两个表用intersect连接起来就行了呢?
看来不是这样的,报错提示:UNION(联合查询),INTERSECT(交查询)与EXCEPT(差查询)必须在目标列表中有相同的数目表达式,具体什么是数目表达式,我们前面的博客中有实例说明,不再赘述。
我们找数据表达式相同的两个数据表来进行交查询。
结果是可行的。
③如果我们在intersect前面的数据表中加上order by是什么样的结果呢?
显示语法错误,显然我们得出的结论是:intersect前面的表格中不能添加order by语句
④那么在intersect后面的表格中添加会是什么样呢?
放到后面就没有问题了,但有时会有影响,那么放到子查询语句中来避免就可以了。
二、差查询(EXCEPT)
①差查询是与交集相对立的补集么?
不是补集,而是相对补集
②什么是相对补集
B中A的相对补集为蓝色部分,而差查询,则是B中的数据减去A与B相交数据剩下的部分
此查询的结果正是‘旧员工信息’数据表中的数据,减去两个表格相交的数据。
三、思维导图(在前三篇博客基础上的拓展与总结)
到此数据库视频的第七章已梳理完毕,下一站,走起^_^
-
[并查集] BZOJ 4243 交朋友
2016-06-22 18:37:34把能进行会议的国家之间都用并查集连接起来,然后把每个进行过会议的国家扔进队列跑BFS,将搜到的国家用并查集连接 最终答案等于每个单点的出度个数+2*C(每个集合的大小,2) #include #include #include ...Po姐说
把能进行会议的国家之间都用并查集连接起来,然后把每个进行过会议的国家扔进队列跑BFS,将搜到的国家用并查集连接
最终答案等于每个单点的出度个数+2*C(每个集合的大小,2)#include<cstdio> #include<cstdlib> #include<algorithm> #include<set> #define V G[p].v using namespace std; typedef long long ll; inline char nc() { static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; } return *p1++; } inline void read(int &x) { char c=nc(),b=1; for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1; for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b; } const int N=100005; namespace TSet{ int fat[N],rank[N],size[N]; void init(int n){ for (int i=1;i<=n;i++) fat[i]=i,rank[i]=0,size[i]=1; } int Fat(int u){ return u==fat[u]?u:fat[u]=Fat(fat[u]); } void Union(int x,int y){ x=Fat(x),y=Fat(y); if (x==y) return; if (rank[x]>rank[y]) swap(x,y); if (rank[x]==rank[y]) rank[x]++; fat[x]=y; size[y]+=size[x]; } }; int n,m; ll ans; int Q[N],vst[N]; int l=-1,r=-1; set<int> M[N]; typedef set<int>::iterator ITER; int main() { using namespace TSet; freopen("t.in","r",stdin); freopen("t.out","w",stdout); int iu,iv; read(n); read(m); init(n); for(int i=1;i<=m;i++) read(iu),read(iv),M[iu].insert(iv); for(int i=1;i<=n;i++) for(ITER it=M[i].begin();it!=M[i].end();it++) if (M[*it].find(i)!=M[*it].end()) Union(i,*it); for(int i=1;i<=n;i++) if (M[i].size()>1) { int last=*M[i].begin(); ITER it=M[i].begin(); it++; for(;it!=M[i].end();it++) Union(*it,last); } for(int i=1;i<=n;i++) if(size[Fat(i)]>1) vst[i]=1,Q[++r]=i; while (l<r) { iu=Q[++l]; for(ITER it=M[iu].begin();it!=M[iu].end();it++) { Union(iu,*it); if(!vst[*it]) vst[*it]=1,Q[++r]=*it; } } for(int i=1;i<=n;i++) if (Fat(i)==i) { if(size[i]==1) ans+=M[i].size(); else ans+=(ll)size[i]*(size[i]-1); } printf("%lld\n",ans); return 0; }
-
bzoj 4243:交朋友 并查集
2019-01-26 16:15:44你的工作是对于可以进行会议的两国,选择会议的中介并促使会议进行。使用这张图进行工作的模拟的话,世界距离和平还有多远的一个重要的基准就是这张图上的边数。也就是说,你想知道反复进行【选择两个国家使其进行...Description
你是活跃在历史的幕后的一名特工,为了世界的和平而日以继夜地努力着。
这个世界有N个国家,编号为1…N,你的目的是在这N个国家之间建立尽可能多的友好关系。你为了制定一个特工工作的计划,作出了一张当今国际关系的示意图。
你准备了一张非常大的画纸,先画下了代表每个国家的N个点。接下来,为了表示现在的国际关系,画下了M个连接两个国家的有向边,其中从国家a连向国家b的有向边(下面称作“边(a,b)”)表示“现在国家a向国家b派遣了大使”。这样就做出了N个点M条边的当今国际关系示意图。
作为两国友好关系的开端,两国之间需要进行“友好条约缔结会议”(以下简称会议)。如果某两个国家p和q要进行会议,那么需要一个向两国都派遣了大使的国家x作为中介。会议结束后,会议的双方相互向对方的国家派遣大使。换句话说,为了让国p和国q进行会议,必须存在一个国家x满足边(x,p)和边(x,q)都存在,并且在会议后添加两条边(p,q)和(q,p)(如果需要添加的某条边已经存在则不添加)。
你的工作是对于可以进行会议的两国,选择会议的中介并促使会议进行。使用这张图进行工作的模拟的话,世界距离和平还有多远的一个重要的基准就是这张图上的边数。也就是说,你想知道反复进行【选择两个国家使其进行会议】的工作后,图上的边数最多会到达多少。
现在给出国家的个数以及当今国际关系的情报,请你求出反复进行【选择两个国家使其进行会议】的工作后,图上的边数最多会到达多少。
Input第一行两个空格分隔的整数N和M,分别表示世界上国家的个数和图中的边数
接下来M行描述画纸上的有向边的信息,其中第i行(1<=i<=M)有两个空格分隔的整数Ai和Bi,表示图中有一条从Ai到Bi的有向边(即Ai国向Bi国派遣了大使)。
Output输出一行一个整数,表示能实现的边数的最大值。注意这个边数包括原有的边数和新连接的边数。
Sample Input5 4
1 2
1 3
4 3
4 5
Sample Output10
HINT按照下面的顺序实现10条边:
以国1为中介,国2与国3进行会议;
以国4为中介,国3与国5进行会议;
以国3为中介,国2与国5进行会议。
1<=N<=10^5
1<=M<=2*10^5
1<=Ai<=N(1<=i<=M)
1<=Bi<=N(1<=i<=M)
Ai≠Bi(1<=i<=M)
(Ai,Bi)≠(Aj,Bj)(1<=i<j<=M)
Source
JOI 2013~2014 春季training合宿 竞技2 By PoPoQQQ
分析:
假设有一个点,显然他连出去的点将会连成一个完全子图。
然后把大于的完全子图的节点插入一个队列里。
枚举队列里的点,如果存在连向的一条边,显然中的所有点都可以有连向的双向边,所以可以合并和。如果是一个大小为的完全子图,则把他插入队列。代码:
/************************************************************** Problem: 4243 User: liangzihao Language: C++ Result: Accepted Time:4904 ms Memory:8904 kb ****************************************************************/ #include <iostream> #include <cstdio> #include <cmath> #include <queue> #define LL long long const int maxn=2e5+7; using namespace std; int n,m,x,y,cnt,pl; int ls[maxn],vis[maxn],size[maxn],p[maxn]; LL ans; struct edge{ int y,next; }g[maxn]; queue <int> q; void add(int x,int y) { g[++cnt]=(edge){y,ls[x]}; ls[x]=cnt; } int find(int x) { if (!p[x]) return x; return p[x]=find(p[x]); } void uni(int x,int y) { int u=find(x),v=find(y); if (u==v) return; p[u]=v; size[v]+=size[u]; } int main() { scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { scanf("%d%d",&x,&y); add(x,y); } for (int i=1;i<=n;i++) { p[i]=0; size[i]=1; } for (int i=1;i<=n;i++) { pl=0; for (int j=ls[i];j>0;j=g[j].next) { int y=g[j].y; if (!pl) pl=y; else { uni(pl,y); if (!vis[y]) q.push(y),vis[y]=1; if (!vis[pl]) q.push(pl),vis[pl]=1; } } } while (!q.empty()) { int x=q.front(); q.pop(); for (int i=ls[x];i>0;i=g[i].next) { int y=g[i].y; uni(x,y); if (!vis[y]) q.push(y),vis[y]=1; } } for (int i=1;i<=n;i++) { if (find(i)==i) { ans+=(LL)size[i]*((LL)size[i]-1); } for (int j=ls[i];j>0;j=g[j].next) { int y=g[j].y; if (find(i)!=find(y)) ans++; } } printf("%lld\n",ans); }
-
机房收费系统之组合查询简化版-基本信息维护窗体(采用SQL交查询、并查询语句进行组合查询)
2018-10-09 17:27:07逻辑梳理就花费了很长时间,在第一个‘学生上机统计信息’的组合查询窗体中有很多代码冗余,导致代码篇幅很长,这次在做‘学生基本信息维护’窗体时又遇到了组合查询,这次的组合查询并未直接按照之前的那种方法,... -
集合的交、查、并
2019-09-30 05:06:08http://ifeve.com/google-guava-collectionutilities/ 转载于:https://www.cnblogs.com/DengGao/p/10193972.html -
并查集
2021-01-07 08:10:10文章目录并查集并查集问题中集合如何存储实现 并查集 集合的运算:交、并、补、差和判断一个元素是否属于某一集合。 并查集:集合的合并、判断一个元素是否属于某一集合的操作。 并查集问题中集合如何存储 可以用树... -
如何在SQL查询中进行交并操作?
2017-11-19 07:34:05我现在不懂的是,如何在SQL查询中进行isKosher的交并判断? ``` CREATE TABLE ingredient ( code CHAR(8) PRIMARY KEY, name VARCHAR(127) UNIQUE, is_kosher BOOLEAN ); CREATE TABLE recipe ( name VARCHAR... -
SQL多表连接查询与集合的并、交、差运算查询
2012-03-13 14:19:34为了进行并、交、差运算,要求运算的两个查询结果具有相同的字段个数,并且对应的字段的值要出自同一个值域,即具有相同的数据类型和取值范围 10:并运算(union) 主要将两个或者更多个查询的结果组合... -
java最简单的并查集(不想交集合)以及杭电1272
2018-05-16 00:05:31并查集要有的一些属性:value:表示当前值,指针:(不一定是指针)指向父节点。 还有一个属性number:表示该树存在的总个数。(也可以用深度表示)。我用小树插在大树上。 如果是普通数字表示的树,可以简化: ... -
python中的交并_Python:数据类型---集合的增删查与交并差集
2020-12-22 03:58:05#updateset1= {'alex','wusir','ritian','egon','barry'}set1.update('abc')print(set1)删1,popset.pop()#随机删除,有返回值2,removeremove#按元素去...---》会报错查只能用for去查3、集合的交集并集差集1,交集:... -
SQL三表连接查询与集合的并、交、差运算查询
2016-08-15 11:16:34为了进行并、交、差运算,要求运算的两个查询结果具有相同的字段个数,并且对应的字段的值要出自同一个值域,即具有相同的数据类型和取值范围 10:并运算(union) 主要将两个或者更多个查询的结果组合... -
在employees表中查询出员工的工资,并计算应交税款
2012-10-15 19:49:28在employees表中查询出员工的工资,并计算应交税款:如果工资小于1000,税率为0,如果工资大于等于1000并小于2000,税率为10%,如果工资大于等于2000并小于3000,税率为15%,如果工资大于等于3000,税率为20%。 -
顺序表的交并补 增删查
2017-03-06 20:38:07尾部附加源码 增加数据Status ListInsert_Sq(SqList &L,int i,ElemType e){ if(L.length == LIST_INIT_SIZE || i||i>L.length+1){ return ERROR; } ElemType *q,*p; p = &(L.elem[i-1]); /**这个可 -
poj 1127 Jack Straws 线段判交+并查集
2015-03-29 11:14:12解题思路:看到连接具有传递性就该想到木棍将组成集合,判断连接即判断木棍是否属于同一个集合,用并查集再方便不过了。然后是决定并查集合并集合的条件,也就是上面提到的两种情况:线段相交和共线重叠。 判断...
-
MMM 集群部署实现 MySQL 高可用和读写分离
-
平面型四光纤耦合系统的研究
-
shockwave网站::rocket:ShockWave Inc.网站-源码
-
Mysql数据库面试直通车
-
两个栈实现队列
-
基于电商业务的全链路数据中台落地方案(全渠道、全环节、全流程)
-
MySQL你该了解的那些事【服务端篇】
-
一天学完MySQL数据库
-
Prisma初体验【逆向生成数据模型】
-
敏捷个人:内容框架之执行力
-
一场危险的赌博?马斯克斥巨资买比特币或致特斯拉损失惨重
-
LoadRunner设置检查点的几种方法介绍
-
同行评审常见问题解答
-
浅谈用户引导设计
-
Glasterfs 分布式网络文件系统
-
前端websocket与php后台连接
-
DHCP 动态主机配置服务(在Linux环境下,配置单网段或跨网段提)
-
云存储基础架构剖析
-
在敏捷软件开发中使用虚拟化技术
-
OpenCV-学习历程22-像素重映射(cv::remap)