数据库笔记

连接查询

班级Class表的数据:

id number
1032011
2032012
3032013


学生表student的数据:

idnameclassid
1Li1
2Zhang 1
3Yao 1
4Qian 2
5Liu 2
6Chen 3
7Qiu null


表随便做的,只为说明事情。学生表的classid字段参照Class表的id字段。
 连接有内连接,外连接,交叉连接三种。交叉就是不带ON的连接查询,返回的是两表的笛卡尔积,外连接有左外,右外和全外三种。内连接的形式就像下面这样:

FROM  TABLE_a  INNER   JOIN  TABLE_b   [ ON join_condition ]

我用的SQL Server数据库,一定要有ON子句。ON是用来指定连接条件的,我们经常用的Where是用来指定查询条件的,这里先做一个等值内连接:(连接条件:c.id = s.classid )

select   *   from  class  as  c  inner   join  student  as  s  on  c.id  =  s.classid ;

不等值的情况就是把连接条件改成:c.id != s.classid。我们经常写语句是这样的:

select   *   from  class  as  c, student  as  s  where  c.id  =  s.classid ;

其实和上面的等价。内连接返回的是符合连接条件和查询条件的行,而外连接返回的是符合查询条件但并不一定符合连接条件的行,返回的结果集中会包含左表(左外连接)或者右表(右外连接)或者两表(全外连接)中符合查询条件但不符合连接条件的行。外连接的语法:

FROM  TABLE_a  FULL | RIGHT | LEFT   OUTER   JOIN  TABLE_b  [ ON join_condition ]

结果跑出来就知道怎么回事,如果你使用左连接,那么除符合查询条件的行以外,还有包含剩余的左表数据的行,这些行对应右表的字段全为NULL。其它的情况依此类推。你也可以使用where来指定连接条件,其中*=表示左连接,=*表示右连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值