SQL Server中的视图(view)

目录

零、码仙励志

一、建库和建表

二、视图的用法

1.解释

2.格式

3.注意

4.实例演示

5.优点

6.缺点


零、码仙励志

现在不努力,将来拿什么向曾经抛弃你的人证明它有多瞎

一、建库和建表

create database scort
use scort
create table emp
(
	empno int primary key,
	ename nvarchar(10),
	sal int,
	deptno int
)
insert into emp values (7369,'smith',1800,20);
insert into emp values (7499,'allen',1500,10);
insert into emp values (7521,'ward',1900,30);
insert into emp values (7566,'jones',2000,30);
insert into emp values (7654,'martin',1800,10);
insert into emp values (7698,'blake',1800,30);

二、视图的用法

1.解释

  1. 视图从代码上看是一个select语句

  2. 视图从逻辑上看是一个虚拟表

2.格式

create view 视图的名字
as
    --select的前面不能加begin
    select语句
    --select的后面不能加end

3.注意

创建视图的select语句必须为所有的计算列指定别名

--error
create view via
as
    select AVG(sal) from emp

--ok
create view via
as
    select AVG(sal) "avg_sal" from emp

 

4.实例演示

不使用视图方法

求出平均工资最高的部门的编号和部门的平均工资
思路:
1.求出所有的部门的部门编号和平均工资
select deptno,AVG(sal) "avg_sal"
    from emp
    group by deptno
2.把查询出来的所有的部门的部门编号和平均工资变成一张临时表"T"
select * 
    from (
        select deptno,AVG(sal) "avg_sal"
        from emp
        group by deptno
    )"T"
3.求出最高的部门的平均工资并变成一张临时表"E"
select MAX("E"."avg_sal")
    from (	
        select deptno,AVG(sal) "avg_sal"
        from emp
        group by deptno	
)"E"
4.让"T"的平均工资等于"E"	
select * 
    from (
        select deptno,AVG(sal) "avg_sal"
        from emp
        group by deptno
    )"T"
    where "T"."avg_sal"=(
        select MAX("E"."avg_sal")
            from (	
                select deptno,AVG(sal) "avg_sal"
                from emp
                group by deptno	
        )"E"
    )

使用视图方法

1.创建视图
create view viemp
as
    select deptno,AVG(sal) "avg_sal"
        from emp
        group by deptno
2.查询
select * from viemp
    where avg_sal=(select MAX(avg_sal) from viemp)

5.优点

  1. 简化查询
  2. 增加数据的保密性

6.缺点

  1. 增加了数据库的维护成本
  2. 视图只是简化了查询,但是并不能加快查询的速度

本篇博客来自于郝斌老师视频教程的总结以及笔记的整理,仅供学习交流,切勿用于商业用途,如有侵权,请联系博主删除,博主QQ:194760901 

### Navicat 导入 MySQL 文件失败的原因分析与解决方案 #### 1. 数据库连接配置错误 如果数据库连接设置不正确,可能导致无法成功导入数据。确保主机名、端口、用户名和密码都已正确填写[^1]。 #### 2. SQL语法兼容性问题 不同版本之间的SQL语句可能存在差异,某些特定于旧版MySQL的功能可能不再被支持。建议先通过命令行工具测试单条INSERT语句能否正常执行来排查此类问题[^2]。 #### 3. 字符集编码冲突 字符集设定不当会引发乱码现象或是直接阻止文件加载过程中的解析工作。检查源文件以及目标表结构定义里所使用的charset属性是否一致;必要时可尝试转换成通用格式如UTF8mb4再重试操作[^3]。 #### 4. 权限不足 用户账户权限不够充分也会造成访问受限从而影响到整个流程顺利完成。确认当前登录身份具备足够的权利去创建新对象(表)、修改现有架构乃至向指定位置写入记录等行为[^4]。 #### 5. 超大事务提交超时 当一次性处理大量数据时,默认的最大允许时间可能会过短而触发中断机制。适当调整`max_allowed_packet`参数值可以有效缓解这一状况的发生概率[^5]。 ```sql SET GLOBAL max_allowed_packet=67108864; -- 设置为64M, 单位字节 ``` 对于上述提到的各项因素,在实际解决问题之前应该逐一验证并排除干扰项,最终找到最合适的办法使Navicat能够顺利地完成对MySQL文件的数据迁移任务。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值