数据库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) 收藏 举报