数据库笔记-SQLday05

数据库day05


--视图:
--视图(VIEW)也被称作虚表,即虚拟的表,是一组数据的逻辑表示,其本质是对应于一条SELECT语句,结果集被赋予一个名字,即视图名字
--视图也是数据库对象,视图在SQL语句中体现的样子是表的样子,但是其并不是一张真实存在的表,
--而是一个查询语句的结果集。使用视图通常是为了重用子查询。


CREATE VIEW v_emp_wensq
AS
SELECT empno,ename,sal,deptno
FROM emp_wensq
WHERE deptno = 10;


--视图中对应的SELECT子句中的字段可以使用别名,这样视图对应的该字段的字段名就是别名了。
--当SELECT中的字段是函数或者表达式,那么视图要求该字段必须给别名!


CREATE OR REPLACE VIEW v_emp_wensq
AS
SELECT empno id,ename name,sal salary,deptno
FROM emp_wensq
WHERE deptno = 10;


--对视图进行DML操作,就是对视图数据来源的基表进行的。
--向视图插入数据:
--DML只能对简单视图进行,复杂视图不允许进行DML操作。
--向视图插入数据:
INSERT INTO v_emp_wensq
(id, name,salary,deptno)
VALUES
(1001,'JACK',5000,10)


INSERT INTO v_emp_wensq
(id, name,salary,deptno)
VALUES
(1001,'ROSE',5000,20)


--上面的SQL是向视图插入了一条视图,看不到的数据到基表中,这种通过视图插入但视图不可控的数据的操作是对基表的"污染"
--UPDATE语句也通常存在在该问题,因为修改视图上的数据就是修改基表的该数据,所以,有可能修改后的数据视图不在对齐可见。
UPDATE v_emp_wensq
SET name='JACKSON'
WHERE id=1001


--为视图添加检查选项,避免通过视图进行DML操作污染基表
CREATE OR REPLACE VIEW v_emp_wensq
AS
SELECT empno id,ename name,sal salary,deptno
FROM emp_wensq
WHERE deptno = 10
WITH CHECK OPTION
--WITH CHECK OPTION短语表示,通过视图所做的修改,必须在视图的可见范围内:
--当添加了检查选项后,该视图对DML操作有要求:
--插入数据时,必须保证插入的数据视图可见。
--修改数据时,必须保证修改后的数据视图对其可见。


--READ ONLY对视图添加只读选项,那么不允许对视图进行DML操作
CREATE OR REPLACE VIEW v_emp_wensq
AS
SELECT empno id,ename name,sal salary,deptno
FROM emp_wensq
WHERE deptno = 10
WITH READ ONLY


--在数据字典USER_OBJECTS中查询所有视图名称:
SELECT object_name FROM user_objects
WHERE object_type = 'VIEW';


--在数据字典USER_VIEWS中查询指定视图:
SELECT text FROM user_views
WHERE view_name = 'v_emp_wensq';


--在数据字典USER_UPDATABLE_COLUMNS中查询视图:
SELECT column_name, insertable, updatable, deletable
FROM user_updatable_columns
WHERE table_name = 'v_emp_wensq';


--创建一个记录每个部门薪水情况的视图
CREATE VIEW v_emp_sal_wensq
AS
SELECT
  d.deptno,d.dname,
  AVG(e.sal) avg_sal,
  SUM(e.sal) sum_sal,
  MIN(e.sal) min_sal,
  MAX(e.sal) max_sal
FROM emp_wensq e , dept_wensq d
WHERE e.deptno=d.deptno
GROUP BY d.deptno,d.dname
--查看那些员工比自己所在部门平均工资高?
SELECT e.ename,e.sal,e.deptno
FROM emp_wensq e,v_emp_sal_wensq v
WHERE e.deptno=v.deptno
AND e.sal>v.avg_sal


DELETE FROM v_emp_sal_wensq    --SQL 错误: ORA-01732: 此视图的数据操纵操作非法(复杂视图不允许DML操作,会报错。)


--当不再需要视图的定义,可以使用DROP VIEW语句删
除视图
DROP VIEW v_emp_wensq


--序列也是数据库对象,它可以根据指定的规则生成一组数字,通常序列是为了某表的主键提供值。
--创建一个序列seq_emp_id_wensq,初始值是1000,步进是2
CREATE SEQUENCE seq_emp_id_wensq
START WITH 1000
INCREMENT BY 1


--序列支持两个伪列:
--CURRVAL:获取序列当前值(最后一次生成的数值)
--NEXTVAL:获取序列下一个数字(当前值加不进)


--序列是不可逆的,每当调用完NEXTVAL生成新的数字后,序列不会再提供之前的数字。
--CURRVAL可以调用多次,不会导致步进。


--新创建的序列必须质数调用一次 NEXTVAL  后才可以开始使用CUPRRVAL


SELECT seq_emp_id_wensq.NEXTVAL
FROM dual


SELECT seq_emp_id_wensq.CURRVAL
FROM dual


INSERT INTO emp_wensq
(empno,ename,sal,job,deptno)
VALUES
(seq_emp_id_wensq.NEXTVAL,'JACKSON',6000,'CLERK',20)


SELECT * FROM emp_wensq


DELETE FROM emp_wensq
WHERE ename='JACK'


DROP SEQUENCE seq_emp_id_wensq    --删除序列


--UUID 也是一种作为主键的生成算法
--ORACLE提供了函数生成32位不重复字符串


SELECT sys_guid() FROM dual
www.xxbbs.com/show?tid=F7E2B22139


--索引
--在emp表的ENAME列上创立索引
CREATE INDEX idx_emp_ename_wensq ON emp_wensq(ename);


--复合索引也叫多列索引,是基于多个列的索引。如果经常在ORDER BY子句中使用job和salary作为排序依据,可以建立复合索引:
CREATE INDEX idx_emp_job_sal ON emp_wensq(job,sal);
--当做下面的查询时,会自动应用索引idx_emp_job_sal
SELECT empno,ename,sal,job FROM emp_wensq
ORDER BY job,sal;


--创建基于函数的索引
--如果需要在emp表的ename列上执行大小写无关搜索,可以在此列上建立一个基于UPPER函数的索引:
CREATE INDEX emp_ename_upper_idx ON emp_wensq(UPPER(ename));
--当做下面的查询时,会自动应用刚刚建立的索引:
SELECT * FROM emp_wensq
WHERE UPPER(ename)='KING';


--修改和删除索引
--如果经常在索引列上执行DML操作,需要定期重建索引,提高索引的空间利用率,语法如下:
ALTER INDEX index_name REBUILD;
--重建索引idx_emp_ename
ALTER INDEX idx_emp_ename REBUILD;
--当一个表上有不合理的索引,会导致操作性能下降,删除索引的语法:
DROP INDEX index_name;
--删除索引idx_emp_ename:
DROP INDEX idx_emp_ename;


--合理使用索引提升查询效率
--为提升查询效率,创建和使用索引的原则:
--为经常出现在WHERE子句中的列创建索引
--为经常出现在ORDER BY、DISTINCT后面的字段建立索引。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致
--为经常作为表的连接条件的列上创建索引
--不要在经常做DML操作的表上建立索引
--不要在小表上建立索引
--限制表上的索引数目,索引并不是越多越好
--删除很少被使用的、不合理的索引


--约束的类型
--约束条件包括:
--非空约束(Not Null),简称NN
--唯一性约束(Unique),简称UK
--主键约束(Primary Key),简称PK
--外键约束(Foreign Key),简称FK
--检查约束(Check),简称CK


CREATE TABLE employees_wensq(
eid NUMBER(6),
name VARCHAR2(30)NOT NULL,
salary NUMBER(7,2),
hiredate DATE
  CONSTRAINT employees_wensq_hiredate_nn NOT NULL
);


--可以在建表之后,通过修改表的定义,添加非空约束:
ALTER TABLE employees_wensq
MODIFY(eid NUMBER(6)NOT NULL);


--取消非空约束
--如果业务要求取消某列的非空约束,可以采用重建表或者修改表的方式:
ALTER TABLE employees_wensq
MODIFY (eid NUMBER(6)NULL);


--添加唯一性约束
--当一个字段使用了唯一性约束,那么该字段在整张表中每条记录都不允许重复,NULL值除外
  --在建表employees的同时,在eid、email列上创建唯一约束条件,并在建表后在name列上建立一个名为employees_name_uk的唯一约束条件:
CREATE TABLE employees1_wensq(
  eid NUMBER(6)UNIQUE,
  name VARCHAR2(30),
  email VARCHAR2(50),
  salary NUMBER(7,2),
  hiredate DATE,
  CONSTRAINT employees_wensq_email_uk UNIQUE(email)
);


INSERT INTO employees1_wensq
(eid,name,email)
VALUES
(1,'JACK','JACK@tedu.cn')


SELECT * FROM employees1_wensq


--在建表之后增加唯一性约束条件:
ALTER TABLE employees1_wensq
ADD CONSTRAINT employees_wensq_name_uk UNIQUE(name);


--在建表时添加主键约束条件:
--主键约束
CREATE  TABLE employees2_wensq(
  eid NUMBER(6)PRIMARY KEY,
  name VARCHAR2(30),
  email VARCHAR2(50),
  salary NUMBER(7,2),
  hiredate DATE
);


INSERT INTO employees2_wensq
(eid,name)
VALUES
(NULL,'JACK')


--添加检查约束
--员工的薪水必须大于2000元
ALTER TABLE employees2_wensq
ADD CONSTRAINT employees4_salary_check
CHECK(salary>2000);


--正常插入数据
INSERT INTO employees2_wensq(eid,name,salary)
VALUES(1236,'donna noble',2500);


--试图修改职员的薪水为1500元,更新失败
UPDATE employees4 SET salary=1500
WHERE eid=1236;


--查看视图结构:
DESC v_emp_wensq


SELECT * FROM v_emp_wensq
SELECT *FROM emp_wensq
DELETE v_emp_wensq
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 华为HCIP精品课程笔记-Wakin是一本非常有价值的学习资料。该笔记通过详细介绍HCIP认证的相关知识点和实用技能,为学生提供了一种高效学习的方式。 首先,华为HCIP精品课程笔记-Wakin涵盖了HCIP认证考试需要掌握的全部知识点。对于想要通过HCIP考试的学生来说,这本笔记提供了一个简明扼要的指南,可以帮助他们系统地学习和复习相关知识。笔记中的内容分为多个章节,涵盖了网络技术、路由器和交换机、路由控制、IP多播、IPv6和MPLS等重要主题。每个主题都有详细的解释和示例,帮助学生更好地理解和掌握。 其次,华为HCIP精品课程笔记-Wakin还包含了一些实用技能和案例分析。这些内容能够帮助学生更好地理解和应用所学知识。对于在实际工作中需要应用HCIP技能的人来说,这本笔记提供了一些宝贵的经验和建议。 此外,华为HCIP精品课程笔记-Wakin还提供了一些习题和练习题,可以帮助学生检验自己的学习成果。通过对这些习题的练习,学生可以更好地了解自己的薄弱点,并进行有针对性的复习和提高。 总之,华为HCIP精品课程笔记-Wakin是一本非常实用和有价值的学习资料。它提供了一种高效的学习方式,帮助学生系统地掌握和应用HCIP认证的相关知识和技能。我强烈推荐这本笔记给所有想要通过HCIP考试或者在实际工作中应用HCIP技能的人。 ### 回答2: 《华为HCIP精品课程笔记-wakin》是一本非常有价值的学习资料。这本书由华为公司精心编撰而成,旨在帮助学员高效学习和掌握华为认证网络工程师(HCIP)认证所需的知识和技能。 这本笔记深入浅出地介绍了HCIP认证相关的重要概念、原理和应用。其中包括了网络架构设计、路由与交换技术、安全技术、无线网络技术等内容。每个主题都有详细的解释、示意图和实例,使读者能够更好地理解和应用知识。 除了内容丰富全面外,这本笔记还具有一些独特的优点。首先,它采用了华为独有的学习方法,系统化地梳理了知识结构,使读者能够更加有条理地学习。其次,每个章节都附带了重点整理的要点,方便读者快速回顾和温习。此外,为了帮助读者更好地理解,笔记还提供了一些实验和实际案例,使学习更加实践性和深入。 通过学习《华为HCIP精品课程笔记-wakin》,读者将能够全面了解和掌握HCIP认证所需的知识和技能。这些知识和技能不仅适用于工作中的网络工程师,也对于其他相关岗位的人员有很大的帮助。无论是对于初学者还是对于有一定经验的人来说,这本书都是一本非常实用的学习资料。强烈推荐给所有对网络工程感兴趣的人士。 ### 回答3: 华为HCIP精品课程笔记-Wakin是一份非常有价值的学习资料。这份笔记由华为公司的专业培训师Wakin编写,对于想要学习和提升HCIP认证的人来说,是一份非常实用的参考资料。 Wakin在这份笔记中,详细地介绍了HCIP的知识点和考试重点。他从网络基础、路由交换、安全技术、无线网络等多个方面入手,深入浅出地解释了每个知识点的概念和原理。在每个章节中,Wakin都给出了一些实际案例和实验,帮助我们更好地理解和应用所学内容。 此外,Wakin在笔记中还提供了一些学习方法和技巧。他建议我们在学习过程中,要注重实践,通过自己动手实验和配置设备来加深对知识的理解。他还推荐了一些学习资源和参考书籍,帮助我们更好地补充和扩展所学知识。 总的来说,华为HCIP精品课程笔记-Wakin非常全面且易于理解。无论是准备HCIP认证考试的人,还是想要进一步提升自己网络技术的人,都可以从中受益匪浅。我相信,只要认真学习并灵活运用这份笔记中的知识,就能够在网络领域中取得更好的成绩和发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值