sql 视图不排序_SQL之复杂查询

1视图

1.1什么是视图

数据库的表里面存放的是实际数据,视图中存放的是SQL查询语句,当使

用客户端使用视图的时候,会运行视图里的SQL查询语句创建出一张临时表,视图本身不存放数据,只存放SQL查询语句。

1.2如何创建视图

Create view 视图名称(<视图列名1>,<视图列名2>,……)

As

<select 查询语句> (注:查询语句中列的顺序与视图名称后视图列名的顺序要一一对应)

例如:

c3fc923ec584ee30b79c2cb3db3a25ff.png

运行结果:

ca9698b53cc0953004a700c51731d0ce.png

视图定义好后可以直接在SQL语句中使用:

e8738cfa0fa2d822df16d7c69727ef18.png

1.3为什么要使用视图

把需要频繁使用的SQL语句保存成视图,特别是汇总以及复杂查询条件导致SQL查询

语句非常庞大的时候,使用视图可以提高效率;视图中数据可以随源表中的数据变化自动更新,可以保证数据的最新状态;视图不保存数据,可以节省数据的存储设备的空间。

1.4使用视图的注意事项

要避免在视图的基础上再去创建视图,因为多重视图会降低SQL的性能及效率;也不能往视图里插入数据,不然会报错。

2 子查询

2.1 什么是子查询

子查询指的是一次性的视图,即在from子句中直接写定义视图的SQL查询语句(在select语句中嵌套另一个select语句)。

例如:

a9b52447f2c09fde2506b97053cd6742.png

2.2 子查询也可以放入where子句中,与运算符一起使用:

---in(子查询)

---any(子查询)

----all(子查询)

2.2.1 找出每个课程里成绩最低的学号

第1步:查找出每门课程的最低成绩

4cef3cc703f45001cd6d90dfa6ebf6d1.png

第2步:在成绩表里查找出这些值对应的学号

c71d9a4d3221336563050166d3170d23.png

最终SQL语句:

5afbed79071d537ac0f8f597de50f62c.png

2.2.2 哪些学生的成绩比课程002的全部成绩里任意一个高?

第1步:查找出课程号002的全部成绩。

第2步:某个学生的成绩大于任何一个第1步里的成绩。

运行结果:

495d1773daa5d76c7ef9560ee8156d4f.png

2.2.3 使用子查询的注意事项

(1)在SQL里,all得到的是一个集合,是n行数据,如果两个数字比较,不能写成

a>3*all (b),只能写成a/3>all (b)。

(2)避免使用多层嵌套子查询,会降低SQL性能。

  1. 子查询的as关键字和子查询的名称可以省略,但是尽量不要省略。
    1. 子查询运行顺序

2.3.1先运行子查询

2.3.2 每个查询语句里的运行顺序:

  1. 先运行蓝框里的子句
  2. 然后运行SELECT子句
  3. 最后运行红框里的子句

d6ccffed3d682fdba9f244ac2981fe27.png

3 标量子查询

标量子查询:必须而且只能返回一行一列的查询结果,即是单一的值。标量子查询可以和比较运算符一起使用。

3.1 查询出大于平均成绩的学生的学号和成绩

c2a598389137ea9bb99122411b1c73ee.png

3.2 成绩介于差生平均成绩和优等生平均成绩之间的学生学号和成绩

5732906ee0b7b76eb2c99cb7475b03e2.png

3.3 标量子查询的作用

标量子查询可以和比较运算符以及in,any,all.between一起使用,进行复杂查询。

使用标量子查询的时候需要注意,标量子查询不能返回多行的结果。

  1. 关联子查询

查找出每个课程中大于对应课程平均成绩的学生:

672b9fe0fbe84d851e8d977f1bd1578e.png

当每个组里比较的时候可以使用关联子查询。

  1. 运用SQL解决业务问题的实际运用

如何用SQL解决业务问题:

翻译成大白话→写出分析思路→写出对应的SQL子句

分析思路:

Select查询结果

From【从哪个表里查询】

Where 查询条件

Group by 分组【按什么条件分组】

Having 对分组结果指定条件

Order by 对查询结果排序

Limit 从查询结果中取出指定行

6函数

6.1汇总函数

b360c97fb7a274027272c881682cf96c.png

6.2算术函数

7f77c16c0b8f9381875836bf07f72171.png

6.3字符串函数

2ff18aa7101398f3a0e08b8c547626d8.png

6.4日期函数

ccfaf2933dc547a0ea03b53c70427a51.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值