140908●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 语句的查询,称为嵌套查询又称子查询。

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

    相关子查询。外查询和内查询彼此依赖。

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

FROM <表或视图名1>

WHERE [表达式]

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

[GROUP BY <分组条件>

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

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

时间: 2025-01-07 16:04:51

140908●SQL高级查询的相关文章

SQL高级查询技巧

1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. 当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行.两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2. B, EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表

SQL高级查询基础

1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. 当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行.两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2. B, EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表

SQL高级查询

高级查询: 一.多表链接 1,普通查询 select * from 表名,表名 where 表名.列名 = 表名.列名 2,join链接 select * from 表名 join 表名 on 表名.列名 = 表名.列名 二.多表联合 select * from 表名 where 列名='内容' union select * from 表名 where 列名='内容' 三.子查询(无关子查询) select * from 表名 where 列名 = (select 列名 from 表名 wher

SQL————高级查询

高级查询 --连接查询 select * from 表1,表2 ————形成笛卡尔积 select * from 表1,表2 where 表1.主键=表2.外键  ————主外键位置可以互换 --join on 内连接 格式: select * from 表1 join 外键 on 表1.主键 = 表2.外键 --查哪位学生的哪一门课考了多少分 select student.sname,course.cname,score.degree from student join score on sc

SQL(高级查询)

1.子查询在WHERE子句中 在SELECT查询中,在WHERE查询条件中的限制条件不是一个确定的值,而是来自于另外一个查询的结果 为了给查询提供数据而首先执行的查询语句叫做子查询 子查询嵌入在其它SQL语句中的SELECT语句,大部分出现在WHERE子句中 子查询嵌入的语句称作主查询或父查询 主查询可以是SELECT语句,也可以是其它类型的语句比如DML或DDL语句 根据返回结果的不同,子查询可分为单行子查询.多行子查询及多列子查询2.子查询在WHERE子句中(续1) 如果子查询返回多行,主查

SQL Server SQL高级查询语句小结(转)

--select select * from student; --all 查询所有 select all sex from student; --distinct 过滤重复 select distinct sex from student; --count 统计 select count(*) from student; select count(sex) from student; select count(distinct sex) from student; --top 取前N条记录 s

sql 高级查询语句总结

数据库建表语句在最后 –这是一个学生成绩管理系统,创建数据库表语句在最后,表包括四张表tblStudent 学生信息表,tblScore 成绩表 ,tblteacher 教师信息表,tblcourse 课程表 –希望大家学会使用mysql数据库,以后工作中使用的数据库是由公司决定,有可能是mysql数据库也有可能是oracel 或者sqlserver数据库, –但是所有数据库都是基于sql操作,每个数据库都有每个数据库的方言,学会基本的sql语句,接触新的数据库时候学习一下该数据库对比与 –其他

SQL高级查询技巧(两次JOIN同一个表,自包含JOIN,不等JOIN)

掌握了这些,就比较高级啦 Using the Same Table Twice 如下面查询中的branch字段 SELECT a.account_id, e.emp_id, b_a.name open_branch, b_e.name emp_branch FROM account AS a INNER JOIN branch AS b_a ON a.open_branch_id = b_a.branch_id INNER JOIN employee AS e ON a.open_emp_id

Oracle数据库——SQL高级查询

一.涉及内容 1.掌握SELECT语句的多表连接查询. 2.掌握SELECT语句的子查询. 二.具体操作 (一)根据Oracle数据库scott方案下的emp表和dept表,完成下列操作: 1.查询所有工种为CLERK的员工的姓名及其部门名称. select ename,dname from scott.emp t1 inner join scott.dept t2 on t1.deptno=t2.deptno where job='CLERK'; 2.查询所有部门及其员工信息,包括那些没有员工