子查询:
子查询就是嵌套查询,一般我们在进行查询时,都是使用一个select命令,然后对这张表的结果进行一些限制后再查询,而子查询是允许在一个select语句中再使用一个select语句,第二个select语句一般是用来限制第一select语句查询的结果的,第二个select查询的方法就是子查询,子查询有单行字查询、多行字查询和多列字查询,单行子查询就是限制查询的结果只有一行数据,例如我有如下一张数据表:
现在我想查询stud这张数据表的names字段和age字段的数据,但我还有一个要求就是,IDs这个字段中的数据只能是’11’,所以我可以这样写“select names, ID from stud where IDs = (select IDs from stud where IDs = ‘11’);”这样写确实没有必要,只是为了体现子查询的功能
因为我们在进行子查询时,通常都是用在where后面的条件,所以使用等号的话,最多可以对一种行的数据进行匹配,而要进行多行子查询还要使用一些其它的关键词,如“in, all, any”
1、in(a, b, c, ……):它也是一个范围匹配符号,意思是如果我们输入的值是括号中的任意一个值,那么会返回true
2、all:这个运算符可以将它里面的数据,都作为一个个体和其它数据进行比较,一般要配合其它运算符进行使用,例如n < all(3,5,67),只有n比all里面的所有数据都小,才返回true,也就说这个运算符可以把它里面的数据,全部作为一个个体来和其它数据进行比较
3、any:这个运算符可以将它里面的数据,都作为一个个体和其它数据进行比较,一般要配合其它运算符进行使用,例如n < any(3,5,67),只要n比any里面的任一一个数据小,就会返回true,也就说这个运算符可以把它里面的数据,全部作为一个个体来和其它数据进行比较
例如我还有一张表如下:
这张play表只有年龄字段,现在我要查询stud这张表中的names字段数据和age字段数据,但我有一个要求就是stud的age字段数据,必须在play的age中存在,可以这样写“select names, age from stud where age in (select age from play);”
多列子查询其实也很简单,就是子查询中,不只查询了一个字段,而是查询了多个字段,然后让主查询中的数据对其进行匹配,例如现在这张play表中增加了一个ID字段:
现在我要查询stud这个表中的所有数据信息,但stud这张表中的age字段和ID字段中的数据,必须在play这张表的age和ID字段中存在,所以我可以这样写“select * from stud where (age, ID) in (select age, ID from play);”
在进行查询时,这个子查询也可以直接加在from后面,常用的就是利用子查询,构造一张临时表,然后利用主查询来查询这张临时表中的数据(需要注意的是,只要是直接在from后面加的,都是数据表名,也就是需要查询的数据表),例如我有如下的一张数据表:
现在我要构建一张临时表,这张临时表中只有这张表的names字段和age字段,并且我只显示年龄小于30岁的数据,所以我可以这样写“select * from (select names, age from stud) as new where age < 30;”这样写的目的只是为了验证from后面加子查询的功能,所以查询时,会有其它很简便的方法
合并查询:
union:
有时我们在对一张数据表进行查询时,可能一条select语句不能完成我们想要的功能,所以我们需要写二条或更多条select语句,然后把这些select语句筛选出来的数据,进行一个合并,所以这时我们就要使用union命令,当然它在合并select语句所筛选出的数据时,这些select语句中所要显示的字段必须是相同的,也就是虽然我们可以写多条select语句,但对这些select语句是有要求的,它们所显示的字段必须相同,而且显示的字段数量必须相等,只有后面的筛选条件可以不同,所以说union合并的只是筛选条件,相当于我们查询一张表时,可以分别用多条语句来进行限制,union合并筛选条件的方法是,或(||)的形式(只要满足其中一个select语句的条件就会显示出来),而显示数据时,是以并(&)的形式,也就是相与的形式,它会把重复的数据去掉,也就说如果有一条数据,既满足第一个条件又满足第二条件,那么不会重复显示这条数据二次,而只显示一条数据,例如我有如下的一张数据表:
现在我想查询这张表的names字段,age字段和ID字段,并且age字段的数据必须小于30,ID字段的数据也必须等于11,这时我就可以这样写“select names, age, ID from stud where age < 30 union select names, age, ID from stud where ID = ‘11’;”
union all:
union all和union的功能相同,唯一的区别就是union all是以或(||)的形式来显示数据,也就是说它不会帮我们去除相同的数据,也就是说它会把所有select语句筛选出的数据全部显示出来