无声specialweek

数据库day04

视图 view

概述

本质上就是缓存了 查询结果,作为一个体现

提高查询效率,缓存查询结果

优点:提高查询效率

缺点:占用内存,无法进行SQL优化,当更新视图时也需要时间更新表

# 创建试图
# creat view 视图名 as Sql 语句
CREATE VIEW empview AS 
SELECT * from emp WHERE ename LIKE '%a%';
#使用试图
SELECT * from empview;

多表联查

概念:

  • 表table代表了生活中一个主体,如部门表dept,员工表emp。表关联则代表了表之间的关系,如:部门和员工,商品和商品分类,老师和学生,教室和学生。

笛卡尔积

​ 指两个及以上的表的查询

一般笛卡尔积没有实际的业务意义,但多表查询都是先生成笛卡尔积,再进行数据的筛选过滤

#多表联查1:笛卡尔积
SELECT * FROM dept, emp;#不建议使用
SELECT * FROM dept, emp WHERE dept.deptno = emp.deptno;
#多表联查2:表连接 join 
SELECT * FROM dept JOIN emp;
SELECT * FROM dept JOIN emp WHERE dept.deptno = emp.deptno;
#标准的写法用 ON
SELECT * FROM dept JOIN emp ON dept.deptno = emp.deptno;#明确表名

SELECT * FROM dept JOIN emp ON dept.deptno = emp.deptno AND dept.deptno = 1;
#起别名 简化sql
SELECT * FROM dept d JOIN emp e ON d.deptno = e.deptno AND d.deptno = 1;
# 笛卡尔积 要用where 限定条件 不能用 on
SELECT ename FROM dept, emp WHERE dept.deptno = emp.deptno AND dept.deptno = 1;

SELECT loc FROM dept d, emp e WHERE 
d.deptno = e.deptno AND 
e.ename = 'tony';

SELECT e.* from dept d, emp e WHERE d.deptno = e.deptno AND d.dname = 'accounting';

SELECT loc, avg(e.sal) FROM dept d, emp e where d.deptno = e.deptno AND 
loc = '二区';

三种链接 join (inner join)

  • 内连接 inner join

    • INNER JOIN两边都对应有记录的才展示,其他去掉
  • 左外)外连接 left join

    • LEFT JOIN左边表中的数据都出现,右边没有数据以NULL填充
  • 右外)外连接 right join

    • 右边表中的数据都出现,左边没有数据以NULL填充
    SELECT * from dept inner join emp 
    ON dept.deptno = emp.deptno
    WHERE dept.loc = '二区';
    
    SELECT * from dept LEFT JOIN emp 
    ON dept.deptno = emp.deptno
    WHERE dept.loc = '二区';
    
    SELECT * from dept RIGHT JOIN emp 
    ON dept.deptno = emp.deptno
    WHERE dept.loc = '二区';
    
    select e.* from dept d, emp e 
    where  d.deptno = e. deptno 
    AND d.dname = 'research';
    
    select e.* from dept d JOIN emp e 
    ON  d.deptno = e. deptno 
    WHERE d.dname = 'research';
    

子查询

SELECT * from emp 
where deptno=(SELECT deptno from dept 
where dname = 'research');


select d.* from dept d join emp e
on d.deptno = e.deptno
WHERE e.ename = 'tony';

SELECT ename from emp where deptno in (SELECT deptno from dept WHERE loc = '二区');

SELECT emp.ename from dept join emp 
on dept.deptno = emp.deptno
WHERE dept.loc = '二区';

SELECT ename from emp 
WHERE sal > (SELECT avg(sal) from emp) #where泵油聚合函数
and job = '员工';

Oracle

和Mysql一阿姨那个可以存储管理数据,收费

安装

服务器端:简版 的软件

客户端:PLSQL,连接服务器,操作服务器里的数据

使用

MySql:数据库-表-字段/记录

Oracle: 用户-表-字段/记录

创建用户

posted on 2021-07-01 20:09  无声specialweek  阅读(56)  评论(0)    收藏  举报

导航