sql 查询列名转化_SQL复杂查询

本文介绍了SQL查询中的视图、子查询和关联子查询的使用方法。视图可以保存频繁使用的SQL语句,提高效率,但不能用于插入数据。子查询包括in、any、all等操作,适用于不同场景。关联子查询则用于在每个组内进行比较。理解这些概念有助于解决复杂的业务问题。

目录:

1.视图

2.子查询

3.标量子查询

4.关联子查询

5.如何用sql解决业务问题

6.各种函数

如何学习:

1.是什么?2.如何用?3.有什么用?4.注意事项

一.视图

视图中存放的是sql查询语句,在使用视图时会运行sql语句,产生一张临时表,当客户端与数据库的链接断开之后,这个临时表就会自动删除

如何创建视图?

create view 视图名称(视图列名1,视图列名2,...)

as

select 查询语句;

9f0874d08c1bff508803d48fc60ce5d7.png

以后想使用视图的时候,直接在from后面加上视图名称就可以了,并且原表更新数据后,视图也会更新数据。

使用视图的好处:

1.频繁使用的sql语句可以保存为视图,提高效率

2.数据会自动更新,保证数据的最新状态

3.不需要保存数据,节省存放数据的空间

注意事项:

1.避免在视图基础上再创建视图,会降低运行效率

2.不能往视图里插入数据

3a834b546bc555565bc8871e87d85503.png

47a571916a952fbdb58547a34094b322.png

二.子查询

筛选条件从数据表中来,比如成绩大于平均成绩,需要用到子查询;

9f269e2289c759c77d20928c8dd47b0c.png

1——子查询语句,就是select语句

2——子查询的名称(每个派生表都需要有别名,所以2是必须的)

子查询可以在where语句中使用:

in(子查询)

any(子查询)

all(子查询)

in(子查询)

bb211d8ed76e45f46105ee1054fb6e57.png

分析思路:

First.每个课程成绩最低是内部条件,所以先写成子查询语句

select 课程号,min(成绩) from score group by 课程号;

0d965dbd88227a1a24d64ad28a750371.png

Second.以这个临时表中的最低成绩为in的范围,查询学号

select 学号, 成绩from score where 成绩 in (select min(成绩) from score group by 课程号);

2a84a54c823b1e1c382dc36d6fb5e095.png

any(子查询)

需要与比较运算符一同使用; any=some;

ecb39340c67b90e1fe4e10d2231a1e87.png

例子:

9d28408e2fec18868b227b3edd173686.png

4cf5eebfb2d992c23b9f6337787c85c3.png

All(子查询)

0194f04913cfdd889b0c9da35c8229a0.png

总结:

偶尔使用,就运用子查询

频繁使用,就保存成视图

子查询注意事项:

1.加减乘除放前面 2.层层嵌套要避免 3.子查询别名勿省略

76c9113cc963b48e5639c5d6e187fe19.png

SQL运行顺序:

c83c6d291a3536131b4ec70b6332db66.png

标量子查询

必须返回一行一列的结果(单一的值)称为标量子查询

大于平均成绩学生的学号和成绩

错误:select 学号,成绩 from score where 成绩>avg(成绩) ×

正确:select 学号,成绩 from score where 成绩>(select avg(成绩) from score); √

f4d072756fdbed09deef92e64e8d9593.png

7fd7b5ef48bfc69ddd1606e069f830ac.png

标量子查询的返回值是单一值,所以可以和比较运算符一起使用

bc5a3c446268c8bda74e1b5ddd388d8b.png

标量子查询在列名中使用,每一行都会返回结果

29b5c578c3b06b9b506380e92a877489.png

关联子查询

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

2125e5e0527c9664f501ff2b93188214.png

一行一行对应得查:

cfc4d50a65b9d52f8fcdf2c61a2fd845.png

关联要写在子查询里面:

db46d0d72cceab95cbb0edb5f168c6de.png

子查询,标量子查询,关联子查询,视图的三者适用范围:

偶尔使用需要多行数据——子查询

偶尔使用需要单一值——标量子查询

偶尔使用需要在每个组里进行比较——关联子查询

经常使用——视图

如何用SQL解决业务问题

1.翻译成大白话

2.写出分析思路

3.写出对应的sql子句

函数

1.汇总函数

count(列名) 求某列的行数,count(*)

sum(列名) 对某列数据求和,只能对数值类型的列计算

avg(列名) 求某列数据的平均值,只能对数值类型的列计算

max(列名) 求某列数据的最大值

min(列名) 求某列数据的最小值

2.算数函数

round(数值,保留小数的位数) round(6666.66,1) 结果6666.6 round(6666.66,-1) 结果6670

abs(数值) abs(-100) 结果 100

mod(被除数,除数) mod(5,2)结果1

3.字符串函数

053eaa4fda8091b4dcc85d0716c8c4fa.png

4.日期函数

d9920464d57943dcddf97ebe5b985641.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值