视图

视图:在数据库中,表存放的是数据,而视图存放的是SQL查询语句。使用视图时,会运行视图里的SQL查询语句,创建出一张临时表,用以辅助复杂查询。

视图的好处:

1、某个SQL查询语句需要频繁使用时,保存成视图以便提高效率;

2、视图中的数据可以根据原表数据的更新而变化;

3、视图不需要保存数据,可以节省数据库的空间。

注意事项:

1、避免在视图的基础上再创建视图,如此多重视图会降低SQL的性能和效率;

2、不能往视图里插入数据,不然会报错。




sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串截取


如何创建视图:

create view 视图名称(<视图列名1>,<视图列名2>······)

as

<select查询语句>;


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串替换_02


-- 创建视图

create view 按性别汇总(性别,人数)

as

select 性别,count(*)

from student

group by 性别;


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 余数函数_03


子查询

子查询:在select查询语句中,嵌套了另一个select查询语句,即在from子句或where子句中直接写定义视图的SQL查询语句,以满足外层select查询语句的需求。

-- 括号内的select查询语句为定义视图的SQL查询语句,即子查询

select 性别,人数

from (select 性别,count(*) as 人数

from student

group by 性别

)as 按性别汇总;


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串替换_04


子查询亦可以放在where子句中,结合in、any、all一起使用,从而构建复杂的查询条件,

使用方法如下:

in(子查询)

any(子查询)

all(子查询)

PS:where子句不能使用汇总函数。

-- 第一步:查找出每门课程的最低成绩有哪些值

select 课程号,min(成绩)

from score

group by 课程号;


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串截取_05


-- 第二步:在成绩表里查找出这些值对应的学号

select 学号,成绩

from score

where 成绩 in (80,60,80);


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 余数_06


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 余数函数_07


-- 最终SQL

select 学号,成绩

from score

where 成绩 in (

select min(成绩)

from score

group by 课程号

);


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串截取_08


any、some、all的子查询必须与一个比较运算符搭配使用,any(子查询)与some(子查询)功能用法相同;

select 列名1

from 表名1

where 列名1 > any(子查询)


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串截取_09


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串截取_10


select 学号,成绩

from score

where 成绩 > any(

select 成绩

from score

where 课程号 = '0002'

);


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 余数函数_11


select 学号,成绩

from score

where 成绩 > all(

select 成绩

from score

where 课程号 = '0002'

);


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串替换_12


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 余数_13


注意事项:

1、子查询all(b)表示的是临时表,不能参与四则运算;

2、禁止子查询层层嵌套,如此会导致SQL查询语句变得很难看懂,运算量也比较大;

3、养成编写“as 子查询名称”的习惯,方便后期的SQL查询语句维护。


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串转日期时间_14


标量子查询

标量子查询:如果返回的是单一值,可以使用标量子查询,且可以直接使用到比较运算符当中,标量子查询不能返回多行结果。


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 余数_15


select 学号,成绩

from score

where 成绩 > (

select avg(成绩)

from score

);


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串替换_16


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串截取_17


select 学号,成绩

from score

where 成绩 between

(select avg(成绩)

from score

where 成绩 <= 60) and

(select avg(成绩)

from score

where 成绩 >= 80);


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 余数函数_18


标量子查询还可以在select子句中使用;


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 余数函数_19


select 学号,成绩,(select avg(成绩) from score) as 平均成绩

from score;


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串转日期时间_20


关联子查询

当需要在每个组里进行比较时,此时可以用关联子查询;


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 余数_21


关联条件起到关键作用,且一定要写在子查询里;


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串替换_22


基于关联条件来运行子查询,返回同一课程号的平均成绩,再与成绩表中对应课程号的成绩逐行进行比较,满足外层的运行条件则返回输出,不满足则进行下一行的比较。


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串截取_23


由于S2仅在子查询里有效,即S1看不到S2的存在,但S2能够看到S1的存在,所以确保了成绩只能与子查询当中同一课程号的平均成绩作比较,即在每个组里进行比较。(S1、S2分别子查询内外的表别名)


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串替换_24


select 学号,课程号,成绩

from score as s1

where 成绩 > (select avg(成绩)

from score as s2

where s1.课程号=s2.课程号

group by 课程号

);


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 余数函数_25


在什么情况下,使用视图或子查询更合适呢?

如果某个SQL查询语句在工作流过程中,需要频繁使用,创建视图保存使用;如果只是一次性的偶尔使用,以子查询的方式使用即可。


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 余数_26


如何用SQL解决业务问题


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串转日期时间_27


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 余数函数_28


如何看懂SQL报错信息?

排除法:先单独运行子查询的SQL查询语句是否有问题,没问题的话,再排查外层SQL查询语句的问题,检查标点符号是否为英文格式······


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串截取_29


各种函数

算术函数:

对数据进行四舍五入:round(数值,保留小数的位数)

绝对值:abs(数值)

求余数:mod(被除数,除数)


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 字符串替换_30


字符串函数:

字符串长度:length(字符串)

大写转换为小写:(字符串)

小写转换为大写:(字符串)

字符串拼接:(字符串1,字符串2)

字符串替换:(字符串,被替换的字符串,用什么字符串替换)

字符串截取:(字符串,截取的起始位置,截取长度)


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 余数_31


日期函数:

当前日期:current_date

当前时间:current_time

当前日期和时间:current_timestamp

获取日期的年份月份日期:year(日期)、month(日期)、day(日期)

日期对应星期几:dayname(日期)


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 余数函数_32


总结


sql server 查询视图的创建时间 修改时间 sql视图怎么查询数据_sql 余数_33