首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-01-13 
请教关于两表连接的问题,谢谢!问题描述:两个表:一个表名:subject,字段: 科目,授课老师,电话另一表名:score

请教关于两表连接的问题,谢谢!
问题描述:
两个表:
一个表名: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

热点排行