SQL语言基础(4)

来源:互联网 发布:视频录制软件手机版 编辑:程序博客网 时间:2024/06/03 13:00

UNION将两个或两个以上的查询结果合并为一个结果集,它与使用连接查询合并两个表的列是不同的,使

用UNION合并查询必须遵守:1列的数目和顺序必须一致;2数据的类型必须兼容。
select 语句
UNION [all]
select 语句
可以看到,只要对应字段的类型相同就可以完成合并操作,但是为了有意义,两个查询的结果应该为相同

的含义,否则没有意义。
结果字段名称和union之前的字段名称相同,默认情况下删除结果集中的重复记录,如果希望保留所有记

录,则必须使用all关键字。
使用union时单独的select语句不能包含自己的order by或compute子句,只能在最后使用order by和

compute语句,对最终结果集进行作用。
若需要对查询结果进行分组以及在分组后对结果使用having子句进行过滤,则必须在单独的select语句中

指定group by和having子句。
查询计算机系的学生或者年龄不大于19岁的学生,并按年龄倒排序
select * from student where sdept="计算机"
union
select * from student where sage<=19
order by sage desc
连接查询
根据数据表的逻辑关系从两个或多个数据表中检索数据
定义数据表之间的关联方式:1指定用于联结的字段,典型的联结条件是在一个数据表中指定外键,同事

在另一个数据表中指定与其关联的主键。2在select语句中指定比较各字段值时要使用的逻辑运算符。
联结的类型:内联结;外联结(左向外连接,右向外连接,完整外连接);交叉连接
内联结格式:数据表1 inner join 数据表2 on 联结表达式
指定返回两个表中所有匹配的行。inner是缺省的连接方式
外连接:数据表1 left (outer) join 数据表2 on 联结表达式
        左联结数据表1的所有记录都返回,右边字段没有匹配时为空值。
        数据表1 right (outer) join 数据表2 on 联结表达式
        右联结数据表2的所有记录都返回,左边字段没有匹配时为空值。
完整联结:数据表1 full join 数据表2 on 联结表达式
结果集包括所有记录,没有匹配记录时则将另一数据表选择列表字段置空。
交叉联结:数据表1 cross join 数据表2 (没有where子句的情况下返回笛卡尔乘积)
嵌套查询:外层查询是主查询,内层查询是子查询。SQL允许多层嵌套,order by 子句只能对最终查询结

果进行排序。
比较常用的子查询:where 表达式[not] in (子查询)
                  where 表达式 比较运算符 [any|all] 子查询
                  where [not] exists (子查询)
单值比较(返回单值的子查询,只返回一行一列,主查询与单值子查询之间用比较运算符联结)
子查询in(比如查找选修‘co1’课程的学生的学号、姓名)
select sno,sname
from student
where sno in(select sno
             from sc
             where cno=‘co1')
子查询——多值比较all(比如查询年龄最小的学生)
子查询——多值比较some/any,(找出不是最小年龄的学生)
子查询——存在判断exists,当子查询返回结果集非空时,Exists为真否则为假。
select sno,sname
from student
where exists
(select*
  from sc
  where sc.sno=student.sno and cno=‘co1’)

原创粉丝点击