数据查询(二)

原创 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';

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

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

相关文章推荐

实 验 二 SQL 数据查询

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

IOS CoreData 多表查询demo解析(二)--插入测试数据

下面插入测试数据: Department *dept1 = [NSEntityDescription insertNewObjectForEntityForName:@"Department" i...
  • swj6125
  • swj6125
  • 2013年08月14日 18:36
  • 5151

Android连接服务器数据库查询+Gson解析(List和Map)格式json数据(二)

1、Android主要代码 package com.pdsu.libsys; import java.lang.reflect.Field; import java.lang.reflect.Ty...

SQL Server 2008中的分区表(二):如何添加、查询、修改分区表中的数据

引自:http://blog.csdn.net/luoyanqing119/article/details/19239453 在创建完分区表后,可以向分区表中直接插入数据,而不用去管它这...

数据库调优教程(二)慢查询数据准备

手动创建一张大数量级的表

android天气查询(二)之网络json数据的获取

前面一片文章介绍了如何使用ksoap获取天气信息,但是使用的网络资源受到了限制,所以我们这里会采用第二种方法,可以无限制的获取。http://m.weather.com.cn/data/1010911...

SQL Server 2005中的分区表(二):如何添加、查询、修改分区表中的数据

在创建完分区表后,可以向分区表中直接插入数据,而不用去管它这些数据放在哪个物理上的数据表中。接上篇文章,我们在创建好的分区表中插入几条数据: insert Sale ([Name],[SaleTime...
  • lary_li
  • lary_li
  • 2011年07月13日 14:37
  • 165

HQL数据查询基础(二)

继上回( HQL数据查询基础(一) )说到的例子——网上商店,来继续完善持久化类和配置文件的创建。        上回 在 com.imooc.model 包中创建 Seller.java 持久...

SQL数据查询(二)

连接查询若一个查询涉及两个或两个以上的表,称之为连接查询。连接查询是数据库的主要查询,主要包括等值连接查询,自然连接查询,非等值连接查询,自身连接查询和复合条件连接查询。等值连接与非等值连接查询连接查...

mongodb基础系列——数据库查询数据返回前台JSP(二)

上篇博客论述了,数据库查询数据返回前台JSP。博客中主要使用Ajax调用来显示JSON串,来获取其中某一个字段,赋给界面中的某一个控件。 那这篇博客中,我们讲解,把后台List传递JSP展示。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据查询(二)
举报原因:
原因补充:

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