视图

表存实际数据,视图存的是SQL查询语句,临时表

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

as

select 列名,列名

视图和select的列名可以不一样,但是是一一对应的




sqlite3返回值 sql查询返回值_标量


sqlite3返回值 sql查询返回值_select子查询返回 值_02


使用视图

select 性别,人数------是view里面的列名

from 按性别汇总;

作用

1提高效率

2代码从原表中取数据,自动更新

3节约空间

注意事项

1 不能视图中加视图

2 不能往视图里插入数据

子查询

SQL运行顺序:先运行子查询

in

可能会用到后面的内容


sqlite3返回值 sql查询返回值_select子查询返回 值_03


any(子查询)与some(子查询)一样的


sqlite3返回值 sql查询返回值_sqlite3返回值_04


all


sqlite3返回值 sql查询返回值_子查询_05


注意:

all函数得到是一个集合,不是数字

a>3*all(b) 错误

a/3>all(b) 正确

2.避免嵌套多层子查询

3. select...from...

子查询 as 子查询名称(不要省略)

小结:sql运行顺序

1.先运行子查询

2.每个查询语句里运行顺序

1)先运行from... where...group by...having...

2)select 子句

3)最后运行红框里的子句

标量子查询

where函数中,不能用汇总函数,只能通过标量子查询(可能有多个值),但返回一个值做对比

select 子句中也可用标量子查询,都是返回一个值

标量子查询因为返回一个值,可以用比较运算符(between,any,in,all)

练习:实战练习


sqlite3返回值 sql查询返回值_select子查询返回 值_06


from后是一张表

where后的子查询是一个确定的数据或值,不是一张表(只能是标量子查询)

select后的嵌套子查询也是返回确定的一个值,而不是多个值(只能是标量子查询)

关联子查询

当需要在组内比较时,用关联子查询

子查询里的关联条件,例如

where s1.课程号=s2.课程号,意思是以子查询里面筛出的课程号对应的值,来在外查询里面对应的课程号作为比较识别。按课程号分组比较


sqlite3返回值 sql查询返回值_sqlite3返回值_07


sqlite3返回值 sql查询返回值_sqlite3返回值_08


sqlite3返回值 sql查询返回值_select子查询返回 值_09


如何用SQL解决业务问题

1翻译成大白话 2写出分析思路 3写出对应的sql子句

报错信息?

逐一排查,先子查询运行

SQLZOO练习


sqlite3返回值 sql查询返回值_select子查询返回 值_10