MySQl心得4--3--数据库查询3--from字句(二)
结果。
SELECT DISTINCT 课程名, XS_KC.课程号
FROM KC NATURAL JOIN XS_KC;
说明:SELECT语句中只选取一个用来连接表的列时,可以使用自然连接代替内连接。用这种方法,可以用自然左外连接来替换左外连接,自然右外连接替换右外连接。(用的不多,容易出错,因为是让系统自动找相同的条件,找不到时会报错)
注意:外连接只能对两个表进行。
C.交叉连接(指定了CROSS JOIN关键字的连接是交叉连接。)
在不包含连接条件,交叉连接实际上是将两个表进行笛卡儿积运算,结果表是由第一个表的每行与第二个表的每一行拼接后形成的表,因此结果表的行数等于两个表行数之积。
在MySQL中,CROSS JOIN从语法上来说与INNER JOIN等同,两者可以互换。
例: 列出学生所有可能的选课情况。
www.2cto.com
SELECT 学号, 姓名, 课程号, 课程名
FROM XS CROSS JOIN KC;
另外,STRAIGHT_JOIN连接用法和INNERJOIN连接基本相同。不同的是,STRAIGHT_JOIN后不可以使用USING子句替代ON条件。
例: 使用STRAIGHT_JOIN连接实现例4.22中相同的结果。
SELECT DISTINCT 课程名, XS_KC.课程号
FROM KC STRAIGHT_JOIN XS_KC
ON (KC.课程号=XS_KC.课程号);
4.几种连接的举例比较:
要求:查询每个学生的姓名,专业名,课程名,成绩
数据源:xs:姓名,专业名; kc:课程名 ; xs_kc :成绩
连接条件:xs.学号=xs_kc.学号 and kc.课程号=xs_kc.课程号
(1) 全连接(等值连接)
例1:
select 姓名,专业名,课程名,成绩 from xs,kc,xs_kc
where xs.学号=xs_kc.学号 and kc.课程号=xs_kc.课程号;
例2:
select 姓名,专业名,课程名,成绩 fromxs,kc,xs_kc
where xs.学号=xs_kc.学号 and kc.课程号=xs_kc.课程号
and 课程名='计算机基础' and 成绩>=80 order by 成绩 desc;
(2) 内连接
例1:
select xs.学号,姓名,课程号,成绩
from xs inner join xs_kc on xs.学号=xs_kc.学号;
例2:
select 姓名,专业名,课程名,成绩
from xs inner join xs_kc on xs.学号=xs_kc.学号
inner join kc on xs_kc.课程号=kc.课程号
where 课程名='计算机基础' and 成绩>=80;
5.连接多表(如果是三张表)
1).Join连接:
from 表1 inner join 表2 on 条件1
inner join 表3 on 条件2
www.2cto.com
2).全连接:
from 表1,表2,表3 where条件1 and 条件2
3).给表加别名:from 表名 as 别名
注意:如果给表加了别名,以后的使用必须用别名,不能再使用原表名
作者 tianyazaiheruan