1.Union的用法
今天一题是两张表的要素用相同字段表示出来,但是两张表涉及的字段是不一样的,那么如何去实现呢?
用union
Union 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。
Union 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。
同时,每条 SELECT 语句中的列的顺序必须相同.
所以用Union的原则是列数、列类型及列顺序必须都相同
例如
查询所有教师和同学的name、sex和birthday
students表和teachers表的字段名称是不一样的,
但是
sname对应tname
ssex对应tsex
sbirthday对应tbirthday
以上字段类型也相同
所以
我们的语句为:
SELECT
tname as name,
tsex as sex,
tbirthday as birthday
FROM
teachers UNION
SELECT
sname,
ssex,
sbirthday
FROM
students
2.查询成绩比该课程平均成绩低的同学的成绩表。
起初代码运行后,显示
Subquery returns more than 1 row
意思是:子查询结果多于一行
后来在子查询语句前加了个any就解决了
SELECT
*
FROM
scores as a
WHERE
degree < (SELECT avg( degree ) FROM scores as b where a.cno= b.cno GROUP BY cno)
ORDER BY cno
3.关于ANY的用法
假设any内部的查询语句返回的结果个数是三个,如:result1,result2,result3,那么,
select …from … where a > any(…);
->
select …from … where a > result1 or a > result2 or a > result3;
题外话
all就是把or改成and