title : 每日深耕,勤练不缀之sql子查询

本文应用sql数据均从github上下载
需要的小伙伴自取https://github.com/cystanford/sql_nba_data.git

虚拟表,本身是不具备数据的
只是为了体现安全性,封装性,以及权限性

下面是一个图,很好的诠释了这个关系

sql server 怎麼查看視圖 sql如何查看视图信息_mysql

帮助我们使用表的一部分,另一方面也可以针对不同的用户制定不同的查询视图。

视图作为一张虚拟表,帮我们封装了底层和数据表的接口。它相当于一张表或者多张表的数据结果集,编写视图后,我们可以不断重用他,这个和JAVA的接口很像

创建视图
CREATE VIEW

CREATE VIEW view_name AS
SELECT column1, column2
FROM table
WHERE condition

只是添加了一句而已,就可以将查询语句封装

我们以NBA球员为例
我们要查询比NBA球员平均身高高的球员有哪些?并显示他们的球员ID和身高。我们给这个视图起名字player_above _avg_height

CREATE VIEW player_above_avg_height AS
SELECT player_id,height
FROM player
WHERE height>(SELECT AVG(height) FROM player)

我们在navicat里创建了视图
然后我们再查询视图,得到的是同样的结果

接下来嵌套视图

CREATE VIEW player_above_above_avg_height AS
SELECT player_id,height
FROM player
WHERE height>(SELECT avg(height) FROM player_above_avg_height)

修改视图
ALTER VIEW
比如我们想更新视图player_above_avg_height

ALTER VIEW player_above_avg_height AS
SELECT player_id, player_name, height
FROM player
WHERE height > (SELECT AVG(height) from player)

删除视图

DROP VIEW view_name

利用视图完成复杂的连接

我们对player表和height_grades表进行连接,关联条件是球员的身高(在身高等级表中),然后把取得的查询结果放到视图player_height_grades

CREATE VIEW player_height_grades AS
SELECT a.height, a.player_id,a.player_name,b.height_level
FROM player AS a JOIN height_grades AS b
ON a.height BETWEEN b.height_lowest AND b.height_highest

采用ON连接,毫无疑问

而我们接下来用视图查询更简单、、

利用视图对数据进行格式化

CREATE VIEW player_team AS
SELECT CONCAT(player_name,'(',team.team_name,')') AS player_team
FROM player

正确的使用视图可以帮我们简化复杂的数据处理
我们以球员比赛成绩表为例
对应的是player_score表,这张表中一共19个字段,我们可以通过视图将其分析
比如:我们想要每个球员在每场比赛这种的二分球,三分球和罚球的得分

CREATE  VIEW game_player_score AS
SELECT game_id,player_id,(shoot_hits-shoot_3_hits)*2 AS shoot_2_points,
shoot_3_hits *3 AS shoot_3_points,
shoot_p_hits AS shoot_p_points,score
FROM player_score

sql server 怎麼查看視圖 sql如何查看视图信息_数据_02

一个视图其实是SELECT语句的集合,执行时会提前编译好,可以反复使用。在底层执行顺序的时候和SELECT语句是一样:
1、FROM子句组装数据
2、WHERE子句进行条件筛选
3、GROUP BY分组
4、使用聚集函数进行计算;
5、HAVING筛选分组;
6、计算所有的表达式;
7、SELECT 的字段;
8、ORDER BY排序
9、LIMIT筛选