第八讲SQL语言之数据查询(2)数据库技术数据库技术三.连接查询若一个查询同时涉及两个以上的表,则称为连接查询。连接查询是关系数据库中最主要的查询,包括:①等值连接查询、非等值连接查询、自然连接查询②自身连接查询③内连接查询、外连接查询④复合条件连接查询数据库技术三.连接查询1.等值与非等值连接有些列同时出现在不同表中,例如在表student和表sc中都有sno列。使用等值连接可以把两个表中相对应的记录连接在一起,得到来自两个表的数据。简单点,就是当使用到连接运算符=式,称为等值运算。数据库技术三.连接查询例如:①selectstudent.sno,sc.cno,sc.gradefromstudent,scwherestudent.sno=sc.sno②selects.sno,c.cno,sc.gradefromstudentass,scascwheres.sno=c.sno数据库技术三.连接查询注意问题:①知道“表名.字段”这种写法的含义;特殊点,清楚“表名.*”的含义。②如果省去前面的表名会怎样?③如果表名称太长的话可以适当使用as子句。使用as对字段和数据表起“别名”的时候,字段如果在后面使用还是用原来的名称,数据表则需要用别名?数据库技术三.连接查询自然连接:如果在目标列中去掉相同属性列注意下面语句的区别,那个可以理解为自然连接?①selectstudent.sno,sc.sno,sc.cno,sc.gradefromstudent,scwherestudent.sno=sc.sno②selectstudent.sno,sc.cno,sc.gradefromstudent,scwherestudent.sno=sc.sno如果select和where中的属性列名是唯一的,可以去掉表名前缀数据库技术三.连接查询非等值连接:如果连接条件中不使用等号,可以使用,等,也可以使用between...and等谓词,如:selectstudent.sno,sc.cno,sc.gradefromstudent,scwherestudent.snosc.sno不过本例中没实际意义,实际中,绝大多数都使用等值连接数据库技术三.连接查询2.自身连接连接查询还可以建立表到其自身的连接。例如查询年龄相同的学生姓名和年龄:selectdistincts1.sno,s1.sagefromstudents1,students2wheres1.snos2.snoands1.sage=s2.sageorderbys1.sage数据库技术三.连接查询3.内连接和外连接表之间的连接可以分为等值连接和非等值连接,也可以分为内连接(innerjoin)和外连接(outerjoin)。数据库技术三.连接查询内连接内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。数据库技术三.连接查询内连接innerjoin语法(t-sql推荐用法):from表1[inner]join表2on条件表达式如:selectcourse.cno,sc.snofromcourseinnerjoinsconcourse.cno=sc.cno注意和下面的语句有没有什么区别:selectcourse.cno,sc.snofromcourse,scwherecourse.cno=sc.cno数据库技术三.连接查询内连接分三种:①等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。②不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括、=、=、、!、!和。③自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列数据库技术三.连接查询外连接与内连接相对,参与外连接outerjoin的表有主次之分,以主表的每一行数据去匹配从表中的数据列。符合连接条件的数据将直接返回到结果集中,对于那些不符合连接条件的列,将被填上null值后再返回到结果集中。外连接又可以分为左连接(leftouterjoin)和右连接(rightouterjoin)。如果主表在左侧,则称为左连接,反之,称为右连接。数据库技术三.连接查询左连接语法:from表1left[outer]join表2on条件表达式在这个语法格式中,位于leftjoin运算符左边的表称为主表,右边的表为从表;条件表达式用于指定主表与从表之间的连接条件。使用左连接时,除了返回内部连接的记录以外,还在查询结果中显示出主表中不符合连接条件的记录并在从表的相应字段中填上空值null。数据库技术三.连接查询例如:selectstudent.sno,sc.gradefromstudentleftjoinsconstudent.sno=sc.sno数据库技术三.连接查询右连接语法:from表1right[outer]join表2on条件表达式在这个语法格式中,位于rightjoin运算符左边的表称为从表,右边的表为主表;条件表达式用于指定主表与从表之间的连接条件。使用右连接时,除了返回内部连接的记录以外,还在查询结果中显示出主表中不符合连接条件的记录并在从表的相应字段中填上空值null。数据库技术三.连接查询例如:selectstudent.sno,sc.gradefromscrightjoinstudentonstudent.sno=sc.sno数据库技术三.连接查询简化左连接和右连接,使用“*=”和“=*”在where子句中使用:“列名1*=列名2”和“列名1=*列名2”数据库技术三.连接查询如前面例子可改成:①selectstudent.sno,sc.gradefromstudent,scwherestudent.sno*=sc.sno②selectstudent.sno,sc.gradefromsc,studentwherestudent.sno=*sc.sno可以看出左右连接是很相似的,只是要确定那个是主表那个是从表,如果当主表有不符合条件的记录,此时会在从表添加null值。数据库技术三.连接查询4.复合条件连接where子句中有多个连接条件,用于连接多个表,还可以写上选择条件。如查询每个学生的学号,姓名,选修的课程名和成绩:selects.sno,s.sname,c.cname,sc.gradefromstudentass,courseasc,scwheres.sno=sc.snoandsc.cno=c.cno