当前位置: 代码迷 >> Sql Server >> 请问关于两表连接的有关问题,多谢
  详细解决方案

请问关于两表连接的有关问题,多谢

热度:217   发布时间:2016-04-27 19:26:05.0
请教关于两表连接的问题,谢谢!
问题描述:
两个表:
一个表名:subject,字段: 科目,授课老师,电话
另一表名:score ,字段: 学号,科目,成绩

subject表中每个科目一条记录,不重复
score表中一个学号可有多条记录,分别记录不同科目的分数.

subject:
科目 老师 电话

语文 张老师 1234567
数学 刘老师 1234568
政治 李老师 123456789

score:
学号 科目 成绩
123 语文 86
123 数学 90
123 英语 78
888 语文 89
888 数学 70



SELECT score.*, subject.* FROM score,subject WHERE 学号='123456' AND subject.科目=score.科目

这些语句返回如下:

学号 a.科目 成绩 b.科目 老师 电话
123 语文 86 语文 张老师 1234567
123 数学 90 数学 刘老师 1234568


这条语句只能返回subject表中有的科目,如果score表中含 英语 科目 在subject表中不存在,那么就不会列出.

如果要把在subject表中不存在的科目也列出(如下:),应如何进行,谢谢各位!

学号 a.科目 成绩 b.科目 老师 电话
123 语文 86 语文 张老师 1234567
123 数学 90 数学 刘老师 1234568
123 英语 78 空 空 空





------解决方案--------------------
换成左连接left join 就可以了
select score.*,subjects.*from score left join subjects on subject.科目=score.科目 where 学号='123'
------解决方案--------------------
SQL code
create table tb_subject(科目 varchar(10),老师 varchar(10),电话 varchar(11))insert into tb_subject values('语文','张老师','1234567') insert into tb_subject values('数学','刘老师','1234568') insert into tb_subject values('政治','李老师','123456789')gocreate table tb_score(学号 varchar(10),科目 varchar(10),成绩 int)insert into tb_score values('123','语文',86) insert into tb_score values('123','数学',90) insert into tb_score values('123','英语',78) insert into tb_score values('888','语文',89) insert into tb_score values('888','数学',70)goselect a.学号 , isnull(a.科目,b.科目) 学号 , a.成绩 , b.老师 , b.电话from tb_score a left join tb_subject b on a.科目 = b.科目drop table tb_subject,tb_score/*学号         学号         成绩          老师         电话          ---------- ---------- ----------- ---------- ----------- 123        语文         86          张老师        1234567123        数学         90          刘老师        1234568123        英语         78          NULL       NULL888        语文         89          张老师        1234567888        数学         70          刘老师        1234568(所影响的行数为 5 行)*/
------解决方案--------------------
create table subject
(
subject varchar(8),
teacher varchar(8),
phone varchar(11)
)

create table score
(
sno char(3),
subject varchar(8),
grade int
)
go
insert into subject values('语文', '张老师', '1234567')
insert into subject values('数学', '刘老师', '1234568')
insert into subject values('政治', '李老师', '123456789')
insert into score values('123', '语文', 86)
insert into score values('123', '数学', 90)
insert into score values('123', '英语', 78)
insert into score values('888', '语文', 89)
insert into score values('888', '数学', 70)
go
select sc.*, su.*
from score sc left join subject su on sc.subject = su.subject
where sc.sno = '123'
go
/*以下这种方法不符合ANSI的最新规定,在sql server 2000能用*/
select sc.*, su.*
from score sc, subject su
where sc.sno = '123'
and sc.subject *= su.subject
go
  相关解决方案