数据库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'
)
目录
相关文章
|
7天前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
28 11
|
1月前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
21天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
20天前
|
SQL 监控 安全
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。
|
1月前
|
SQL 关系型数据库 MySQL
体验使用DAS实现数据库SQL优化,完成任务可得羊羔绒加厚坐垫!
本实验介绍如何通过数据库自治服务DAS对RDS MySQL高可用实例进行SQL优化,包含购买RDS实例并创建数据库、数据导入、生成并优化慢SQL、执行优化后的SQL语句等实验步骤。完成任务,即可领取羊羔绒加厚坐垫,限量500个,先到先得。
151 12
|
27天前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
27天前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。
|
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 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。