联接查询

联接的三种基本类型;

Student表

SnoSnameSsexSbirthdayClass
101陆君1998-01-0195033
102王丽1998-01-0195031
Course
CnoCnameTno
3-105高等数学804
6-106计算机导论805
Score
SnoCnoDegree
1013-10588
1026-10687

Teacher

TnoTnameTsexProfTbirthdayDepart
804王萍助教1985-01-01计算机导论
805张旭讲师1979-01-01高等数学
 
1: 交叉联接;只需实现一个逻辑查询步骤,对输入的两个表进行操作,生成二者的笛卡儿积。也就是将一个输入表的每行与另一个表的所有行进行匹配。如果一个表有m行,而另一个表有n行,将得到m*n行的结果集。( 避免对大型表使用交叉连接)

SELECT  S.sname, SC.degree 
FROM student AS S CROSS JOIN score AS SC;
(SQL-89的语法中可以简单的只加个逗号)

2:内联接

INNER JOIN  內联接是默认的联接方式所以INNER是可选的

SELECT  S.sname, SC.degree 
FROM student AS S 
   JOIN score AS SC
     ON S.sno = SC.sno;
     

       多表联接

        

SELECT  S.sname, C.cname, SC.degree 
FROM student AS S
    JOIN score AS SC
      ON S.sno = SC.sno
         JOIN Course AS C
           ON SC.cno = C.cno;


3:外联接;

    LEFT JOIN  

    RIGTH JOIN

    FULL JOIN

在表名之间指定JOIN关键字,在ON子句中制定联接条件。(外联接会应用内联接所应用的两个逻辑处理步骤(笛卡儿积ON过滤))然后添加外部行。

SELECT  S.sname, S.class, SC.degree 
FROM student AS S
    LEFT JOIN score AS SC
      ON S.sno = SC.sno
        
可以认为外联接结果中的数据 行包括两种:内部行和外部行。内部行是指按照ON字句条件能在另一边找到匹配的那些行;而外部行则是找不到匹配的那些行。 內联接只返回内部行,而外联接同时返回内部行和外部行。
        当需要表达一个非最终的条件时,就在ON子句中指定联接条件。当在生成外部行以后,要应用过滤器,而希望过滤条件是最终的,就应该在WHERE子句中指定条件。WHERE子句是在FROM子句之后被处理的。WHERE子句是最终的。

       

SELECT  S.sname, S.class, SC.degree 
FROM student AS S
    LEFT JOIN score AS SC
      ON S.sno = SC.sno
 WHERE SC.degree IS NULL;

ps:当在FROM子句中联接多表时,要书写多个用来定义其中两个表的公共部分的on语句,on语句必须遵循from后面所列表的顺序,即FROM后面写的表相应的on语句要先写。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值