作为关系型数据库开发的语言(数据库插叙、程序设计),将事物、事物之间关系看成一张表,表与表之间的关系即为事物之间的关系,
工具/原料
sqlserver
方法/步骤
1、我们用sqlserver作为测试,创建学生、教师、班级三张表。每张表都有一个id,int类型的(自增长),作为每个表的主键。
2、添加测试数据,并创建班级与学生、教师与班级的中间表。insertintodbo.Student(Sname)values('张三'),插入多条,由于id自增长所以sid自动填充了。类似将教师和班级也添加上测试数据。
3、创建班级教师表Class_Teacher,班级学生表Class_Student
4、然后将1和2放到1班,3和4放到2班。5和6不放(可以理解为刚入学没有分配班级)。然后将3个老师分配到3个班级insertintodbo.Class_Teachervalues(1,1)insertintodbo.Class_Teachervalues(2,2)insertintodbo.Class_Teachervalues(3,3)
5、这样,1班和2班各有迷撞笸痉两名同学,3班没有同学,有两个同学没有分配班级,每一个老师都分配了班级。现在要查询所有班级学生情况。selectt1.ClassName,t3.Sn锾攒揉敫amefromClasst1innerjoindbo.Class_Studentt2ont1.ClassId=t2.CIDinnerjoindbo.Studentt3ont2.[SID]=t3.[SID]
6、我们溴溢菏确要查询学生和老师的关系就比较复杂,因为学生和教师没有直接关系,需要通过班级进行对应。selectt1.ClassName,t4缕计瓤账.Tname,t5.SnamefromClasst1innerjoindbo.Class_Studentt2ont1.ClassId=t2.CIDinnerjoindbo.Class_Teachert3ont3.CID=t1.ClassIdinnerjoindbo.Teachert4ont4.TId=t3.TIDinnerjoindbo.Studentt5ont5.[SID]=t2.[SID]
7、但是我们看到的结果始终少两个学生的信息,怎么样才能显示所有学生的信息呢。我们使用leftjoin。selectt1.*,t2.*fromStudentt1leftjoinClass_Studentt2ont1.[SID]=t2.[SID]
8、可以看到左边表全部显示,没有对应记录的地方为NULL,既然有leftjoin,也会有rightjoin。selectt1.*,t2.*fromClass_Studentt2rightjoinStudentt1ont1.[SID]=t2.[SID]效果类似。