sql server如何关联两个表

作者&投稿:车健 (若有异议请与网页底部的电邮联系)
SQL Server中 两个不同的数据库中的两张表如何关联?~

一台服务器上的两个不同的 SQL Server 数据库?

还是 两台服务器上的, 2个 SQL Server 数据库?


一台服务器上的两个不同的 SQL Server 数据库 很简单
比如你现在是 USE test1 数据库,建立一个表,叫 TestA
然后 USE test2 数据库,建立一个表,叫 TestB

那么要关联,就是 查询的时候,输入全路径

例如
SELECT
检索字段
FROM
test1.dbo.TestA testa,
test2.dbo.TestB testb
WHERE
关联条件


如果是跨服务器的,需要创建 数据库链接。
链接建立好以后,也是和上面的写法差不多。

select a.*
from 学员表 a
inner join 校区表 b on a.所在学校=b.所在学校
inner join 管理员表 c on b.区域=c.区域
where c.用户名=@用户名 and c.密码=@密码
注意:最好把登陆和列表查询分开来做,因为无论是从安全还是程序实现的角度来看,都比较好。

扩展资料:mysql三张表联合查询总结
一、表结构
1、图片表(存放图片)
CREATE TABLE `tb_pic` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增长 id',
`url` varchar(255) DEFAULT NULL COMMENT '图片 url 路径',
`description` varchar(255) DEFAULT NULL COMMENT '图片描述',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='图片表';
2、标签表(存放标签)
CREATE TABLE `tb_flag` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增长 id',
`name` varchar(255) DEFAULT NULL COMMENT '标签名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='标签表';
3、图片标签链接表(图片、标签中间表)
CREATE TABLE `tb_pic_flag_link` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增长 id',
`pic_id` int(11) DEFAULT NULL COMMENT '图片 id',
`flag_id` int(11) DEFAULT NULL COMMENT '标签 id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='图片标签链接表';
二、实现的效果
1、查询单张图片的描述
效果:

查询语句:
SELECT p.id, p.url, p.description, GROUP_CONCAT(f.`name`)
from tb_pic p, tb_pic_flag_link l, tb_flag f
where p.id = l.pic_id and l.flag_id=f.id and p.id=1;
2、查询所有图片的描述
效果:

查询语句:
SELECT p.id, p.url, p.description, GROUP_CONCAT(f.`name`)
from tb_pic p, tb_pic_flag_link l, tb_flag f
where p.id = l.pic_id and l.flag_id=f.id GROUP BY p.id;

你是想得到 table2 的数据对吧?

你可以用视图来做
create view table1 as select id as ttid ,text1,text2 from table2

教程:

CREATE VIEW
名称
CREATE VIEW — 构建一个虚拟表(视图)

语法
CREATE VIEW view AS SELECT query
输入
view
所要创建的视图名称.
query
一个将为视图提供行和列的 SQL 查询.
请参阅 SELECT 语句获取有效参数的更多信息.

输出
CREATE
如果视图创建成功,返回此信息.
ERROR: Relation 'view' already exists
如果在数据库中已经存在所声明的视图.
NOTICE create: attribute named "column" has an unknown type

如果不声明,所创建的视图将有一个未知类型的字段.例如,下面命令返回一个警告:
CREATE VIEW vista AS SELECT 'Hello World'
然而下面命令将不出现警告:
CREATE VIEW vista AS SELECT text 'Hello World'
描述
CREATE VIEW 将定义一个表的视图.这个视图不是物理上实际存在(于磁盘)的.具体的说,自动生成一个改写索引规则的查询用以支持在视图上的检索.
注意
目前,视图是只读的.

使用 DROP VIEW 语句删除视图.

用法
创建一个由所有 Comedy (喜剧)电影组成的视图:
CREATE VIEW kinds AS
SELECT *
FROM films
WHERE kind = 'Comedy';

SELECT * FROM kinds;

code | title | did | date_prod | kind | len
-------+---------------------------+-----+------------+--------+-------
UA502 | Bananas | 105 | 1971-07-13 | Comedy | 01:22
C_701 | There's a Girl in my Soup | 107 | 1970-06-11 | Comedy | 01:36
(2 rows)
兼容性
SQL92
SQL92 为 CREATE VIEW 声明了一些附加的功能:
CREATE VIEW view [ column [, ...] ]
AS SELECT expression [ AS colname ] [, ...]
FROM table [ WHERE condition ]
[ WITH [ CASCADE | LOCAL ] CHECK OPTION ]
完整的SQL92命令可选的子句是:

CHECK OPTION
这个选项用于可更新视图.所有对视图的 INSERT 和 UPDATE 都要经过视图定义条件的校验.如果没有通过校验,更新将被拒绝.
LOCAL
对这个视图进行完整性检查.
CASCADE
对此视图和任何相关视图进行完整性检查.在既没有声明 CASCADE 也没有声名 LOCAL 时,假设为 CASCADE.

sql server可以用字段来相互关联两个表,
具体方法如下:
表A,
字段:
id int
sid int (表B 用来关联的字段)

表B,
字段:
id int (表A sid字段 用来关联表A的)
....

具体实际用法如下:

用法1、select * from 表A left join 表B on 表A.sid=表B.id

用法2、select (select 字段 from 表B where 表B.id=表A.sid)
from 表A

把你的触发器改为下面的样子,应该就可以解决了
create trigger trgtable2insert
on table2
after insert
as
begin
insert table1 (ttid, text1, text2)
select id, text1, text2 from inserted
where inserted.id=@@identity
end
我刚才试过了,原来的插入数据时有问题

做一个触发器来实现
create trigger trgtable2insert
on table2
after insert
as
begin
insert table1 (ttid, text1, text2)
select id, text1, text2 from inserted
end
_________________________________________________________
完整测试代码
--创建表1
create table table1
(
id int identity,
ttid int,
text1 char,
text2 char
)
--创建表2
create table table2
(
id int identity,
text1 char,
text2 char,
text3 char,
text4 char
)
--创建after insert触发器
create trigger trgtable2insert
on table2
after insert
as
begin
insert table1 (ttid, text1, text2)
select id, text1, text2 from inserted
end
--向表2插入数据
insert table2 values ('a','b','c','d')
insert table2 values ('t','y','c','d')
insert table2 values ('w','o','c','d')
insert table2 values ('q','m','c','d')
--验证表1中的记录
select * from table1

在.TABLE2 里面加一个 TTID ..
FK_TABLE2_TABLE1
用 TTID 来控制..


忻城县13060646217: sql server如何关联两个表 -
赞枯保儿: --通过触发器实现 CREATE TRIGGER trig_readname ON 表2 FOR INSERT AS update 表2 set set name=表1.name from 表2,表1 where 表1.id=表2.id --注如果只更新插入的数据可以把语句改为 update 表2 set set name=表1.name from 表2,表1,inserted ins where 表1.id=表2.id and ins.id=表1.id

忻城县13060646217: 请问sqlserver中的两个表怎么进行关联 -
赞枯保儿: CREATE TRIGGER studen ON student_test //这个就是你注册那个表 FOR INSERT,update,delete AS insert into my_table (a,b) values (11,22) //这写你要关联的表的超做 GO

忻城县13060646217: SQL Server中 两个不同的数据库中的两张表如何关联? -
赞枯保儿: 一台服务器上的两个不同的 SQL Server 数据库? 还是 两台服务器上的, 2个 SQL Server 数据库? 一台服务器上的两个不同的 SQL Server 数据库 很简单 比如你现在是 USE test1 数据库,建立一个表,叫 TestA 然后 USE test2 数据库,建立一个表,叫 TestB 那么要关联,就是 查询的时候,输入全路径 例如 SELECT 检索字段 FROM test1.dbo.TestA testa, test2.dbo.TestB testb WHERE 关联条件 如果是跨服务器的,需要创建 数据库链接. 链接建立好以后,也是和上面的写法差不多.

忻城县13060646217: SQL如何将在不同数据库里的两张表关联? -
赞枯保儿: select * from A.dbo.studentunion All select * from B.dbo.course 列必须数量相同

忻城县13060646217: sql server怎么使用命令创建两个表的关系? -
赞枯保儿: sql server中表之间的关联关系是通过建立外键来实现的.创建SQL的主键和外键约束的方法:create table Student --建表格式:create table 自定义的表名( --字段名一般为有一定意义的英文 StudentName nvarchar(15), -- 格式:字段名类型()...

忻城县13060646217: sql server怎么关联两个表 -
赞枯保儿: 把你的触发器改为下面的样子,应该就可以解决了 create trigger trgtable2insert on table2 after insert as begin insert table1 (ttid, text1, text2) select id, text1, text2 from inserted where inserted.id=@@identity end 我刚才试过了,原来的插入数据时有问题

忻城县13060646217: 如何设置SQL数据库表与表的关联关系? -
赞枯保儿: 如果是 父子关系, 或者 一对多 关系.可以通过 创建外键的方式, 在 父表 与 子表之间, 创建一个关联关系.例如:-- 创建测试主表. ID 是主键. CREATE TABLE test_main (id INT NOT NULL,value VARCHAR(10),PRIMARY KEY(id) );-- ...

忻城县13060646217: 请问sqlserver中的两个表怎么进行关联? 有两个表,一个表A,一个表B,而且两个表中都有相同的字段name, -
赞枯保儿: 1、select * from A ,B where A.name=B.name2、select * from A where name in ( select name from B where .... )3、select * from B where name in ( select name from A where .... )

忻城县13060646217: sqlserver怎么连接两个不同的数据库里面的两个不同的表进行关联查询,两个数据库不在同一个服务器 -
赞枯保儿: 这个简单,使用sqlserver的 OPENDATASOURCE 函数,开启另外一个数据库的临时链接就可以了.不过那台服务器的数据库必须开启了IP访问.

忻城县13060646217: SQL数据库中怎么建立两个表之间的关系? -
赞枯保儿: 一对一:在这种关系中,关系表的每一边都只能存在一个记录.每个数据表中的关键字在对应的关系表中只能存在一个记录或者没有对应的记录.这种关系和一对配偶之间的关系非常相似——要么你已经结婚,你和你的配偶只能有一个配偶,要...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网