数据库sql语句(经典)

简介: 数据库sql语句(经典)

例题:

2cc65cb577de4a318d954f38996b5d41.png


先来讲讲not in 和not exists的区别,再开始今天的例题(和in,exists相反)


not in内外表做笛卡尔积,然后按照条件查询,没有用到索引


not exists是对外表进行循环,每次循环再对内表进行查询,先查的外表的内容,不是子查询的内容,并且依然用到了表上的索引


两者最大的区别是:not in只能返回一个字段


如:


select week6s.SNO 一门课程没选的学生学号
from week6s
where week6s.SNO not in(
select week6sc.SNO
from week6sc
group by week6sc.SNO)


select week6s.SNO 一门课程都没选修的学生学号
from week6s
where  not exists(
select *
from week6sc
where week6s.SNO=week6sc.SNO
)


not in能表示的not exists也能表示(其实所有带in,比较运算符,any,all的子查询都能用exists表示),并且注意观察,两者引用的方式也不同,返回的结果是:


f9168414d5bc4671a245eedaf4372bd4.png


再着重讲一下两者的引用过程


not in相当于笛卡尔积的运算过程,找到符合not in前的一个字段的条件,不能是name,id not in


exists子查询的返回结果只返回真值或假值,所以给出列明没有实际的意义

对于exists,内层循环结果非空,外层where返回真值

对于not exists,内层循环结果非空,外层where返回假值

select *
from week6sc
where week6s.SNO=week6sc.SNO


内层循环返回结果非空,所以not exists 为false,这里的记录在exists会被记录下来


补充:‘=’和‘in’


当确切知道内层循环返回单值时,可用比较运算符(‘>’'<''=''!=')


select sno,sname,sdept
from student
where(select sdept from student where sname='刘')=sdept


在sql server中这条语句不会报错,但是sql标准要求子查询一定要跟在比较符之后,所以这条语句是错的。


1)检索至少选修一门课程的学生学号


select week6s.SNO 至少选修一门课程的学生学号
from week6s,week6sc
group by week6s.SNO,week6sc.SNO
having week6s.SNO=week6sc.SNO

a51a8c21886c45959a2de1acd7079d06.png


2)检索一门课程都没选修的学生学号


select week6s.SNO 一门课程没选的学生学号
from week6s
where week6s.SNO not in(
select week6sc.SNO
from week6sc
group by week6sc.SNO)

9ef712a57d964767a4b94f80f378fb29.png


3检索至少选修两门课程的学生学号


1. select week6sc.SNO 至少选修两门课程的学生学号
2. from week6sc
3. group by week6sc.SNO
4. having count(week6sc.SNO)>1


abc3326053e241118b5e64f64f638e17.png


这里也可以检索所有选了课的学生-选了小于两门课的学生,思路相同只是写起来比较繁琐


4)检索恰好选修一门课程的学生学号


select week6sc.SNO 选修了一门课程的学生学号
from week6s,week6sc
group by week6s.SNO,week6sc.SNO
having week6s.SNO=week6sc.SNO
and week6sc.SNO not in(
select week6sc.SNO
from week6sc
group by week6sc.SNO
having count(week6sc.SNO)>1
)

bff4a61d6e3a4ce2b0501ca1a50c9eac.png


5)检索至少选修三门课程的学生学号

select week6sc.SNO 至少选修三门课程的学生学号
from week6sc
group by week6sc.SNO
having count(week6sc.SNO)>2


4e4e0e26a030474ea44ecf7ca578941d.png


6)检索全部课程都选的学生学号(不存在一门课,成绩表中找不到他这门课的成绩记录)


select week6s.SNO 选修了全部课程的学生学号
from week6s
where not exists(
  select * from week6c
  where not exists(
    select * from week6sc
    where week6c.CNO=week6sc.CNO
    and week6sc.SNO=week6s.SNO
  )
)


9f397342f76643369abd7807a46c3c8f.png

7)检索选了S2所选全部课程的学生学号(同理,不存在一门课S2选了,而学生x没选)


select distinct sc1.SNO 选了S2所选的全部课程的学生学号
from week6sc sc1
where not exists(
  select * 
  from week6sc sc2
  where sc2.SNO='S2'
  and not exists(
    select *
    from week6sc sc3
    where sc3.SNO=sc1.SNO
    and sc3.CNO=sc2.CNO
  )
)


d641ca29bbc846d4a86caf0d6f22c08f.png

法2:


select distinct SNO
from week6sc
where CNO>=all(
  select CNO
  from week6sc
  where SNO='s2'
)
目录
相关文章
|
30天前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
139 3
|
1天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
1天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
2天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
12天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
14 2
|
17天前
|
SQL JSON Java
没有数据库也能用 SQL
SPL(Structured Process Language)是一款开源软件,允许用户直接对CSV、XLS等文件进行SQL查询,无需将数据导入数据库。它提供了标准的JDBC驱动,支持复杂的SQL操作,如JOIN、子查询和WITH语句,还能处理非标准格式的文件和JSON数据。SPL不仅简化了数据查询,还提供了强大的计算能力和友好的IDE,适用于多种数据源的混合计算。
|
1月前
|
SQL 监控 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
1月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
1月前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
19天前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)

热门文章

最新文章

下一篇
无影云桌面