练习一、视图
视图存放的是sql查询语句,使用视图时,会运行视图里的sql查询语句,创建出一张临时表。
如何创建视图?创建视图的步骤如下:
1、创建视图的sql语气:create view
as <select
举例如下:
2、运行视图:只要在from子句中使用视图名称代替表名称就可以
3、视图的删除:
右键选中-删除即可
4、使用视图的注意事项:
(1)避免在视图中再插入视图,因为这样会降低sql的使用及效率,
(2)不能往视图里插入数据,因为视图存放的是sql语句,它并不是数据表,且它的结果会跟着原数据表的数据改动而变化。
练习二、子查询
(1)子查询是一次性的视图,就是在SQL查询子句中直接写定义视图的sql查询语句,也就是在一个SQL的查询子句中再嵌套另一个SQL查询语句。例如练习一的视图语句可以写成如下:
这是一个临时表,在SQL运行结束后,它就就会消失。它的运行顺序是先运行子查询,得到一个临时表,再从得到的这个临时表查询出我们想要的结果。
(2)子查询的一些语句:...in(子查询)、...any(子查询)、...all(子查询),这些子查询一般与where 搭配使用。
any 与some 的用法是一样的,如果工作中遇到some,就把它等同于any来使用
(3)all子查询的注意事项:
避免层层嵌套子查询,这样会给系统造成负担,不利于维护数据,也不要省略子查询语句后面那个as 后的别名,这样会给别人看数据时不太好理解。
(4)sql的运行顺序:
练习三、标量子查询
(1)、标量子查询是必须且只能返回一行一列的查询结果,即标量子查询只能返回一个单一的值。
练习四、关联子查询
(1)子查询中含有关联条件的子查询又叫关联子查询:
上图不知道何缘故报错,我又重新删了所有语句重写,这次能运行出来了,如下:
(2)子查询的作用:
子查询好比我们平时的用车情况,假设我们只是偶尔需要用车的话,那我们可以直接写一个子查询,一次性查出我们想要的结果就可以,但是如果我们经常需要用车,这样的情况下我们把子查询保存为视图就很方便了。避免每次查询都写一大推SQL语句,节省时间。
(3)如何看懂sql的报错信息:
当我们的SQL运行报错的时候,我们可以逐一进行排查,首先先选子查询语句然后运行,看看是否是子查询语句有误,子查询语句能运行通过后再运行子查询外面的SQL语句。
练习五、各种函数
练习六、SQLZOO练习的答案
本题知识点:因为是找人口多于加拿大,但是比波兰的少,所以是查找范围值,查找范围需要用到运算符between,因为between是包含边界值的,但是我们题目不包含边界值,所以在加拿大的值上我们需要加1,而在波兰的值上我们需要减1。例如公式:1=<x>=10,为了使我们求出的x值不包含1跟10 ,这个公式我们需要写成:1+1<=X>=(10-1)
知识点:本题需要用到标量子查询、字符串连接函数concat、保留小数位数的函数round。结合上图例子去分析每个函数的用法。上图题目其实就是求欧洲每个国家的人口占德国人口的百分比。
知识点:all 的用法、子查询、gdp>0去掉空值
本题知识点:all的用法、关联子查询。在关联子查询中:x.name<>y.name意思是因为在同洲中自身是无法跟自身进行比较的,所以把自身的值排除掉。
总结:SQL解决业务问题的顺序及思路:
1、先把题目翻译成大白话,即翻译成自己能理解的语句。
2、写出解决问题的分析思路
3、写出对应的SQL子句