●SQL高级查询

等值连接查询

  用where子句指定连接条件

  例:查询“张旭“教师任课的学生成绩

  select score.* from score,course,teacher

  where score.cno=course.cno

  and course.tno=teacher.tno

  and tname='张旭'

  在from子句中用join指定连接条件

  例:查询“张旭“教师任课的学生成绩。

  select score.* from score

  join course on score.cno=course.cno

  join teacher on course.tno=teacher.tno

  where tname='张旭'

自连接查询

  连接不仅可以在表之间进行,也可以使一个表同其自身进行连接,这种连接称为自连接。

  例:查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。

  select sno,sname,sbirthday from student

  where YEAR(sbirthday)=

  (

  select YEAR(sbirthday) from student

  where sno=108

  )

内部连接

  连接的结果是从两个或两个以上的表的组合中挑选出符合连接条件的数据,如果数据无法满足连接条件则将其丢弃。

外部连接

  参与连接的表有主从之分,以主表的每行数据去匹配从表的数据列,符合连接条件的数据将直接返回到结果集中。对那些不符合连接条件的列,将被填上NULL 值后再返回到结果集中。

  外部连接分为左外部连接(left)、右外部连接(right)、全连接(fall)。主表在左边则称为左外部连接;主表在右边则称为右外部连接。

  select * from Info

  left join nation on Info.nation=nation.code    --以左边为主表全部显示

复合条件连接查询

  在WHERE 子句中使用多个连接条件的查询,称为复合条件连接查询。

合并查询

  合并查询就是使用UNION 操作符,将来自不同查询的数据组合起来,形成一个具有综合信息的查询结果。

  注意:

    UNION 操作会自动将重复的数据行剔除。

    参加合并查询的各子查询的使用的表结构应该相同。

    各子查询中的数据数目和对应的数据类型都必须相同。

  例:查询所有教师和同学的name、sex和birthday.

  select sname,ssex,sbirthday from student

  union

  select tname,tsex,tbirthday from teacher

使用UNION前后的区别

嵌套查询

  在一个SELECT 语句的WHERE 子句或HAVING 子句中嵌套另一个SELECT 语句的查询,称为嵌套查询又称子查询。子查询效率比join连接效率高。

    无关子查询。外查询和内查询之间没有任何逻辑上的联系。

    相关子查询。外查询和内查询彼此依赖。无关子查询效率比相关子查询效率高。

SELECT <目标表达式1>[,… ]

FROM <表或视图名1>

WHERE [表达式]

  (SELECT <目标表达式2>[,…] FROM <表或视图名2>)

[GROUP BY <分组条件>

HAVING [<表达式>比较运算符]

  (SELECT <目标表达式2>[,… ] FROM <表或视图名2> ])

  分页查询

    select top 5 * from Info where code not in (select top 10 code from Info)

当记录中有null时,条件要写成(列名 is null),不能写为(列名=null)

原文地址:https://www.cnblogs.com/phantom-k/p/3961818.html