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
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
相关文章推荐
- MS sql server 基础知识回顾(二)-表连接和子查询
- SQL 经典回顾:JOIN 表连接操作不完全指南
- Oracle PL/SQL开发基础(第九弹:多表连接查询)
- 走向面试之数据库基础:二、SQL进阶之case、子查询、分页、join与视图
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- SQL表连接查询(inner join、full join、left join、right join)
- MySQL基础(三)多表查询(各种join连接详解)
- T-SQL基础(3) - 连接查询
- SQL基础之多表连接查询
- SQL表连接查询(inner join、full join、left join、right join)
- sql 多表连接查询inner join, left join , right join ,full join ,cross join
- SQL表连接查询(inner join、full join、left join、right join)
- SQL基础回顾系列一 单表查询(select语句)
- 2016.12.08回顾 SQL模块化与子查询 SELECT NULL变换 JOINQUANT探索
- SQL表连接查询(inner join、full join、left join、right join)
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- SQL中的join连接查询(left join/right join/inner join)
- SQL表连接查询(inner join、full join、left join、right join)
- sql inner join 连接查询
- 两个sql查询语句之间的左连接left join