学习笔记 - 0318

数据库

外连接

完全连接

交叉连接 -- 产生的是笛卡尔积

自连接

定义:一张表和自己连接起来查询数据

不准用聚合函数,求薪水最高的员工信息

select * from emp where sal = (select max(sal) from emp)

select * from emp "E1", emp "E2"

联合查询

纵向连接表中的数据,表和表之间的数据以纵向的方式连接在一起

注意:以前讲 的所有的连接是横向的连接在一起

select "E1".ename, "E1".sal, "E2".ename "上司的姓名"
    from emp "E1"
    join emp "E2"
    on "E1".mgr = "E2".empno
union
select ename, sal, '已是老板' from emp where is null

 注意:  若干个select子句要连接在一起,列数要一样,类型也是一样的

 

视图

为什么需要视图

视图就是一个临时表,一个select语句。

求出平均工资最高的部门的编号和部门的平均工资

-- 没有用视图
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"
    )
-- 创建视图
create view v$_emp_1
   as
       select deptno,avg(sal) "avg_sal"
           from emp
           group by deptno
         
 select * from v$_emp_1
--使用视图
select * from v$_emp_1
    where avg_sal = (select max(avg_sal) from v$_emp_1)

使用视图,语句简洁,易懂。 避免书写重复代码。简化查询

 

什么是视图

视图是个select语句

 

视图格式

create view 视图的名字

  as

    -- select的前面不能添加begin

    select语句

    --select的后面不能添加end

 

视图的优点:

  简化查询

  增加数据的保密性

 

视图的缺点:

增加了数据库维护成本,删除 原始表,但并不会删除视图。

视图不会及时更新,会导致出错,需要维护。

视图只是简化了查询,但并不能加快查询速度。这也是视图不足的地方。

 

需要注意的:

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

  create view v$_a

    as

      select avg(sal) from emp;

 

  create view v$_a

    as

      select avg(sal) as "avg_sal" from emp;

视图不是物理表,是个虚拟表

不加建议通过视图更新视图说依附的原始表的数据和结果,因为更新起来,很麻烦,有规则。

 

 

 

 

 

 

 

 

  
 
posted @ 2025-03-17 21:46  同州  阅读(7)  评论(0)    收藏  举报