T-SQL查询语言(DQL)查询举例(二)
单行单列记录
含义:子查询的返回值只有一个,并且涉及到的字段只有也是一个。此时可以使用比较运算符(=,>,<,>=,<=,<>)。
举例:查询与“刘伟”老师职称相同的教师号、姓名
SelectT_No,T_Name From Teacher Where T_Title = (Select T_Title From Teacher WhereT_Name = ‘刘伟’)
2>>、多行单列记录
含义:子查询的返回值是多个值,返回了一个集合。此时不能直接使用比较大小的比较运算符(=,>,<,>=,<=,<>),可以在比较大小的比较运算符和子查询之间插入any或all,也可以不使用比较大小的比较运算符,而使用in(in相当于等于“=any”)。
举例:查询其它系中比计算机系所有教师工资都高的教师的姓名和工资
Select T_Name,T_Salary From Teacher Where T_Salary > all(Select T_Salary From Teacher Where T_Dept='计算机') and T_Dept<>'计算机'
说明:in()的含义是匹配子查询结果中的任一个值即可(符合一个就行,重点为在里面);all()的含义是必须要符合子查询的所有值才可以(全部相同才行,重点为全部);any()的含义是要符合查询结果的任何一个值即可(重点为任意一个)。in()可以代替“=any()”。注意:all和any操作符不能单独使用,必须要和比较大小的比较运算符(=,>,<,>=,<=,<>)结合使用。
3>>、多行多列记录
含义:子查询的返回多个字段的多个值,且父查询的时候依据这些值进行查询
4>>、单行单列记录
含义:子查询的返回多个字段的一条记录,且父查询的时候依据这些值进行查询。此时可以运用比较大小的比较运算符(=,>,<,>=,<=,<>)。
5>>、网友的过于3>>和4>>的说法和举例:多列子查询:当是单行多列的子查询时,主查询语句的条件语句中引用子查询结果时可用单行比较符号(=, >, <, >=, <=, <>)来进行比较;当是多行多列子查询时,主查询语句的条件语句中引用子查询结果时必须用多行比较符号(IN,ALL,ANY)来进行比较。
例:SELECT deptno,ename,job,sal FROM EMP WHERE (deptno,sal) IN (SELECT deptno,MAX(sal) FROM EMP GROUP BY deptno);
3>、相关子查询和普通查询的区别
普通子查询的子表只执行一次;相关子查询的子表的执行次数,要看父表的记录行数了,也就是说,选择父表的一行记录执行一边子表。
4、合并查询
含义:使用union操作符将来自不同查询的数据组合起来,形成一个具有综合信息的查询结果。union会自动将重复的数据行剔除。注意:参加合并查询的各子查询的使用的表结构应该相同(数据列的数据及相应的数据类型应该相同)
举例:从选课信息表中查询出学号为“S1”的同学的学号和总分,且再一次从选课信息表中查询出学号为“S2”的同学的学号和总分,然后将两个查询结果合并成一个结果集。
Select S_No,sum(Score) From Choice Where S_No='S1' Group by S_No Union Select S_No,sum(Score) From Choice Where S_No='S2' Group by S_No。