MySQL select语句之from从句
2009-09-26 00:00:00 来源:WEB开发网左连接左边的全取,
右连接右边的全取
对于连接的列的名称相同的话,那么可以使用using来替代条件,如上面的内连接可以这样改写:
1 select stu.id,exam.id,stu.name, exam.grade from stu inner join exam using(id)。
对于左外连接使用的情况一般是当左表的连接列中存在未出现在右表的连接列中的值时,左外连接才有用。
还有个全外连接的,也就是说只要在两个表中出现的记录都会在中间表中出现,当右表有而左表没有或当左表有而右表没有的时候用null表示。具体语法如下:select stu.id,exam.id,stu.name, exam.grade from stu full join exam using(id)。
交叉连接:就是显示求表的笛卡尔积,select * from teams cross join penalties.这句完全等价于select teams.*,penalties.* from teams,penalties.
联合连接:select * from teams union join penalties,这个其实很容易理解,产生结果所包含的列为两个表所有的列和,对于数据的列出,首先列出左表的数据,对于属于右表的列,用null表示,接下来列出右表的数据,对于属于左表的列用null表示。
自然连接:select * from teams nature inner join penalties where division='first';此句完全等同与select t.playerno,t.teamno,t.division,pen.paymentno,pen.payment_date,pen.amount from teams as t inner join penalties as pen on t.playerno=pen.playerno where dividion='first'.相比就知道,我们无须显示指出必须要连接到哪些列,sql会自动查找两表中是否有相同名称的列,且假设他们必须在连接条件中使用。此处的on或using从句是多余的,因此不允许使用。
下面看个例子创建一个称为towns的虚拟表:
1select *
2from (select 'Stratford' as town,4 as number
3 union
4 select 'Plymouth',6
5 union
6 select 'Inglewood',1
7 union
8 select 'Douglas',2) as towns
9order by town;
结果为:
1town number
2----------------------
3Douglas 2
4Inglewood 1
5Plymouth 6
6Stratford 4
更多精彩
赞助商链接