教你使用SQL语句进行数据库复杂查询

目录
  • 前言

前言

本篇可当做例题练习,

1.查询比”林红”年纪大的男学生信息
语句:

select *
from Student
where Sex='男' and
	year(Birth)-(select year(Birth)from Student--这里是需要告诉查询的表名,相当于嵌套
	where Sname='林红')<0

2.检索所有学生的选课信息,包括学号、姓名、课程名、成绩,性别.
语句:

select sc.sno,sname, course.Cno,Cname,Grade,Sex
--这里如果两个表中都有同一个属性,则需要标明在哪个表,如sc.sno
from student,sc,Course
where student.Sno=sc.Sno and Sc.Cno=course.Cno

3.查询已经选课的学生的学号、姓名、课程名、成绩.
语句:

select sc.sno ,sname , Cname , Grade
from student s , course c, sc
where s.sno=sc.sno and c.cno=sc.cno

(4)查询选修了“C语言程序设计”的学生的学号与姓名
–a.用内连接查询
语句:

select sc.Sno,sname from student inner join sc on
student.Sno=sc.Sno inner join course on sc.Cno =course.cno
and Cname='C语言程序设计'

–b.用连接查询
语句:

select sc.Sno,sname from student,sc,course where
student .Sno=sc.Sno and sc.Cno =course.cno
and Cname='C语言程序设计'

–c.用子查询
语句:

select Sno,sname from student where Sno in
(select Sno from sc where Cno=
(select cno from course where Cname ='C语言程序设计'))

(5)查询与”张虹”在同一个班级的学生学号、姓名、家庭住址
–a.用连接查询
语句:

select a.Sno,a.sname,a.Home_addr from student a,student b
where a.Classno =b.Classno and b.Sname ='张虹' and a.Sname!='张虹'

–b.用子查询
语句:

select Sno,sname,Home_addr  from student where
classno=(select classno from student where sname='张虹')
and sname!='张虹'

(6)查询其他班级中比”051”班所有学生年龄大的学生的学号、姓名
代码1:

select Sno,sname,Home_addr  from student where
classno!='051' and Birth<all (select Birth  from student where classno='051')

代码2:

select Sno,sname,Home_addr  from student where
classno!='051' and Birth<(select min(Birth)  from student where classno='051')

(7)(选作)查询选修了全部课程的学生姓名。本题使用除运算的方法。
–由题意可得另一种语言,没有一个选了课的学生没有选course表里的课程。那么,我们需要两个NOT EXISTS表示双重否定;
语句:

select Sname from student
where not exists (
select * from course
where not exists (
select * from sc
where sno=student. sno
and cno=Course.cno))

(8)查询至少选修了学生“20110002”选修的全部课程的学生的学号,姓名。
语句:

select Sno, Sname from student
where sno in (
select distinct sno from sc as sc1
where not exists (
select * from sc as sc2 where sc2.sno='20110002'
and not exists (
select * from sc as sc3 where sc3.Sno=sc1.sno and
sc3.cno=sC2.cno) )
)

(9)检索选修了“高数”课且成绩至少高于选修课程号为“002"课程的学生的学号、课程号、成绩,并按成绩从高到低排列。
语句:

select sc.Sno, sc.cno , grade from sc where
grade >all(select grade from sc where cno='002' ) and
Cno= (select Cno
from course where Cname='高数')
order by Grade desc

(10)检索选修了至少3门以上课程的学生的学号、总成绩(不统计不及格的成绩),并要求按总成绩降序排列。
语句:

select sno,SUM(grade) from sc where sno in (select Sno from sc group by sno
having COUNT(*)>=3) and Grade>=60 group by sno
order by SUM (grade) desc

(12)检索多于3名学生选修的并以3结尾的课程号的平均成绩。
语句:

select avg(Grade) as 平均成绩
from sc
where Cno like '%3' group by cno
having count (Cno)>3

(13)检索最高分与最低分之差大于5分的学生的学号、姓名、最高分、最底分。

select distinct sc.sno 学号,sname 姓名,
max (grade) as最高分,min (grade) as最低分
from student,sc
where sc.sno=student.Sno group by sc.sno , Sname
having max(grade) -min (grade) >5

(14)创建一个表Student_other,结构同student,输入若干记录,部分记录和student表中的相同。
–创建过程:

create table student__other (
Sno char (8) primary key,
Sname varchar (8) not null,
sex char(2) not null,
Birth smalldatetime not null,
Classno char (3) not null,
Entrance_date smalldatetime not null,
Home_addr varchar (40) ,
sdept char (2) not null,
Postcode char (6)
)

随意插入几条student表中没有的数据:

–a.查询同时出现在Student表和student_other表中的记录
语句:

select * from student__other so ,student s
where so.sno=s.sno

----b.查询Student表和Student_other表中的全部记录
代码:

select * from student
union
select * from student__other

到此这篇关于教你使用SQL语句进行数据库复杂查询的文章就介绍到这了,更多相关sql复杂查询语句内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Mysql一些复杂的sql语句(查询与删除重复的行)

    1.查找重复的行 SELECT * FROM blog_user_relation a WHERE (a.account_instance_id,a.follow_account_instance_id) IN (SELECT account_instance_id,follow_account_instance_id FROM blog_user_relation GROUP BY account_instance_id, follow_account_instance_id HAVING C

  • java中复杂查询sql语句该怎么写

    java中的复杂查询sql语句实现: 这样的查询栏,在页面中很常见,这就是复杂查询的条件,我们可以填写一个条件或多个条件,也可以一个都不填写,在这样的情况下我们的sql语句就不能是一个固定的String类型的字符串. 看到这相信大家都想到用什么来定义sql语句了,没错就是StringBuilder,基本模板应该就是 String sql = "select * from `user` "; StringBuilder sb = new StringBuilder(sql); 但是这一步

  • MySQL常用SQL语句总结包含复杂SQL查询

    1.复杂SQL查询 1.1.单表查询 (1)选择指定的列 [例]查询全体学生的学号和姓名 select Sno as 学号,Sname as 姓名 from student; select Sno,Sname from student; (2)查询全部列 [例]查询全体学生的详细信息 select * from student; (3)对查询后的指定列进行命名 [例]查询全部学生的"姓名"及其"出生年"两列 select Sname as 姓名,(2014-Sage

  • MyBatis3.X复杂Sql查询的语句

    目录 MyBatis3.X复杂Sql查询 MyBatis3.X的resultMap ResultMap复杂对象一对一查询结果映射之association ResultMap复杂对象一对多查询结果映射之collection Mybatis3.X ResultMap复杂对象查询总结 总结ResultMap的复杂对象查询 MyBatis3.X复杂Sql查询 MyBatis3.X的resultMap 1.Mybatis的sql语句返回的结果有两种 resultType 查询出的字段在相应的pojo中必须

  • 强制SQL Server执行计划使用并行提升在复杂查询语句下的性能

    通过观察执行计划,发现之前的执行计划在很多大表连接的部分使用了Hash Join,由于涉及的表中数据众多,因此查询优化器选择使用并行执行,速度较快.而我们优化完的执行计划由于索引的存在,且表内数据非常大,过滤条件的值在一个很宽的统计信息步长范围内,导致估计行数出现较大偏差(过滤条件实际为15000行,步长内估计的平均行数为800行左右),因此查询优化器选择了Loop Join,且没有选择并行执行,因此执行时间不降反升. 由于语句是在存储过程中实现,因此我们直接对该语句使用一个undocument

  • 教你使用SQL语句进行数据库复杂查询

    目录 前言 前言 本篇可当做例题练习, 1.查询比”林红”年纪大的男学生信息语句: select * from Student where Sex='男' and year(Birth)-(select year(Birth)from Student--这里是需要告诉查询的表名,相当于嵌套 where Sname='林红')<0 2.检索所有学生的选课信息,包括学号.姓名.课程名.成绩,性别.语句: select sc.sno,sname, course.Cno,Cname,Grade,Sex

  • iOS开发中使用SQL语句操作数据库的基本用法指南

    SQL代码应用示例 一.使用代码的方式批量添加(导入)数据到数据库中 1.执行SQL语句在数据库中添加一条信息 插入一条数据的sql语句: 点击run执行语句之后,刷新数据 2.在ios项目中使用代码批量添加多行数据示例 代码示例: 复制代码 代码如下: // //  main.m //  01-为数据库添加多行数据 // //  Created by apple on 14-7-26. //  Copyright (c) 2014年 wendingding. All rights reserv

  • 如何利用SQL语句创建数据库详解

    目录 前言 建立数据库 总结 前言 SQL语言是集DDL.DML和DCL于一体的数据库语言 SQL语言主要由以下9个单词引导的操作语句来构成,但每一种语句都能表达复杂的操作请求 DDL语句引导词:Create(建立),Alter(修改),Drop(撤销) 模式的定义和删除,包括定义Database, Table,View,Index,完整性约束条件等,也包括定义对象(RowType行对象,Type列对象) DML语句引导词:Insert,Delete,Update,Select 各种方式的更新与

  • sql语句将数据库一条数据通过分隔符切割成多列方法实例

    目录 需求场景 应对措施 效果展示 具体代码 总结 sql语句,将数据库一条数据通过分隔符切割成多列 需求场景应对措施效果展示具体代码 需求场景 在实际场景之中,我们有时候会遇到一种情况,就是数据库中某一字段存了很长的一段字符串,里面用了分隔符进行分割,但是很不直观,你想查一下数据库把这个字段下的数据,按分隔符切割出来,并划分到下面几列上面,但又苦于只能写sql.这种情况下应该怎么办呢. 应对措施 首先这种情况下,sql是可以完全满足需求的.sql在代码中不仅可以用curd,更可以对数据的查询做

  • 用非动态SQL Server SQL语句来对动态查询进行执行

    此文章主要向大家讲述的是非动态SQL ServerSQL语句执行动态查询,在实际操作中我尝试在一个存储过程中,来进行传递一系列以逗号划定界限的值,来对结果集进行限制.但是无论什么时候,我在IN子句中使用变量,都会得到错误信息. 是否存在一种不执行动态SQL语句也能完成查询的方式呢? 我尝试在一个存储过程中传递一系列以逗号划定界限的值,以限制结果集.但是无论什么时候,我在IN子句中使用变量,都会得到错误信息.是否存在一种不执行动态SQL ServerSQL语句也能完成查询的方式呢? 专家解答: 这

  • SQL语句实现多表查询

    目录 基本sql语句 多表查询 例一:双表查询 例二:多表查询 基本sql语句 SELECT <目标字段> FROM <数据库表> WHERE <查询条件> GROUP BY <分组依据> ORDER BY <排列依据> 多表查询 内连接 :返回满足连接条件的数据 格式:SELECT <目标字段> FROM <INNER JOIN+表名+ON+连接条件> WHERE <查询条件> 注意:理清表与表之间的关系,从

  • Orancle的SQL语句之多表查询和组函数

    一.SQL的多表查询: 1.左连接和右连接(不重要一方加(+)) SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e,dept d WHERE e.deptno(+)=d.deptno ; (+)在等号左边是右连接,反之左连接. 2.交叉连接 (CROSS JOIN产生笛卡尔积) SELECT * FROM emp CROSS JOIN dept ; 3.自然连接 (NATURAL JOIN)自动关联字段匹配 SELECT * FRO

  • SQL Server 2008数据库分布式查询知识

    在接触公司一个系统时,公司使用的是SQL Server 2008数据库,里面涉及到了多个数据库之间的查询,而且数据库是分布式的,数据库分布在多台服务器之间,并且各个数据库各尽其责,负责存放不同模块功能的数据.这里面就要涉及到了数据库的分布式查询. 补充一下分布式查询的知识: 分布式查询从多异类数据源中访问数据.这些数据源可以存储在同一台计算机或不同的计算机上.Microsoft SQL Server 通过使用 OLE DB 来支持分布式查询. SQL Server 用户可以使用分布式查询访问以下

  • Oracle中sql语句如何执行日志查询

    目录 Oracle sql语句执行日志查询 Oracle查询某天sql执行记录 Oracle sql语句执行日志查询 在Oracle数据中,我们经常编写sql语句,有时我们会编写一些特别长的sql语句,而有一些意外导致sql消失,从而出现长时间写的sql,但是需要重新辨析,我们可以使用查询语句通过时间定位sql. 从而找到: select FIRST_LOAD_TIME,LENGTH(SQL_FULLTEXT),SQL_FULLTEXT from v$sql where SQL_FULLTEXT

  • sql 语句 取数据库服务器上所有数据库的名字

    --取得所有数据库名 包括系统数据库 --SELECT name FROM master.dbo.sysdatabases --取得所有非系统数据库名 --select [name] from master.dbo.sysdatabases where DBId>6 Order By [Name] --取所有信息,包括数据库文件地址 --select * from master.dbo.sysdatabases where DBId>6 Order By [Name]

随机推荐