zoukankan      html  css  js  c++  java
  • 常用sql语法初级

    博主在工作中,常常需要使用sql语句来进行查询,总结发现,灵活使用这几个要点,就可以应付大部分简单情况。

    一.连接:根据两个或多个表中的列之间的关系,从这些表中查询数据。

    • JOIN或INNER JOIN: 返回左表和右表中相互匹配的行
    • LEFT JOIN: 返回左表和右表中相互匹配的行,及左表中不相匹配的行
    • RIGHT JOIN: 返回左表和右表中相互匹配的行,及右表中不相匹配的行
    • FULL JOIN或FULL OUTER JOIN: 返回左表和右表中相互匹配的行,及不相匹配的行
    •  
    • 应用举例
    • 在一些题目中没有明确的暗示情况下,使用哪一种连接方式都可以;
    • 也有一些情况,只能使用特定的连接方式。

    1.join/inner join

    必须使用inner join的情况

    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 

    使用了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

    也可以写成

    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的情况较少,暂时还没有用到。

     

    二、嵌套

    在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')

    三、子查询

    上层的查询块称为外层查询或者父查询,下层查询块称为内层查询或者子查询。

    子查询的位置可以很灵活,掌握这一点,感觉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.子查询的位置可以很灵活

  • 相关阅读:
    【机房收费系统】—— VB中 MSHFlexgrid控件导出Excel
    解决“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本”
    手把手教你将Python程序打包为DLL
    电脑C盘(系统盘)怎么清理,以下6个方法你学会了么?
    win7旗舰版怎么降级到专业版|win7旗舰版改成专业版的方法
    UltraISO 软碟通注册码
    “永恒之蓝”处置流程
    C#连接 ORACLE,提示System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本
    RegAsm安装卸载办法
    解决Visual Studio:"无法导入以下密钥文件: xxxx.pfx,该密钥文件可能受密码保护"
  • 原文地址:https://www.cnblogs.com/wsw-tcsygrwfqd/p/8667247.html
Copyright © 2011-2022 走看看