1、左连接和等值连接的差别distinct实际应用,1、等值与非等值连接查询 (P99),等值连接:连接运算符为=例3.49 查询每个学生及其选修课程的情况,SELECT Student.*,SC.*FROM Student,SCWHERE Student.Sno = SC.Sno;,学生情况放在Student表里,选课情况放在SC表里;两个表的联系通过共同的属性Sno实现;,等值连接(P99),选课SC,Student,等值连接:,嵌套循环连接,选课SC,Student,左外连接:,外连接(P102),例 3.53SELECT Student.Sno,Sname,Ssex,Sage,Sdept,
2、Cno,Grade FROM Student LEFT JOIN SC ON (Student.Sno=SC.Sno);,左连接和等值连接的差别,tech_record_student,同学们填写获奖信息的表,tech_user_record,添加成员表,tech_record_student,tech_user_record,username 是项目负责人的学号,username 是成员的学号,通过等值连接获得项目负责人username=20150001的 tech_record_student 信息,等值连接,select s.* from tech_record_student s ,t
3、ech_user_record ur where ur.record_id = s.id and s.username=20150001 order by s.id desc;,tech_record_student,tech_user_record,username 是项目负责人的学号,username 是成员的学号,通过左连接获得项目负责人username=20150001的 tech_record_student 信息,左连接,select s.* from tech_record_student s left join tech_user_record ur on ur.record_
4、id = s.id where s.username=20150001 order by s.id desc;,对比等值连接和左连接,tech_record_student,tech_user_record,username 是项目负责人的学号,username 是成员的学号,项目负责人username=20150001,也是该项目负责人的获奖信息,但是因为没有成员而不能获得,应用 “左连接”,显示的是某 项目负责人的获奖信息:即:where s.username=20150001如果其他项目负责人添加你为本项目的获奖成员:你也能看到。即:账户为username=20150001能看到所有自己
5、的获奖记录。,应用 “左连接”,tech_record_student,tech_user_record,username 是项目负责人的学号,username 是成员的学号,显示 username=20150001的 信息:包括20150001是项目负责人的信息和是成员的信息,select s.*from tech_record_student s left join tech_user_record ur on ur.record_id = s.id where s.username=20150001 order by s.id desc;,左连接,select distinct s.*
6、from tech_record_student s left join tech_user_record ur on ur.record_id = s.id where s.username=20150001 or ur.username=20150001 order by s.id desc;,select distinct s.* from tech_record_student s ,tech_user_record ur where ur.record_id = s.id and (s.username=20150001 or ur.username=20150001) order
7、by s.id desc;,等值连接,distinct,帖子:http:/ distinct name from table,select distinct name, id from table,Distinct作用于整个查询域,tech_record_student,tech_user_record,username 是项目负责人的学号,username 是成员的学号,通过左连接获得项目负责人username=20150001的 tech_record_student 信息,左连接,select s.* from tech_record_student s left join tech_u
8、ser_record ur on ur.record_id = s.id where s.username=20150001 order by s.id desc;,对比等值连接和左连接,tech_record_student,tech_user_record,username 是项目负责人的学号,username 是成员的学号,项目负责人username=20150001,该获奖项目添加了两个成员,左连接,select s.* from tech_record_student s left join tech_user_record ur on ur.record_id = s.id where s.username=20150001 order by s.id desc;select distinct s.* select distinct s.id,s.username,s.academy,a.gametype,s.worksname,s.taste,结论,等值连接会去掉没有共同属性的元组左连接左边的表中元组都会保留,即使右边表中没有共同的属性也会用null补齐Distinct作用于整个select查询的域,