可否用sql语句实现不在同一个服务器上的两个数据库的交互

可否用sql语句实现不在同一个服务器上的两个数据库的交互,第1张

SQLSERVER很简单,登陆一个别的数据库,查询northwind数据库的category表的数据,可以写select from northwindcategories。

ORACLE需要创建一个DBLINK

1配置本地数据库服务器的tnsnamesora文件

$vi $ORACLE_HOME/network/admin/tnsnamesora

添加如下行,其中DBLINK为连接名(可自定义),HOST和PORT为数据库侦听的IP及端口,SERVICE_NAME为数据库的SID,

TESTDBLINK =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 1921681202)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = TEST)

)

)

2登录本地数据库,创建DBLINK

执行如下查询语句,其中TESTDB为DBLINK名(可自定义),TESTDBLINK为先前在tnsnamesora中定义的连接名,dbuser为用户名,为密码

create database link TESTDB

connect to dbuser identified by

using 'TESTDBLINK';

3使用DBLINK,select from table_name@TESTDB;

select

name

from

v$database

,直接运行就可以查看了,也可以查看tnsnamesora

的连接,有个sid,sid就是服务名了!!!

--1、利用SQL语句创建以上三张表,并指定每张表的主键和外键;

--学生表(S):

create table student

(

sid varchar2(20) primary key,

sname varchar2(20),

age number,

sex varchar2(4),

department varchar2(20),

address varchar2(50),

birthplace varchar2(50)

);

--选课表(SC):

create table class

(

sid varchar2(20) references student(sid),

cid varchar2(20) primary key,

grade number

);

--教师表(C):

create table teacher

(

cid varchar2(20) references class(cid),

cname varchar2(20),

teacher varchar2(20)

);

--2、以上三张表各插入一条记录,

--记录值分别为:(s20110101,王林,20,男,经济管理系,浙江省杭州市西湖区168号,浙--江杭州)、

--(s20110101,1001,85)、(1001,网络数据库与应用,李小波);

insert into student

values

  ('s20110101',

   '王林',

   20,

   '男',

   '经济管理系',

   '浙江省杭州市西湖区168号',

   '浙江杭州');

insert into class values ('s20110101', '1001', 85);

insert into teacher values ('1001', '网络数据库与应用', '李小波');

--3、查询李老师所教的课程号、课程名称;  

select cid, cname from teacher where teacher like '李%';

--4、查询年龄在23岁26岁之间的女学生的学号和姓名; 

select sid, sname

  from student

 where sex = '女'

   and age >= 23

   and age <= 26;

--5、查询“李小波”所选修的全部课程名称;

select tcname

  from student s, class c, teacher t

 where ssid = csid

   and ccid = tcid

   and asname = '李小波';

--6、查询所有成绩都在90分以上的学生姓名及所在系;

select ssname, sdepartment

  from student s, class c

 where ssid = csid

   and cgrade > 90;

--7、查询没有选修“ *** 作系统”课的学生的姓名;

select ssname

  from student s, class c, teacher t

 where ssid = csid

   and ccid = tcid

   and tcname = ' *** 作系统';

--8、查询与“李小波”同乡的男生姓名及所在系;

select sname, department

  from student

 where sex = '男'

   and address in (select address from student where sname = '李小波')

   and sname <> '李小波';

--9、查询英语成绩比数学成绩好的学生;

select ssname

  from student s

 where ssid in (select c1sid

                   from (select csid, cgrade

                           from class c, reachar t

                          where ccid = tcid

                            and tname = '英语') c1,

                        class (select csid, cgrade

                                 from class c, reachar t

                                where ccid = tcid

                                  and tname = '数学') c2

                  where c1sid = c2sid

                    and c1grade > c2grade);

--10、查询选修同一门课程时,女生比男生成绩好的学生名单;

select fsname

  from (select ssname, ccid, cgrade

          from student s, class c

         where ssid = csid

           and ssex = '女') f,

       (select ccid, cgrade

          from student s, class c

         where ssid = csid

           and ssex = '男') m

 where fcid = mcid

   and fgrade > mgrade;

--11、查询至少选修两门以上课程的学生姓名、性别;

select ssname, ssex

  from student s, class c, teachar t

 where ssid = csid

 group by ssname, ssex

having count(distinct ccid) > 2;

--12、查询选修了李老师所讲课程的学生人数;

select count(distinct ssid)

  from student s, class c, teacher t

 where ssid = csid

   and ccid = tcid

   and tteacher like '李%';

--13、查询没有选修李老师所讲课程的学生;

select ssname

  from student s, class c

 where ssid = csid

   and ccid not in (select cid from teacher where teacher like '李%');

--14、查询“ *** 作系统”课程得最高分的学生姓名、性别、所在系;

select sname, sex, department

  from student s, class c, teacher t

 where ssid = csid ccid = tcid

   and cname = ' *** 作系统'

   and cgrade in (select max(grade)

                     from class c1, teacher t1

                    where c1cid = t1cid

                      and cname = ' *** 作系统');

全部手打,望采纳。。。

首先,你要以dba身份登陆数据库。 第二,为某个用户开启sql跟踪。那个用户就是你要跟踪的、正在执行sql语句的那个用户。命令如下: execute dbms_systemset_sql_trace_in_session(sid,serial#,true) 其中参数的意义是,

简单来说:前半段是学过‘001’课程的学生,后半段是学过‘002’课程的学生;其中 where SC_2S#=SCS# 是把前后两段结果连接起来的关键,相当于把两个结果 Inner Join,从而得出最终结果同时学过‘001’和‘002’的学生。

先查SC表获取SID和对应所选课程按一定顺序排序的CID字符串的拼接(如学号01选了课程010203那么对CID进行字符串拼接成学号:01gc:01,02,03格式),获取01学生的gc字符串,再获取其它gc=01学生的gc排除01的SID最后查STUDENT信息根据获取的SID到此结束。

SQL功能

1、SQL数据定义功能:能够定义数据库的三级模式结构,即外模式、全局模式和内模式结构。在SQL中,外模式又叫做视图(View),全局模式简称模式(Schema),内模式由系统根据数据库模式自动实现,一般无需用户过问。

2、SQL数据 *** 纵功能:包括对基本表和视图的数据插入、删除和修改,特别是具有很强的数据查询功能。

百度百科-结构化查询语言

查看sqlserver用户SID

select DbRole = gname, MemberName = uname, MemberSID = usid

from sysdatabase_principals u, sysdatabase_principals g, sysdatabase_role_members m

以上就是关于可否用sql语句实现不在同一个服务器上的两个数据库的交互全部的内容,包括:可否用sql语句实现不在同一个服务器上的两个数据库的交互、查看oracle服务器中的所有数据库名命令、SQL网络数据库问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存