高级查询及分页总结

一、子查询

案例:

 select * from Student

where Birthday>(

select Birthday from Student Where StudentName=‘张玲‘

)

提示:将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个。

二、IN和NOT IN子查询

1.IN

    用IN条件:在不确保返回值的是一条的情况用IN。

select studentname,studentno
from student
where studentno in
(
  select studentno from result
  where subjectid in(

    select subjectid from subject 
    where subjectname=‘oop‘
  )and examdate=(
    select max(examdate) from result
    where subjectid in  (
      select subjectid from subject 
      where subjectname=‘oop‘
    )
  )
)

 2. not in(不等于)

  我想大家应该都知道了用NOT IN 是为了查询不等于 什么什么

案例:    

select StudentName from Student
where StudentNo not in (
select StudentNo from Student Where StudentName=‘张玲‘
)

三、EXISTS和NOT EXIXTS子查询

1.EXISTS查询

  EXISTS关键字能够检测数据是否存在。

  如果子查询的结果非空,则EXISTS(子查询)将返回真(true),否则返回假(false)。

查询条件:查询科目为“oop”的最近一次考试成绩大于80的就加2分,否则小于80分的就加5分

if exists(
select * from Result
where SubjectId=(
select SubjectId From Subject where SubjectName=‘oop‘
)and ExamDate=(
  select max(ExamDate) From Result 
where SubjectId=(
  select SubjectId from Subject
  where SubjectName=‘oop‘)
  )and StudentResult>80
)
begin

--大于等于98就直接等于100分
update Result set StudentResult=100
where SubjectId=(
  select SubjectId From Subject where SubjectName=‘oop‘
)and ExamDate=(
  select max(ExamDate) From Result 
  where SubjectId=(
  select SubjectId from Subject
  where SubjectName=‘oop‘)
)and StudentResult>=98

update Result set StudentResult+=2
where SubjectId=(
  select SubjectId From Subject where SubjectName=‘oop‘
)and ExamDate=(
   select max(ExamDate) From Result 
 where SubjectId=(
  select SubjectId from Subject
  where SubjectName=‘oop‘)
)and StudentResult<=98

select *from Result where SubjectId=(
  select SubjectId from Subject where SubjectName=‘oop‘
)and StudentResult>80
end
else 
begin
update Result set StudentResult+=5
where SubjectId=(
  select SubjectId From Subject where SubjectName=‘oop‘
)and ExamDate=(
  select max(ExamDate) From Result 
where SubjectId=(
  select SubjectId from Subject
  where SubjectName=‘oop‘ )
)and StudentResult<80

select *from Result where SubjectId=(
  select SubjectId from Subject where SubjectName=‘oop‘
)and StudentResult<80
end

 2.not exists

  EXISTS和IN一样,同样允许添加NOT关键字实现取反操作,NOT EXISTS表示不存在。

四、相关子查询

查询条件: 查询Booka表中大于该类图书价格平均值的图书信息

FROM Books As a
  WHERE 价格 >
  (
    SELECT AVG(价格)
    FROM Books AS b
    WHERE b.类编号=a.类编号
  )

该查询执行过程:

  先将Books表中的第一条记录的“类编号”的值“2”代入子查询中,子查询变为:

      SELECT AVG(价格)
          FROM Books AS b
         WHERE b.类编号=2

  子查询的结果为该类图书的平均价格,所以外部查询变为:

      SElECT 图书名,出版社,类编号,价格
         FROM Books As a
       WHERE 价格 > 34

如果WHERE条件为True,则第一条结果包括在结果集中,则否不包括。对Books表中

的所有行运行相同的过程,最后形成的结果集及最后返回结果。

五、分页

方式一:跳过几条取几条(双top 双order by 方式)

select Top 3 * from Student
where StudentNo not in
(
  select top 3 StudentNo from Student
  order by StudentNo
)
order by StudentNo

注意点:子查询的排序方式,必须和父查询排序的方式一致

方式二:局限性(SQL Server2005之后的版本支持该写法,因为我们要用

到row_number() over()函数,在之前是没有该函数)

select * from
(
select *,ROW_NUMBER() over(order by StudentNo) as myid from Student
) as temp
where myid between 4 and 6

-原理:在原表的基础上加多了一列ID,ID列从1开始给值,我们就可以使用   Between   and   给值。

时间: 2024-12-25 10:11:18

高级查询及分页总结的相关文章

Linq高级查询与分页查询

Linq高级查询 以~开头: r=>r.Name.StartsWith("李"); 以~结尾: r=>r.Name.EndsWith("光"); 包含(模糊查询): r=>r.Name.Contains("四"); 数据总个数: Con.Goods.Count();||Con.Users.ToList().count; 最大值: Con.Goods.ToList().Max(r=>r.Price); 最小值: Con.Go

MyBatis和elementui中的高级查询和分页

前台 我们需要发送请求和带入参数 有了这两个属性过后需要在data中添加 这个属性是和方法平级的 整个页面 <template> <section> <!--工具条--> <el-col :span="24" class="toolbar" style="padding-bottom: 0px;"> <el-form :inline="true" :model="

2017-6-2 Linq 高级查询 (分页和组合查)、集合取交集

1.linq分页和组合查询:(用项目实战来解释) <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <he

高级查询与分页

一.简单子查询 问题1:查询学生表中比美羊羊小的学员信息(姓名,地址) (不用变量,所想即所得) 1 select StudentName,Address from Student 2 where Birthday>(select Birthday from Student where StudentName=‘美羊羊’) 问题2:查询oop课程至少一次考试刚好等于60分的学生信息(姓名,成绩) 1 select StudentName,StudentResult 2 from Student,

Linq高级查询,分页查询及查询分页结合

1.以...开头    StartsWith Repeater1.DataSource=con.Users.Where(r=>r.Nickname.StartsWith("李")); Repeater1.DataBind(); 2.以...结尾     EndsWith Repeater1.DataSource=con.Users.Where(r=>r.Nickname.EndsWith("同")); Repeater1.DataBind(); 3.模糊

测试使用索引库crud和高级查询分页

1.搭建ES的服务 导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> 配置ES ... spring: application: name: hrm-es-service data: elasticsearc

MySQL简单快速入门 (三)高级查询——JEPLUS软件快速开发平台

03.SQL高级查询_分组: 1).需求:一条查询,查询出每种商品的最高价格 2).分组的命令:group by 分组字段 3).实现上例: select category_id,max(price)  from product group by category_id; 查询顺序:先分组,再聚合 4).注意事项: 分组查询的结果最多只能包含:分组列,聚合结果,不能包含其他字段. 5).练习1: 需求:查询每个生产日期的商品的数量是多少? select  proDate,count(*)  fr

Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)

上一篇,讲到了SolrNet的基本用法及CURD,这个算是SolrNet 的入门知识介绍吧,昨天写完之后,有朋友评论说,这些感觉都被写烂了.没错,这些基本的用法,在网上百度,资料肯定一大堆,有一些写的肯定比我的好,不过,这个是Solr系列文章,会从Solr的基础入门讲到实际开发中的分页,高亮,Facet查询等高级用法.所以,基础的入门也会涉及一些,望大家见谅.我用这么多篇文章,来总结Solr 也是为了将Solr 的 安装,配置,开发等等,整个过程的资料,都能总结汇集到一起,这样不管是懂Solr还

SolrNet高级用法(分页、Facet查询、任意分组)

前言 如果你在系统中用到了Solr的话,那么肯定会碰到从Solr中反推数据的需求,基于数据库数据生产索引后,那么Solr索引的数据相对准确,在电商需求中经常会碰到菜单.导航分类(比如电脑.PC的话会有很多品牌).新车二手车导航会有车的品牌.还会根据价格区间自由组合组成自定义查询条件.常用高级用法如下: 1.根据基础数据反推数据分类用于导航(电脑品牌.手机品牌.车的品牌). 2.数据量大的要分页. 3.自定义价格区间. 4.时间段分组. 5.高亮. 以下我罗列三个我遇到的实际问题用来演示下Solr