您的位置:首页 > 数据库

SQL基础回顾--连接查询JOIN

2009-02-18 13:41 716 查看
create two table ,one for student info,another for student's grade

 

select * from stu_info

sno       sname   age

------------------------------
200901 fox           17
200902 sherwin   34
200903 oscar       22
200904 angela     23

 

select * from stu_grade

sno       grade
----------------------
200901 89
200903 66
200902 44

 

--从两个表中查询所有有成绩学生的名字和成绩,其实这种也属于一种内连接
select a.sname,b.grade from stu_info a,stu_grade b where a.sno=b.sno;
-----------------------
fox           89
sherwin   44
oscar       66
--这样嵌套查询也是能查出,只是不能同时显示姓名和成绩
select sname from stu_info where sno in(select sno from stu_grade);

 

sname
-----------------
fox
sherwin
oscar
--用EXSIT更好些
select sname from stu_info where exists(select sno from stu_grade where stu_info.sno=stu_grade.sno);

sname
---------------------
fox
sherwin
oscar

--使用连接查询,只需要查一个表,然后再去JOIN另一个表,其实就好从两个表中查再用等值连接起来一回事
--只列从符合条件的匹配行
select stu_info.sname,stu_grade.grade from stu_info
inner join stu_grade
ON stu_info.sno=stu_grade.sno

sno       grade
---------------------
fox           89
sherwin   44
oscar       66
--左连接,要求列出所有学生名字(右表全集,左表匹配),有成绩的打印出成绩,没有的保留NULL
select stu_info.sname,stu_grade.grade from stu_info
left join stu_grade
ON stu_info.sno=stu_grade.sno

sno       grade
-------------------
fox           89
sherwin   44
oscar       66
angela 

--右连接,要求列出所有有成绩的学生姓名和成绩,没有成绩的就不列出其名字
select stu_info.sname,stu_grade.grade from stu_info
right join stu_grade
ON stu_info.sno=stu_grade.sno

sno         grade
-----------------------
fox              89
oscar          66
sherwin      44

--JOIN的可以是一个临时表(即可以是一个SELECT语句)
select stu_info.sname,temp_tab.grade from stu_info
LEFT JOIN (select * from stu_grade where grade>60) temp_tab
ON stu_info.sno=temp_tab.sno

--或者,只是为了证明可以用一个SELECT的临时表
select stu_info.sname,temp_tab.grade from stu_info
LEFT JOIN (select * from stu_grade) temp_tab
ON stu_info.sno=temp_tab.sno and temp_tab.grade>60
结果都是:

sno         grade
-------------------
fox                 89
sherwin 
oscar             66
angela 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  join sql table