2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开
测开的话,你就得学数据库,sql,oracle,尤其sql要学,当然,像很多金融企业、安全机构啥的,他们必须要用oracle数据库
这oracle比sql安全,强大多了,所以你需要学习,最重要的,你要是考网络警察公务员,这玩意你不会就别去报名了,耽误时间!
oracle系列文章:
【1】Oracle数据库:啥是oracle数据库?你为啥要学oracle?
【2】Oracle数据库:oracle 11g安装教程,已安装好的oracle各个文件夹的作用,oracle用户权限怎么样
【3】Oracle数据库:oracle启动,oracle客户端工具plsql安装教程和使用方法
【4】Oracle数据库:创建表空间,创建新用户,给用户分配对象、角色和系统权限,登录新用户建表
【5】Oracle数据库:链接配置,包括sqlnet.ora里面的transnames.ora配置数据库标识符SID,listener暂时简单了解
【6】Oracle数据库:net configureation assistant工具配置监听listener,配置本地网络访问服务器上的数据库
【7】Oracle数据库:oracle字符类型、数字类型、创建表表名的命名规则
【8】Oracle数据库:约束条件:主键约束、唯一约束、检查约束、非空约束、外键约束、默认值填写
【9】Oracle数据库:表的关系:一对多,一对一,多对多,一一继承和修改的关系,表不是重点,重点是数据和约束关系
【10】Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作
【11】Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句
【12】Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制
【13】Oracle数据库:排序order by语句,select from where order by的执行先后顺序,各种样例
【14】Oracle数据库:oracle函数,单行函数,多行函数,upper,lower,initcap,字符串函数
【15】Oracle数据库:数字函数,日期函数,round,trunc,mod,months_between,add_months,next_day,last_day,sysdate
【16】Oracle数据库:oracle数据类型转换to_char()日期和数字转字符,to_number()字符转数字,to_date()字符转日期函数
【17】Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数
【18】Oracle数据库:条件表达式case when then else end,decode函数,oracle单行函数练习示例
【19】Oracle数据库:oracle多表查询,等值连接,非等值连接,自连接的sql语句和规则
【20】Oracle数据库:oracle外连接left/right/full outer join on,oracle扩展的左右外连接展示符号(+)
【21】Oracle数据库:自然连接natural join,using语句,注意避免写交叉连接
【22】Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例
【23】Oracle数据库:oracle组函数,聚合函数,多行函数,avg,sum,min,max,count,group by,having
【24】Oracle数据库:oracle嵌套分组函数(聚合函数),组函数的练习题,挺复杂的,用好decode函数,很有趣
【25】Oracle数据库:子查询、单行子查询,多行子查询,in,any,all语句,子查询的练习案例
————前面这些都是数据库查询语言的重要知识,一定要牢牢掌握和熟悉
后面的相对简单一点
【26】Oracle数据库:数据库操纵语言DML,插入insert into where,更新update where,删除delete where
【27】Oracle数据库:oracle事务处理语言TCL,commit,rollback,savepoint语句
【28】Oracle数据库:oracle数据定义语言DDL,查询表、序列、索引、视图、创建表,修改表的列alter,rename to,删除表数据truncate和表drop
【29】Oracle数据库:oracle用命令定义非空not null,unique唯一性,主键primary key,外键foreign key,check检查,启用enable,禁用disable约束
【30】Oracle数据库:创建和删除视图view,简单和复杂视图,内建视图,topN分析,oracle分页查询
和表一样
id列,整数类型的主键
这样可以生成序列来维护主键
数据库包保证它是唯一的
这个主键很难自己去避免重复的,最好数据库自己搞
它自动去维护序列简单多了
我们就可以解脱了,美滋滋
多个表都可以用统一个序列,1,2,3,4,5
仨表中的id就不会是连续的,比如A1,B2,C3,表内是无法连续,但是没关系,我们要的是不重复,无所谓的
index = next(index)
循环递推下标
好说
缓存优点:性能快,但是数据库关闭之后,缓存就没了哦,又要重新启动的话,对序列造成浪费
SQL> create sequence dept_seq increment by 10 start with 120 maxvalue 9999 nocache nocycle;
Sequence created
序列没法查看
SQL> desc dept_seq;
A sequence cannot be described.
你在序列文件夹下new也可以创建序列
owner是HR
起点120
名字dept_seq2
minvalue
maxvalue
increment by 10
cache size
不写就不管了
默认20哦
-- Create sequence
create sequence DEPT_SEQ2
minvalue 1
maxvalue 9999
start with 120
increment by 10
nocache;
默认Nocycle
跟咱们手动写命令一个样
很简单的
SQL> select us.SEQUENCE_NAME,us.INCREMENT_BY,us.MAX_VALUE,us.MIN_VALUE,us.CYCLE_FLAG,us.CACHE_SIZE,us.LAST_NUMBER from user_sequences us;
SEQUENCE_NAME INCREMENT_BY MAX_VALUE MIN_VALUE CYCLE_FLAG CACHE_SIZE LAST_NUMBER
------------------------------ ------------ ---------- ---------- ---------- ---------- -----------
DEPARTMENTS_SEQ 10 9990 1 N 0 280
DEPT_SEQ 10 9999 1 N 0 120
DEPT_SEQ2 10 9999 1 N 0 120
EMPLOYEES_SEQ 1 1E28 1 N 0 207
LOCATIONS_SEQ 100 9900 1 N 0 3300
为啥起点叫last_number
next_number 呢
因为第一次去1
下一次就是取120呗
就这么来的
我们起个名字,默认其他的东西
开始为1
新增为1
区间1–无穷
SQL> select test_seq.nextval from dual;
NEXTVAL
----------
1
SQL> select test_seq.curval from dual;
select test_seq.curval from dual
ORA-00904: "TEST_SEQ"."CURVAL": 标识符无效
SQL> select test_seq.currval from dual;
CURRVAL
----------
1
SQL> select test_seq.currval from dual;
CURRVAL
----------
1
nextval就是你当前没用过的有效下一个序列值
currval就是当前最新产生过的序列值
SQL> select test_seq.nextval from dual;
NEXTVAL
----------
2
SQL> select test_seq.currval from dual;
CURRVAL
----------
2
所以整主键的话,那就是用nextval
SQL> desc departments;
Name Type Nullable Default Comments
--------------- ------------ -------- ------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DEPARTMENT_ID NUMBER(4) Primary key column of departments table.
DEPARTMENT_NAME VARCHAR2(30) A not null column that shows name of a department. Administration,
Marketing, Purchasing, Human Resources, Shipping, IT, Executive, Public
Relations, Sales, Finance, and Accounting.
MANAGER_ID NUMBER(6) Y Manager_id of a department. Foreign key to employee_id column of employees table. The manager_id column of the employee table references this column.
LOCATION_ID NUMBER(4) Y Location id where a department is located. Foreign key to location_id column of locations table.
DEPARTMENT_ID 主键
LOCATION_ID 2500中插入一个新部门
SQL> insert into departments(department_id,department_name,location_id) values(test_seq.nextval,'Support',2500);
1 row inserted
SQL> select * from departments d where d.location_id=2500;
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID
------------- ------------------------------ ---------- -----------
3 Support 2500
80 Sales 145 2500
之前nextval是2
现在最新的序列就是3
所以这里的主键为3,变成了唯一的id,不重复哦
序列不像表,它实际上是一个迭代器,可以慢慢返回,哈哈哈哈哈,跟Python那个迭代器类似
所以用dual伪表
SQL> alter sequence dept_seq increment by 20 maxvalue 999999;
Sequence altered
再查询一波,就知道变了20
SQL> select us.SEQUENCE_NAME,us.INCREMENT_BY,us.MAX_VALUE,us.MIN_VALUE,us.CYCLE_FLAG,us.CACHE_SIZE,us.LAST_NUMBER from user_sequences us;
SEQUENCE_NAME INCREMENT_BY MAX_VALUE MIN_VALUE CYCLE_FLAG CACHE_SIZE LAST_NUMBER
------------------------------ ------------ ---------- ---------- ---------- ---------- -----------
DEPARTMENTS_SEQ 10 9990 1 N 0 280
DEPT_SEQ 20 999999 1 N 0 130
DEPT_SEQ2 10 9999 1 N 0 120
EMPLOYEES_SEQ 1 1E28 1 N 0 207
LOCATIONS_SEQ 100 9900 1 N 0 3300
TEST_SEQ 1 1E28 1 N 20 21
6 rows selected
SQL> drop sequence dept_seq2;
Sequence dropped
提示:重要经验:
1)
2)学好oracle,即使经济寒冬,整个测开offer绝对不是问题!同时也是你考公网络警察的必经之路。
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。