博主在工做中,经常须要使用sql语句来进行查询,总结发现,灵活使用这几个要点,就能够应付大部分简单状况。sql
一.链接:根据两个或多个表中的列之间的关系,从这些表中查询数据。学习
1.join/inner joinspa
必须使用inner join的状况code
1 --查询全部未讲课的教师的Tname和Depart. 2 select TNAME,DEPART 3 from TEACHER 4 where TNO not in(select TEACHER.TNO from COURSE inner join 5 TEACHER on COURSE.TNO=TEACHER.TNO) 6 --或者使用 Except 7 select TNAME,DEPART from TEACHER 8 except 9 select TNAME,DEPART from COURSE join TEACHER on COURSE.TNO=TEACHER.TNO
上面的sql语句中的“select TEACHER.TNO from COURSE inner join TEACHER on COURSE.TNO=TEACHER.TNO”中,只能使用inner join,使用left join、right join、full join都是错误的。对象
2.left join和right join blog
使用了left join 的状况,调换一下表的位置,就能够用right join替换;反之亦然。排序
1 --查询全部学生的Sname、Cname和Degree列。 2 select SNAME,CNAME,DEGREE 3 from STUDENT left join SCORE on STUDENT.SNO=SCORE.SNO 4 left join COURSE on SCORE.CNO=COURSE.CNO
也能够写成class
1 select SNAME,CNAME,DEGREE 2 from score right join STUDENT on STUDENT.SNO=SCORE.SNO 3 right join COURSE on SCORE.CNO=COURSE.CNO
3.使用full join的状况较少,暂时尚未用到。select
2、嵌套sql语句
在sql语言中,一个select-from-where语句成为一个查询块。
将一个查询块嵌套在另外一个查询块的where子句或having短语的条件中的查询成为嵌套查询。
SQL语言容许多层嵌套查询,但要注意的是,子查询的select语句中不能使用order 不要子句,order by子句只能对最终查询结果排序。
当掌握了sql语句的执行顺序后,就会对这个限制的缘由有更深入的理解。
举例
子查询在where子句中
1 --查询成绩高于学号为“109”、课程号为“3-105”的成绩的全部记录。 2 select * from SCORE where DEGREE>(select DEGREE from SCORE where SNO='109' and CNO='3-105')
3、子查询
上层的查询块称为外层查询或者父查询,下层查询块称为内层查询或者子查询。
子查询的位置能够很灵活,掌握这一点,感受sql学习就有了很大的进展。
1.子查询能够放到where子句或having短语的条件中,这就是咱们上面所介绍的嵌套查询
2.子查询能够出如今from子句中,这时子查询生成的临时派生表,称为主查询的查询对象
1 --查询全部选修了1号课程的学生姓名 (固然也可使用嵌套查询) 2 select Sname from Student,(select * from SC where cno='1') SC1 where Student.sno=SC1.sno
3.子查询能够嵌套在INSERT语句中用以生成要插入的批量数据
1 --对每一个系,求学生的平均年龄,再把结果插入Dept_age(Sdept,Avg_age)中 2 insert into Dept_age(Sdept,Avg_age) 3 select Sdept.AVG(Sage) 4 from Student 5 group by Sdept
要点总结
1.链接:inner join、right join、left join 、full join
2.嵌套:将一个查询块嵌套在另外一个查询块的where子句或having短语的条件中
3.子查询的位置能够很灵活