sql多表联合查询二个查询实例

sql多表联合查询二个查询实例

先看常用的查询

两表结构不一样
select m.* , n.* from t1 m, t2 n where m.id = n.id
and n.date = (select max(date) from t2 where id = n.id)

select m.* , n.* from t1 m, t2 n where m.id = n.id
and not exists (select 1 from t2 where id = n.id and date > n.date)

select m.* , n.* from t1 m, t2 n where m.id = n.id
and n.date = (select min(date) from t2 where id = n.id)

select m.* , n.* from t1 m, t2 n where m.id = n.id
and not exists (select 1 from t2 where id = n.id and date < n.date)

实例

2>
3> CREATE TABLE stores(
4>    stor_id        char(4)           NOT NULL,
5>    stor_name      varchar(40)           NULL,
6>    stor_address   varchar(40)           NULL,
7>    city           varchar(20)           NULL,
8>    state          char(2)               NULL,
9>    zip            char(5)               NULL
10> )
11> GO
1> insert stores values('1','B','567 Ave.','Tustin',   'CA','92789')
2> insert stores values('2','N','577 St.', 'Los Gatos','CA','96745')
3> insert stores values('3','T','679 St.', 'Portland', 'OR','89076')
4> insert stores values('4','F','89  St.', 'Fremont',  'CA','90019')
5> GO

(1 rows affected)

(1 rows affected)

(1 rows affected)

(1 rows affected)
1>
2>
3> CREATE TABLE discounts(
4>    discounttype   varchar(40)       NOT NULL,
5>    stor_id        char(4) NULL              ,
6>    lowqty         smallint              NULL,
7>    highqty        smallint              NULL,
8>    discount       dec(4,2)          NOT NULL
9> )
10> GO
1>
2> insert discounts values('Initial Customer',  NULL,   NULL, NULL, 10.5)
3> insert discounts values('Volume Discount',   NULL,   100,  1000, 6.7)
4> insert discounts values('Customer Discount', '8042', NULL, NULL, 5.0)
5> GO

(1 rows affected)

(1 rows affected)

(1 rows affected)
1>    SELECT stor_id AS "Store ID", stor_name AS "Store Name"
2>    FROM stores
3>    WHERE stor_id < SOME
4>    (SELECT stor_id FROM discounts WHERE stor_id IS NOT NULL)
5> GO
Store ID Store Name
-------- ----------------------------------------
1        B
2        N
3        T
4        F

(4 rows affected)
1>
2> drop table stores;
3> drop table discounts;
4> GO
1>

some语法

4>    SELECT stor_id AS "Store ID", stor_name AS "Store Name"
5>    FROM stores
6>    WHERE stor_id != SOME
7>       (SELECT stor_id FROM discounts WHERE stor_id IS NOT NULL)
8> GO

. create table #A(id int) go insert into #A s(1) insert into #A s(2) insert into #A s(3) insert into #A s(4) go --All:
对所有数据都满足条件,整个条件才成立,
例如:5大于所有返回的id
select * from #A where 5>All(select id from #A) go --Any:
只要有一条数据满足条件,整个条件成立,
例如:3大于1,2 select * from #A where 3>any(select id from #A) go

--Some和Any一样

详细

--分组取其中某字段最小,去重复
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([EID] varchar(2),[OID] varchar(2),[Value] int)
insert [tb]
select 'E1','O1',4 union all
select 'E2','O2',16 union all
select 'E3','O1',5 union all
select 'E4','O2',8 union all
select 'E5','O1',3 union all
select 'E6','O3',9

select t1.* from tb t1
where  EID  = (
    select top 1 t2. EID  from tb t2
    where t2.Value = (
        select min(t3.Value) from tb t3
        where t2.EID=t3.EID 
    ) and t1.OID=t2.OID
)
and  t1.EID in ('E1','E2','E4')

时间: 2024-10-24 02:27:26

sql多表联合查询二个查询实例的相关文章

sql 统计 行转列 动态-sql 多表联合统计问题

问题描述 sql 多表联合统计问题 三张表,用户表用户:ID Uname1 张三2 李四3 王五. .. .. . 档案分类1:ID Title UserID1 XXX 22 aaa 23 bbb 14 ccc 3 . . . . . . . . . 档案分类2:ID FileNo UserID1 XXX 22 aaa 23 bbb 14 ccc 3 . . . . . . . . .档案表和用户表通过UserID 关联,怎样统计出下面的效果: 分类名称 总数 张三 李四 王五 -- 档案1 1

sql 多表联合查询

关于sql 多表联合查询方法很多,我们今天就来讲一下关于sql多表查询的用法与实例代码,一般会用到select  * from (select ) union 来操作. select 类型,sum(合计金额) from (select 商品名称,数量,日期,类型,合计金额 from 出库表 where 日期 > '2010-5-5 00:00:00' union select 商品名称,数量,日期,类型,合计金额 from 入库表 where 日期 > '2010-5-5 00:00:00'

数据库-sql两表联合计算求助~

问题描述 sql两表联合计算求助~ 表一表二如图~现在想写一条sql语句来通过某一人的工作证号,如张三的123,来查出他所有的称号代码也就是4.5.6:然后根据表二的称号代码来查出代码对应的"研究生支持人数"和"研究生支持年限",二者相乘得出一个数,然后将这一个人所有这样两两相乘得出来的数累加起来,得出一个最后结果: 比如我查询张三,他的最后结果就是:1*1+2*3+1*1=8:我查李四的最后结果就是:1*1+2*3+1*1+1*1=9: 大概就是这样,求问sql语

sql多表联合查询

问题描述 现在有3个表 A.B.CA表字段有:user_id,timestamp ...B表字段有:user_id,timestamp ...C表字段有:user_id,timestamp ...A.B.C三个表的user_id字段有重复的值,现在我想要把A.B.C这三张表的所有user_id联合起来算出count(*),并且去除重复的值.请问sql语句要怎么写? 解决方案 select count(1) from (SELECT t1.user_id from t1union select t

sql中怎样在多表联合查询后的表中进行增删改操作,新手求大神详细讲解

问题描述 sql中怎样在多表联合查询后的表中进行增删改操作,新手求大神详细讲解 我在C#的winform的DataGridView中显示联合查询的结果,下面就是4张表的联合查询的语句,我需要在DataGridView显示的表中做删除操作,只需要知道删除的sql语句就行,用存储过程也好,级联删除也好,希望详细,我已经在这个问题上困扰很久了,万分感谢! 解决方案 在做C#桌面程序时,我们通常会遇到删除dataGridview中选中的一和或都多行数据,在网上查了好多方法,有些只能删除dataGridv

sql server-SQLSERVER 结构相同表 联合查询 分页

问题描述 SQLSERVER 结构相同表 联合查询 分页 1C 两张表:HistoryOrders.Orders结构完全一样,每天3天将Orders中的数据导入到了HistoryOrders中.数据量挺大,平均一天的数据在10W以上. 需求:根据其中某一列(例如会员ID)Group,查询统计数据(总金额....),并且是任意时间段(这里可能就会跨两个表)的数据分页查询.问题:怎样查能实现而且效率高.怎样统计总量. 解决方案 简单的做法你这里就是两个表数据查询结果的union合集后再统计考虑His

mysql-PHP MYSQL 两表联合查询问题

问题描述 PHP MYSQL 两表联合查询问题 现在有两个表,第一个201411,第二个user_list, 第一个是存放用户相关的数据,第二个是存放登录用户名和密码的信息. 他们有一个共有的字段:username, 现在要如何才能调用和显示在登陆了user_list的账号(username)的201411这张表里面的其他信息. 解决方案 SELECT T2.* FROM user_list T1 INNER JOIN 201411 T2 ON T1.username = T2.username

sql-SQL 三张表联合查询中间表有空字段的问题

问题描述 SQL 三张表联合查询中间表有空字段的问题 table1(id1).table2(id2id1no).table3(noname)select t3.name from table1 t1(nolock) inner join table2 t2(nolock)on t1.id1 = t2.id1inner join table3 t3(nolock)on t2.no = t3.no第2张表里面对应的no字段有可能为空,为空的时候就取不到name而不是取no为空的name字段 解决方案

sql-SQL 三张表联合查询其中表有空字段的问题

问题描述 SQL 三张表联合查询其中表有空字段的问题 table1(id1).table2(id2id1no).table3(noname) select t3.name from table1 t1(nolock) inner join table2 t2(nolock)on t1.id1 = t2.id1inner join table3 t3(nolock)on t2.no = t3.no 第2张表里面对应的no字段有可能为空,为空的时候name就为空,这个要怎么查询才不会有冗余,请指教