thunder_sword's blog thunder_sword's blog
来看漫画丫~
首页
分类
标签
归档
GitHub

thunder-sword

网安界的小菜鸡
来看漫画丫~
首页
分类
标签
归档
GitHub
  • 1数据库系统概述

  • 2数据模型

  • 3数据库系统结构

  • sql语法标准

    • 1数据定义语句
    • SQL概述
    • 更新数据语句
    • 查询语句
      • 格式
      • 三张表
      • 常用的查询条件
      • 通配符%和_
      • order by排序子句
      • 常用聚集函数
      • group by细化对象子句
        • 条件判断用having
      • 常用谓词
      • in
      • 比较运算符(\>,)
      • any,all
      • exists
      • 存在量词
      • 全称量词
      • 1.选择列
      • 2.选择元组
      • 执行过程:
        • 嵌套循环法
        • 排序合并法
        • 索引连接法
      • 0.注意要点
      • 1.简单连接
        • 1-2.自然连接
      • 2.自身连接
      • 3.外连接
      • 4.多表连接
      • 0.嵌套查询谓词
      • 1.不相关子查询
      • 2.相关子查询
      • 1.union并操作
      • 2.intersect交操作
      • 3.except差操作
    • 视图的定义和应用
  • 关系数据库基础

  • 数据库安全

  • 数据库设计

  • 设计与应用开发篇

  • 数据库
  • sql语法标准
thunder-sword
2021-06-13

查询语句

# 0x0.总览

image-20210412144135498

# 格式

image-20210331132010190

image-20210407113520886

image-20210412144152345

  • all/distinct:全保留/去除重复项
  • having:子组时使用,代替where
  • asc/desc:排序时升序或降序,不选择默认为升序。

# 三张表

下面例子用的三张表,用于例子演示:

image-20210407105443147

image-20210407105452608

image-20210407105504831

# 常用的查询条件

image-20210331132326254

==注意:between and一般是闭区间,即包含边界值的。==(实际使用中不同数据库可能不一样。)

逻辑顺序:

image-20210331132928566

# 通配符%和_

%代表任意字符串,任意长度,包括0,类似正则中(*)

_代表一个未知字符串,无类似

image-20210331132454031

如果带查询的字符串中有通配符,可以用\和ESCAPE关键字,如下:

image-20210331132810441

# order by排序子句

image-20210331133027807

例子:

image-20210331133040870

# 常用聚集函数

image-20210331133111073

例子:

image-20210331133124361

# group by细化对象子句

image-20210331133234983

例子:

image-20210331133301616

# 条件判断用having

分为组的时候用having限定条件,而不是where,如下:

image-20210331133337994

image-20210331133424972

这里需要理解,having的作用对象是一个“组”,相当于一个小型的表,所以having可以使用如max,min等函数,而where却不可以。

# 常用谓词

  • # in

判断结果是否在一个集合中,常用于不相关子查询的嵌套查询。

  • # 比较运算符(>,<,=,>=,<=,!=或<>)

当验证的子集为母集单元素时,in谓词可以用=号替换。

  • # any,all

子查询返回单值时可以用比较运算符;

返回多值时要用ANY或ALL谓词修饰;

于此同时,必须使用比较运算符;

image-20210407102748161

例子:

image-20210407102856725image-20210407102908534

可以用聚集函数实现,如果有索引,这个方法自然更快:

image-20210407102947340

image-20210407103024146

  • # exists

# 存在量词

这是sql中的存在量词,而sql中不存在全称量词。

image-20210407103049096

例子:

image-20210407104408362

# 全称量词

因为没有全称量词,所以用not exists双重否定就可以表示全程量词的逻辑,此时,利用了相关子查询:

image-20210407104925964

利用exists/not exists实现逻辑蕴函:

image-20210407105747680

image-20210407110348422image-20210407110357020

image-20210407110404777

# 0x1.单表查询

# 1.选择列

image-20210331132038010

image-20210331132050744

image-20210331132109316

image-20210331132153426

# 2.选择元组

image-20210331132235889

image-20210331132245920

image-20210331132414482

image-20210331132421071

image-20210331132428859

image-20210331132439297image-20210331132454031

image-20210331132810441

涉及空值的查询:

image-20210331132858217

# 0x2.连接查询

image-20210331133537969

  • # 执行过程:

  1. # 嵌套循环法

image-20210331133559552

  1. # 排序合并法

效率比前者高,需要查询次数够多。

image-20210331133637822image-20210331133656825

  1. # 索引连接法

image-20210331133825785

# 0.注意要点

  • 当在查询否定意义的数据时,使用连接很有可能多出一些查询结果,而不如嵌套查询清楚正确,此时最好使用嵌套查询,不然就仔细检测逻辑。

# 1.简单连接

简单连接两者没啥好说,就是会有重复的列:

image-20210331133957283image-20210331134003341

# 1-2.自然连接

这个自然连接居然是手动的,好家伙:

image-20210331134040800

# 2.自身连接

自身连接必须使用别名,别忘了。

image-20210331134207374

image-20210331134223215

# 3.外连接

image-20210331134254239image-20210331134306679

image-20210331134338445

image-20210331134418265

# 4.多表连接

image-20210331134438245

# 0x3.嵌套查询

嵌套查询和连接查询一般可以互换,但是一般是嵌套查询效率更高。

image-20210331134528334

image-20210331134548974

例子:

image-20210331134538045

# 0.嵌套查询谓词

查询谓词

嵌套查询经常用到查询谓词,所以要熟练。

另外,利用exists/not exists谓词实现逻辑蕴函是难点,要着重理解。exists谓词讲解

# 1.不相关子查询

image-20210331134625815

例子,用到了谓词in:

image-20210331134709260image-20210331134716232image-20210331134724705

# 2.相关子查询

image-20210331134639934

例子,用到了比较运算符:

image-20210331134805148

可能的执行过程:

image-20210331134815716image-20210331134833345

# 0x4.集合查询

注意使用集合查询时列数必须相同,数据类型也必须相同!

image-20210407111638364

# 1.union并操作

image-20210407111806490

可以用or或者and代替,效率更高:

image-20210407112013496

# 2.intersect交操作

image-20210407112330043

可以用or或者and代替,效率更高:

image-20210407112420261

# 3.except差操作

image-20210407112547929

可以用or或者and代替,效率更高:

image-20210407112750315

# 0x5.基于派生表的查询

派生表就是根据查询需求临时构建一张表来进行查询,一般来说,效率可能更高。

即在from后直接创建一张表,创建的这张表用as来起名字表名(属性名1,属性名2...):

image-20210407112859507

image-20210407113102802

更新数据语句
视图的定义和应用

← 更新数据语句 视图的定义和应用→

最近更新
01
计算机系统的硬件结构
10-12
02
计算机系统概论
10-12
03
进程
10-12
更多文章>
Theme by Vdoing | Copyright © 2019-2021 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×