SQL语言查询综合操作实战(附例题)

简介: 引入SQL语言中最重要的可谓就是查询操作了。我们可以发现,人与数据库的交互往往就是通过查询进行的,数据库的本质不就是存储和处理信息,最后通过查询为我们所用的工具嘛。除此之外,我们今后一系列SubQuery操作、函数操作往往都是建立在select查询的基础上的。查询基本成了sql大厦的基石了。本期我们就来聚焦于select查询操作,通过实战演示sql查询语句的编写技巧,希望我们都能成为灵活使用select语句的sql玩家!


引入


SQL语言中最重要的可谓就是查询操作了。

我们可以发现,人与数据库的交互往往就是通过查询进行的,数据库的本质不就是存储和处理信息,最后通过查询为我们所用的工具嘛。

除此之外,我们今后一系列SubQuery操作、函数操作往往都是建立在select查询的基础上的。查询基本成了sql大厦的基石了。

本期我们就来聚焦于select查询操作,通过实战演示sql查询语句的编写技巧,希望我们都能成为灵活使用select语句的sql玩家!


1. select语法回顾


之前的sql语言核心操作中我们浅浅地了解了select的用法,我们现在进行简单的回顾——

select * from 表名 where子句;
#返回指定表所有满足where子句条件的数据
select 字段1,字段2... from 表名 where子句;
#返回指定表满足where子句条件的指定字段数据

根据这两个命令我们就可以做出复杂的sql查询代码了。接下来我们来看一些例题:


2.前导知识


我们现在具有这样一个名为teach的数据库,数据库中有5张表,分别是T表(教师信息表)、SC表(学生选课信息表)、S(学生信息表)、C表(课程安排表)、TC表(教师授课信息表)。

本文重点在于查询操作,其余内容适当省略。对于这几张表的创建,我们之后有机会再来了解,这里就只给出表头范例,如下:

T:

TNo TN SEX Age Prof Sal Comm Dept
T1 李力 47 教授 1500 3000 计算机

SC:

SNo CNo Score
S1 C1 90
...

S:

SNo SN Sex Age Dept
S1 赵奕 17 计算机

C:

CNo CN CT
C1 程序设计 60

TC:

TNo CNo
T1 C1


3.简单条件查找


我们按照从简到难的顺序来看例题。最简单的查找是不带条件的查找,按照上面的select语法直接输入即可,这里不赘述了

笔者认为除了无条件查找之外第一阶的常用查找命令是“不带子查询的条件查找”。笔者称其为“简单条件查找”


3.1.查询T1老师所授课程的课程号和课程名


分析可知,我们需要的数据(包括条件给的数据和我们需要查找的数据)在两张表里:C和TC。在不同表中的数据如何放到一起?

我们很自然想到自然连接

完整代码如下:

Select C.CNo,CN 
From C,TC 
Where C.CNo=TC.CNo and TNo='T1'
复制代码

3.2.查询年龄大于18的男学生的学号、姓名、系别


这个比上一题简单一些。虽然这里要求的条件更多,但是逻辑比较简单,我们只需要把条件用and语句连接在一起即可:

select SNo,SN,Dept from S where(
  Age>18 and
  Sex='男'
)
复制代码


3.3.查询“李力”老师所讲授课程的课程号、课程名、课时


这里涉及的表比较多,我们只需要细心应该是没有问题的。

“李力”这个名字在T表,授课信息在TC,课名课时都在C表。

弄清楚了数据来源之后,把他们连接在一起,是非常通用且好理解的方法。注意是按什么字段进行连接的哦~

完整代码如下:

select C.CNo,CN,CT,TN from T,TC,C where(
  T.TNO=TC.TNo and
  TC.CNo=C.CNo and
  TN='李力'
)
复制代码

3.4.查询学号为S1的同学所选修课的课程号、课程名和成绩


这题和上面思路一样,自己写一写再看代码吧~

select SC.CNo,CN,Score from SC,C where (
  C.CNo=SC.CNo and
  SC.SNo='S1'
)
复制代码


4.SubQuery进阶查询


SubQuery子查询就是“查询里面套查询”。对付这类题目,理清逻辑很重要。我们一起看看吧:


4.1.查询至少选修“刘伟”老师所授全部课程的学生姓名


按照逻辑,这样的查询应该是逻辑表达式的“除法”操作。即把一个包含某一组特定字段值的数据查询出来。

很遗憾,sql语言中并没有除法运算符,也不能进行一组一组数据直接比较。所以这里不能直接把刘伟的课程选出来,然后与每个同学们选的课程分别比较,看看有没有包含刘伟老师的课……

那么sql如何实现除法的逻辑运算呢?这里可以提供一个比较简单的思路。也欢迎大家多多开发新的方法~

我们可以在目标组中求满足除数组条件的数据数量,与除数组的数量比较,这样就把一组一组数据的比较转化成了数值与数值的比较

这样说比较抽象,我们直接看代码:

select SNo,count(*) from SC 
where CNo in (
  select CNo from TC where TNo in (
    select TNo from T where TN='刘伟'
  )
)
group by SNo having 
count(*)=(
select count(*) from T inner join TC on T.TNo=TC.TNo where TN = '刘伟'
)
复制代码

第二行开始,我们用子查询,从内到外,先在T表查找到了刘伟的编号TNo,这样我们就可以在第二层利用这个TNo从TC授课表中找到刘伟的课程号。

明确了刘伟的课程号,我们就可以在SC表中统计每个学生选了刘伟老师课的数目了。group by加count函数可以顺利解决。

最后在having子句中比较刘伟的课程数和统计出来的学生选课数,筛选出来的就是目标数据了~


4.2.查询“李思”同学未选修的课程号和课程名


这里比上一题好一些,试试自己解决

select CNo,CN from C where (
  CNo not in (
    select CNo from SC where (
      SNo in (
        select SNo from S where (
          SN='李思'
        )
      )
                )
        )
)



相关文章
|
13天前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
24天前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
80 10
|
18天前
|
SQL 关系型数据库 MySQL
|
2月前
|
SQL 数据库 开发者
功能发布-自定义SQL查询
本期主要为大家介绍ClkLog九月上线的新功能-自定义SQL查询。
|
9天前
|
SQL 缓存 监控
SQL性能提升指南:五大优化策略与十个实战案例
在数据库性能优化的世界里,SQL优化是提升查询效率的关键。一个高效的SQL查询可以显著减少数据库的负载,提高应用响应速度,甚至影响整个系统的稳定性和扩展性。本文将介绍SQL优化的五大步骤,并结合十个实战案例,为你提供一份详尽的性能提升指南。
26 0
|
28天前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
31 0
|
存储 SQL 关系型数据库
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 12 章 全文搜索_12.9. GIN 和 GiST 索引类型
12.9. GIN 和 GiST 索引类型 有两种索引可以被用来加速全文搜索。注意全文搜索并非一定需要索引,但是在一个定期会被搜索的列上,通常需要有一个索引。 CREATE INDEX name ON table USING GIN(column); 创建一个基于 GIN(通用倒排索引)的索引。
1626 0
|
SQL 关系型数据库 PostgreSQL
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 11 章 索引_11.2. 索引类型
11.2. 索引类型 PostgreSQL提供了多种索引类型: B-tree、Hash、GiST、SP-GiST 、GIN 和 BRIN。每一种索引类型使用了 一种不同的算法来适应不同类型的查询。
1385 0
|
SQL 关系型数据库 PostgreSQL
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 8 章 数据类型_8.18. 对象标识符类型
8.18. 对象标识符类型 对象标识符(OID)被PostgreSQL用来在内部作为多个系统表的主键。OID不会被添加到用户创建的表中,除非在创建表时指定了WITH OIDS或者default_with_oids配置变量被启用。
1329 0
|
SQL 关系型数据库 PostgreSQL
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 8 章 数据类型_8.17. 范围类型
8.17. 范围类型 8.17.1. 内建范围类型 8.17.2. 例子 8.17.3. 包含和排除边界 8.17.4. 无限(无界)范围 8.17.5. 范围输入/输出 8.17.6. 构造范围 8.17.7. 离散范围类型 8.17.8. 定义新的范围类型 8.17.9. 索引 8.17.10. 范围上的约束 范围类型是表达某种元素类型(称为范围的subtype)的一个值的范围的数据类型。
1085 0
下一篇
无影云桌面