数据查询(二)

原创 2016年06月01日 18:36:54

二.连接查询

等值查询

1.查询每个学生及其选修课程的情况

select student.* ,SC.*
from Student,SC
where Student.Sno = SC.Sno;

自身连接

2.查询每一门课的间接先修课

select first.Cno,second.Cno   //first second为Course的别名
from Course first,Course second
where first.Cpno = second.Cpno;

复合条件连接

3.查询选修2号课程且成绩在90分以上的所有学生

select Student.Sno,Sname
from Student,SC
where Cno = '2' and Grade > 90 and Student.Sno = SC.Sno;

4.查询每个学生的学号、姓名、选修的课程名及成绩

select Student.Sno,Sname,Cname,Grade
from Student,Course,SC
where Student.Sno = SC.Sno and SC.Cno = Course.Cno;

二.嵌套查询

select Sname
from Student
where Sno in(
   select Sno
   from SC
   where Cno = '2'
) ;

带有in谓词的子查询

5.查询与Larry在同一个系的学生姓名

select Sname
from Student
where Sdept in(
    select Sdept
    from Student
    where Sname = 'Larry'
);

6.查询选修了课程名为“信息系统”的学生学号和姓名

select Sno,Sname
from Student
where Sno in(
    select Sno
    from SC
    where Cno in(
        seelct Cno
        from Course
        where Cname = '信号与系统'
    )
);

//或者是
select Student.Sno,Sname
from Studnet,SC,Course
where SC.Sno = Student.Cno and SC.Cno = Course.Cno and Cname = '信号与系统';

带有比较运算符的查询

7.查询与Larry在同一个系的学生姓名
由于每一个学生只在一个系学习,因此该例可以用比较运算符=查询:

select Sname
from Student
where Sdept = (
    select Sdept
    from student
    where Sname = 'Larry'
    );

8.查询每个学生超过他选修课程平均成绩的课程号

select Cno
from SC x//这是一个相关子查询
where grade > (
    select avg(grade)
    from SC y
    where y.Sno = x.Cno
    );

9.查询其他系中比计算机系所有学生的年龄都小的学生姓名和年龄

select Sname,Sage
from student
where sage <= (
    select min(sage)
    from student
    where Sdept = 'CS'
    )
    and Sdept <> 'CS';

带有exists谓词的子查询

10.查询所有选修了1号课程的学生姓名

select Sname
from SC,student
where exists(//如果是没有选修,则改为  where not exists...
    select *
    from SC
    where Sno = student.Sno and Cno = '1'
    );

11.查询选修了全部课程的学生姓名
该题目可以等价转换为:查询一个学生,没有一门课程是他不选修的。

select Sname
from student
where not exists(
    select *
    from Course
    where not exists(
        select *
        from SC
        where Cno = Course.Cno and Sno = student.Sno
        )
); 

12.查询至少选修了学生2014213000选修的全部课程的学生学号
该题目可以等价转换为:不存在这样的课程y,2014213000选修了y,而学生x没有选。

select distinct Sno
from SC SCX
where not exists(
    select *
    from SC SCY 
    where SCY.Sno = '2014213000' and not exists(
        select *
        from SC SCZ
        where SCZ.Sno = SCX.Sno and SCZ.Cno = SCY.Sno));
//说实话,这个我也不是很懂。

四.集合查询

集合的操作主要包括并操作**union、交操作insersect、差操作**except
注:集合操作的查询结果的列数必须相同,对应项的数据类型也必须相同。

13.查询计算机系的学生及年龄不大于19岁的学生

select *
from student
where Sdept = 'CS'
union
/*
 *UNION可以将多个查询结果合并,并自动去掉重复元组
 */
select *
from student
where Sage < 19;

14.查询选修了课程1或选修了课程2的学生的学号

select Sno
from SC
where Cno = '1'
union
select Sno
from SC
where Cno = '2';

//敲完这篇博客我就去复习,讲真。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Oracle数据库表中查询最大值和第二大值

Oracle数据库表中查询最大值和第二大值
  • hailangswpi
  • hailangswpi
  • 2017年05月09日 16:08
  • 3065

Hibernate 二级缓存 和 查询缓存

二级缓存和查询缓存都相当于一个map。 二级缓存缓存的key为id,value为实体对象。一般load,get ,iterate使用到二级缓存,list()需要结合查询缓存使用。 iter...
  • w1033162186
  • w1033162186
  • 2016年02月05日 16:49
  • 1095

hibernate二级缓存与查询缓存之间的关系

我们先看一下什么样的hibernate操作会将数据存入到一级缓存中去,当调用下边这些方法的时候会将数据存入到一级缓存中 一级缓存 save、update、saveOrupdate、load、lis...
  • maoyeqiu
  • maoyeqiu
  • 2015年12月05日 16:10
  • 4588

实 验 二 SQL 数据查询

  • 2017年05月25日 22:40
  • 195KB
  • 下载

oracle学习之二(数据类型和表的查询)

oracle的数据类型: 字符型: char 最大为2000字符,char定义的空间,不管内容多少都会被占用,char查询效率很高,速度很快。定长,老被查询的字段,应该用char,速度极快。   ...
  • youyajie
  • youyajie
  • 2012年12月01日 16:24
  • 1382

mybatis学习笔记二mybatis结合spring mvc实现(用户登录,数据查询)

mybatis学习笔记二mybatis结合spring mvc实现(用户登录,数据查询)
  • zhaoxiangpeng16
  • zhaoxiangpeng16
  • 2016年04月05日 12:04
  • 2801

数据库学习之实验二+数据查询

实验目的: 1.  通过本实验能够掌握投影、选择条件表达、排序、分组的sql语句表达。 2.  通过本实验能够熟练应用sql语言进行查询,具体包括单表查询,多表连接查询。 实验要求: 1. 在...
  • PNAN222
  • PNAN222
  • 2016年10月30日 17:16
  • 590

thinkPHP常用数据操作(二)查询语言

上一节讲了使用 activerecord(AR)模式操作数据,但是面对复杂的业务逻辑时,AR模式很难应对,因此本节tp提供更加灵活的查询方式。 1 使用字符串作为查询条件(安全性不高) $User...
  • yunxian_19
  • yunxian_19
  • 2017年01月02日 10:00
  • 137

第五课 MongoDB 数据查询(二)

1.课程大纲         本课程继续讲解 MongoDB 数据查询相关的内容,包括MongoDB的游标、模糊查询以及findAndModify函数的使用。           1.MongoDB ...
  • Crazy__Programmer
  • Crazy__Programmer
  • 2015年09月06日 14:04
  • 791

Oracle(二)---------条件查询与排序数据

过滤: 使用WHERE 子句,将不满足条件的行过滤掉。 SQL> --where子句的使用,加上过滤的条件, 紧跟着from 表名之后 SQL> --where语法 select* |{distin...
  • w_l_j
  • w_l_j
  • 2012年03月12日 19:28
  • 1247
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据查询(二)
举报原因:
原因补充:

(最多只允许输入30个字)