嵌套查询
嵌套查询是将一个SELECT语句包含在另一个SELECT语句的WHERE子句中,也称为子查询。
子查询(内层查询)的结果用作建立其父查询(外层查询)的条件,因此,子查询的结果必须有确定的值。
利用嵌套查询可以将几个简单查询组成一个复杂查询,从而增强SQL的查询能力。
查询“张三”选修的课程和成绩
1.select 学号,课程,成绩 from [课程$] where 学号 = (select 学号 from [学生$] where 姓名 ="张三")
查询“张三”选修的语文课和成绩
3.select 学号,课程,成绩 from [课程$] where 学号 = (select 学号 from [学生$] where 姓名 ="张三" and 课程="语文")
查询所有考试学生的成绩
4.select * FROM [课程$] where 成绩 not in (select distinct 学号 from [学生$])
合并查询
SQL,可以将两个SELECT语句的查询结果通过并运算(UNION)合并为一个查询结果。进行合并查询时,要求两个查询结果
select中distinct具有相同的字段个数,并且对应字段的数据类型也必须相同。
依据学号查询语文和物理成绩。
5.select 学号,成绩, 课程 from [课程$] where 课程= "语文" union  select 学号, 成绩,课程 from [课程$] where 课程= "
多表查询
多表查询亦称连接查询,它同时涉及两个或两个以上的公共字段或语义相同的字段,也就是说数据表是通过表的列(字段)来体现的。是连接操作的目的就是通过加在连接字段的条件将多个表连接在一起,以便在多个表中查询数据。
多表查询,需要有相同的两个表的联接条件,该条件放在WHERE子句中,格式为:
select <;目标列>from <;表明1>,<;表名2> where <;表名1>.<;字段名1>=<;表名2>.<;字段名2>
依据学号条件查询学生的各门成绩
7.select * from [学生$],[课程$] where [学生$].学号=[课程$].学号
为了简化输入,在SELECT 命令中允许使用表的别名。为此,可以在FROM 子句中定义一个临时别名,以便查询使用。
SELECT <;目标列> FROM <;表名1><;别名1>,<;表名2><;别名2>WHERE <;别名1><;字段名1>=<;别名2>.<;字段名2>
依据学号条件查询学生的各门成绩大于85分
8.select kc.学号,姓名,课程,成绩 from  [学生$] xs , [课程$]  kc where xs.学号 = kc.学号 and 成绩 >85
在数据透视表中对多表查询,还可以使用另一种连接格式,就是内连接查询,也叫等值连接查询。它是组合两个(或SELECT <;目标列> FROM <;表名1> inner join <;表名2> on <;表名1>.<;字段名1>=<;表名2>.<;字段名2>
依据学号条件查询学生的各门成绩大于85分
9.select kc.学号,姓名,课程,成绩 from [学生$]xs inner join [课程$] kc on xs.学号=kc.学号
on <;表名1>.<;列名>=<;表名2>.<;列名>
10.select kc.学号,姓名,课程,成绩 from [学生$]xs left join [课程$] kc on xs.学号=kc.学号
11.select kc.学号,姓名,课程,成绩 from [学生$]xs right join [课程$] kc on xs.学号=kc.学号
联合查询想必大家都知道了,数据透视表多表查询,一般都使用的是联合查询,它合并的是两个或两个以上查询的结参加联合查询的列数要相同,对应列的数据类型必须兼容,各语句中对应的结果集列出现的顺序必须相同。
与连接查询相比,联合查询增加记录的行数,连接查询则是增加记录的列数。联合查询语句如下:
select * from [] union [all]
其中ALL选项保留结果集中的重复记录,默认时系统自动删除记录。
12.select kc.学号,姓名,课程,成绩 from [学生$]xs right join [课程$] kc on xs.学号=kc.学号
="张三" and 课程="语文")