sql server 跨库查询

sql server 跨库查询,第1张

方法一:

select from servernamedbotablename

方法二:

select from OPENDATASOURCE(

'SQLOLEDB',

'Data Source=远程ip;User ID=sa;Password=密码'

)库名dbo表名

where 条件

select top 100 from OPENDATASOURCE(

'SQLOLEDB',

'Data Source=1921686100;User ID=sa;Password=1234'

)[zhaolx-test]dboTGongwen

where gid <5

insert into OPENDATASOURCE(

'SQLOLEDB',

'Data Source=1921686100;User ID=sa;Password=1234'

)[zhaolx-test]dbot_aaa (id ,name )values('001','Tom')

select top 100 from OPENDATASOURCE(

'SQLOLEDB',

'Data Source=1921686100;User ID=sa;Password=1234'

)[zhaolx-test]dbot_aaa

mysql支持多个库中不同表的关联查询,你可以随便链接一个数据库

然后,sql语句为:

select from db1table1 left join db2table2 on db1table1id = db2table2id

只要用数据库名加上""就能调用相应数据库的数据表了

数据库名表名

扩展资料

mysql查询语句

1、查询一张表:     select from 表名;

2、查询指定字段:select 字段1,字段2,字段3from 表名;

3、where条件查询:select 字段1,字段2,字段3 frome 表名 where 条件表达式;

例:select from t_studect where id=1;

  select from t_student where age>22

4、带in关键字查询:select 字段1,字段2 frome 表名 where 字段 [not]in(元素1,元素2);

例:select from t_student where age in (21,23);     

   select from t_student where age not in (21,23);

5、带between and的范围查询:select 字段1,字段2 frome 表名 where 字段 [not]between 取值1 and 取值2;

例:select frome t_student where age between 21 and 29;

     select frome t_student where age not between 21 and 29;

1、where型子查询

(把内层查询结果当作外层查询的比较条件)

#不用order by 来查询最新的商品

select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods);

#取出每个栏目下最新的产品(goods_id唯一)

select cat_id,goods_id,goods_name from goods where goods_id in(select max(goods_id) from goods group by cat_id);

2、from型子查询

(把内层的查询结果供外层再次查询)

#用子查询查出挂科两门及以上的同学的平均成绩

思路:

#先查出哪些同学挂科两门以上

select name,count() as gk from stu where score < 60 having gk >=2;

#以上查询结果,我们只要名字就可以了,所以再取一次名字

select name from (select name,count() as gk from stu having gk >=2) as t;

#找出这些同学了,那么再计算他们的平均分

select name,avg(score) from stu where name in (select name from (select name,count() as gk from stu having gk >=2) as t) group by name;

3、exists型子查询

(把外层查询结果拿到内层,看内层的查询是否成立)

#查询哪些栏目下有商品,栏目表category,商品表goods

select cat_id,cat_name from category where exists(select from goods where goodscat_id = categorycat_id);

假定您现在拥有一个以MicrosoftNET为架构的网络订购系统,但是品管维护系统却仍然使用一套旧式的Oracle数据库应用程序。当您的顾客在产品保固期间下了产品更换之类的订单,则该笔订单将不收取任何费用。此时您需要从Oracle数据库得到实时的查询结果。借着建立连结服务器的方式(linkedServer),您将可以从SQLServer实时查询出位于Oracle数据库的顾客资料,找出谁是您既有的客户。

当您的资料分散在不同的SQLServer数据库时,藉由连结服务器可让您执行跨服务器之分布式查询。当所有的数据库服务器都是SQLServer,则连结服务器的设定十分容易,而且在SQLServer线上手册中就涵盖了您所需要了解的所有事项。然而,当部分资料是放在Oracle数据库服务器的时候,这就可能带给您许多挑战。举例来说,光是设定连结服务器就不是一件容易的事。您必须了解到:即是您要在SQLServer的EnterpriseManager设定一个Oracle连结服务器,这台SQLServer对Oracle来说就是一个客户端。所以您必须在SQLServer所在的服务器成功地安装并组态Oracle之客户端软件。因为Oracle提供的产品只支持Oracle8以后的数据库,所以我假设您正在使用的都是Oracle8以后的数据库。在OracleNet8函式库则提供了SQLServer所需要的客户端软件。

设定连接服务器时是利用Microsoft所提供的OLEDB ProviderforOracle,使用的Oracle网络函式库为SQLNet23304或是以后的版本,不过这是Oracle73数据库所提供的。换句话说,要设定Oracle数据库为SQLServer的连接服务器时,Oracle数据库只要是7334以后的版本,并搭配适当的SQLNet或是Net8函式库即可。

在Oracle数据库中,一个schema即代表着SQLServer专家们所熟知的单一数据库(译者注2)。连接至Oracle数据库时,您必须提供schema名称、密码以及主机联机字符串(hoststring)。每一个特定的Oracle帐户都拥有一个Oracleschema,而且只能有一个schema。所以schema名称其实就等于该schema拥有者的帐户名称。您可以查询Oracle的资料字典(Datadictionary)以得到更多有关schema的内容。

至于Oracle联机字符串又可称为服务名称(servicename)或是系统识别资料(SystenIdentifier,SID)。我们所谓的SQLServer数据库个体(instance)在Oracle则称为数据库(database)。所以安装OracleServer时,安装程序OracleUniversalInstaller(为一个图形接口之安装程序,与SQLServer的Setup程序类似)将会询问您SID名称为何,以作为Oracle数据库之名称。

这个部分原作者所提到schema的解释有点问题。Oracleschema可视为同一个使用者所拥有的所有数据库对象(schemaobjects)之集合。举例来说,使用者scott所建立的EMPtable其完整名称为SCOTTEMP,而SCOTT就是EMP的schema名称。所以schemaname其实就是一个Oracle数据库之使用者帐号。但是绝对不能拿来跟数据库相提并论!因为SQLServer的数据库架构包含了datafiles与logfiles,但是Oracle的schemaobjects只存在于tablespace中。为了避免部分读者产生混淆,特此说明。

sql联合查询语句(两张表)是:

select AID,AVALUE,ATYPE,ANAME,BKEY,BID,BVALUE,BNAME 

min(VALUE),max(VALUE) from A left join B on AID = BID

where BNAME="你输入的名字" 

and BVALUE > (select min(VALUE) from B where NAME="你输入的名字")) 

and BVALUE < (select min(VALUE) from B where NAME="你输入的名字"));

延展阅读:

A表字段stuid,stuname。

B表字段bid,stuid,score,coursename,status。

要用一条sql查出A表中所有记录的对应的stuid,max(score),coursename,status,并且status=1,sql语句要求跨数据库,不能使用rownum,top,limit等方言。

比如数据:

A

stuid stuname

11 zhangshan

22 lisi

B

bid sutid coursename scoure status

a 11 yuwen 66 1

b 11 shuxue 78 1

c 11 huaxue 95 0

最后要得到的数据是

stuid couresname scoure status

11 shuxue 78 1

22 null null null

a是定值吗!也就是王兰。(这个值是知道的)如果是这样。

则写一个主SQL+一个子SQL。先查出王兰所在的年级(子SQL),再查出这个年级有几班!

select Cb from C where Ca = (select Bb from B where Ba = '王兰')

以上就是关于sql server 跨库查询全部的内容,包括:sql server 跨库查询、两张表在不同的数据库,如何关联查询、mysql如何实现跨数据库查询并按where子等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/sjk/10152762.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存