mysql 视图查询_MySQL视图复杂查询详解

内容大纲:什么是视图查询

子查询

标量子查询

关联子查询

如何用SQL解决业务问题

各种函数

总结:知识点图解

视图什么是视图

视图存放的是SQL语句,而数据库表存放的是数据,使用视图时,会运行视图里的SQL的查询语句创建出一张临时表。如何创建视图

第一种方式:create view 视图名称(,……)

as ;

第二种方式:

右键选择创建视图

注意名字不要重复,比如我们保存为:成绩汇总2

以上是两种方式完成视图的创建如何使用使用视图视图有什么用

对于频繁的使用的SQL语句,可以保存视图,尤其SQL语句进行多次汇总,操作,这样可以提高效率

视图可以随源数据表更新而更新

视图不需要占用空间,是一张临时表使用视图注意什么

视图不能增加删除数据,因为他是一张虚拟表,否则会报错

字查询什么是子查询

如图:所谓子查询就是一次性查询,在select语句中嵌套一个个select语句,将字查询的结果作为主查询的数据进行再次查询。如何使用字查询

……in(子查询)

……any(子查询)

……all(子查询)字查询有什么用

主要进行条件判断,筛选数据案例演示

表量子查询什么是标量子查询

标量的子查询返回的单一的一列,单一的值案列演示

关联子查询什么是关联子查询

大致步骤如下:

1:先运行子查询 对每个课程号求平均分

2:由于where条件的存在,当返回第一组数据时,根据课程号匹配所有的课程成绩,符合条件的留下输出

3:最终遍历所有课程组,把符合条件的数据展示出来

如何用SQL子查询解决业务问题

各种函数

练习章节

下面是本章节对应章节的练习题:

列出每個國家的名字name,當中人口population是高於俄羅斯'Russia'的人口。

/*主要考察where子查询*/

select name from world where population > (select population from world where name='Russia')列出歐州每國家的人均GDP,當中人均GDP要高於英國'United Kingdom'的數值。

/* where and 多条件查询*/

select name from world

where continent = 'Europe' and gdp/population >

(select gdp/population

from world

where name='United Kingdom在阿根廷Argentina 及 澳大利亞 Australia所在的洲份中,列出當中的國家名字 name 及洲分 continent 。按國字名字順序排序

/*子查询 in 多行匹配*/

select name, continent from world

where continent in

(select continent

from world

where name='Argentina' or name='Australia')

order by name;哪一個國家的人口比加拿大Canada的多,但比波蘭Poland的少?列出國家名字name和人口population

select name,population from world where

population >(select population from world where name='Canada') and

population

显示歐洲的國家名稱name和每個國家的人口population。以德國的人口的百分比作人口顯示。

小數位數

百分號 %

/*rand(x,d)* x为:四舍五入的数值,d:保留的小数位数 concat(str,str1,str2) 将字符串拼接起来/

select name,concat(round(population*100/(select population from world where name='Germany')),'%')

from world

where continent='Europe'哪些國家的GDP比Europe歐洲的全部國家都要高呢? [只需列出 name 。] (有些國家的記錄中,GDP是NULL,沒有填入資料的。)

/*ALL 对一个列表某行>=或>或

SELECT name

FROM world

WHERE population > ALL(SELECT population

FROM world

WHERE population>0 and continent='Europe')在每一個州中找出最大面積的國家,列出洲份continent, 國家名字name及面積area。 (有些國家的記錄中,AREA是NULL,沒有填入資料的。)

/* 关联子查询

1: SELECT continent, name, population FROM world 找出每个国家人数

2:开始子查询 对每条数据进行匹配,找出最大面积的国家*/

SELECT continent, name, population FROM world x

WHERE area>= ALL

(SELECT area FROM world y

WHERE y.continent=x.continent

AND area>0)列出洲份名稱,和每個洲份中國家名字按子母順序是排首位的國家名。(即每洲只有列一國)

select continent, name

from world as x

where name <= all

(select name

from world as y

where y.continent=x.contine找出洲份,當中全部國家都有少於或等於 25000000 人口. 在這些洲份中,列出國家名字name,continent洲份和population人口。

select name, continent, population

from world as x

where 25000000 >= all

(select population

from world as y

where y.continent=x.continent);有些國家的人口是同洲份的所有其他國的3倍或以上。列出 國家名字name 和 洲份 continent。

select name, continent

from world as x

where population > all

(select 3*population

from world as y

where y.continent=x.continent and x.name <> y.name);

你可能感兴趣的:(mysql,视图查询)