SQL查询分类:子查询、连接查询、集合查询和分页查询
子查询:将一个查询包含到另一个查询当中。
1.不相关子查询:由里向外,即先执行子查询,子查询的结果用于建立父查询的条件。
2.相关子查询:先由外向里再向外,即先执行父查询,子查询再利用父查询的传值作为条件,最后父查询再利用子查询的结果作为查询条件返回最终结果。
连接查询:合并多个数据表的列。
1.内连接
1.1等值连接:关联条件的运算符是用等号来连接的。
1.2不等值连接:连接条件是出等号之外的操作符
1.3自然连接:两张表中寻找那些数据类型和列名相同的字段,然后自动地将它们连接起来,并返回所有符合条件的结果。
2.外连接
2.1左连接:以左表为准,即使右边没有满足连接条件对应的记录,左边也会出现在查询结果中,右边以空值出现。如果左边的表是右边的一方,那么返回的行数不一定和左表的记录数相等;
2.2右连接:以右表为准,即使右边没有满足连接条件对应的记录,右边也会出现在查询结果中,左边以空值出现。如果右边的表是左边的一方,那么返回的行数不一定和右表的记录数相等;
3.自连接:将一张表当多张表来连接。
4.交叉连接:也称笛卡尔积,返回的数据行数等于第一张表中符合查询条件的行数乘以第二张表中符合条件的数据行数。
集合查询:合并多个数据表中的行。包括union(并集)、intersect(交集)、和minus(差集)。
1.union:将两个以上的表的类似的查询结果叠成不同行返回,相同的内容只返回一行。
2.union all:将两个以上的表的类似的查询结果全部叠成不同行返回,也返回重复行。
3.intersect:返回两张表中相同的信息。
4.minus:返回两张表中不相同内容的信息。
分页查询:当数据量过大时,可能会导致各种各样的问题发生,例如:服务器资源被耗尽,因数据传输量过大而使处理超时,等等。最终都会导致查询无法完成,用到oracle可以使用伪列rownum,可以限制查询返回的行数,mysql可以使用limit,sqlserver可以使用top来分页。