Oracle数据库:oracle数据定义语言DDL,查询表、序列、索引、视图、创建表,修改表的列alter,rename to,删除表数据truncate和表drop
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语句
oracle数据定义语言DDL【database define language】
操作表,用户,视图,索引,序列啥的
创建表
我们见过多次
SQL> create table dept(deptno number(2),dname varchar(14),loc varchar(13));
Table created
SQL> desc dept;
Name Type Nullable Default Comments
------ ------------ -------- ------- --------
DEPTNO NUMBER(2) Y
DNAME VARCHAR2(14) Y
LOC VARCHAR2(13) Y
ddl语句,oracle是隐式的事务提交,自动控制,无法回滚
表名?
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
REGIONS
LOCATIONS
DEPARTMENTS
JOB_GRADES
EMP
DEPT
COUNTRIES
JOB_HISTORY
EMPLOYEES
JOBS
10 rows selected
当前用户表的信息
这叫数据字典表
是HR用户自己的表
列名是table_name
SQL> select distinct object_type table_name from user_objects;
TABLE_NAME
-------------------
SEQUENCE
PROCEDURE
TRIGGER
TABLE
INDEX
VIEW
6 rows selected
HR用户的对象类型
一个序列
过程
触发器
表
索引
视图
这些类型
HR是oracle的示例用户
SQL> select * from user_catalog;
TABLE_NAME TABLE_TYPE
------------------------------ -----------
COUNTRIES TABLE
DEPARTMENTS TABLE
DEPARTMENTS_SEQ SEQUENCE
DEPT TABLE
EMP TABLE
EMPLOYEES TABLE
EMPLOYEES_SEQ SEQUENCE
EMP_DETAILS_VIEW VIEW
JOBS TABLE
JOB_GRADES TABLE
JOB_HISTORY TABLE
LOCATIONS TABLE
LOCATIONS_SEQ SEQUENCE
REGIONS TABLE
14 rows selected
一气呵成,查序列,表,视图,同义词
最常见的数据字典表——user_catalog,user_objects,user_tables
key-value字典呗
挂了谁
创建表时,跟一个查询语句
SQL> create table dekt as select e.employee_id,e.last_name,e.salary,e.hire_date from employees e where e.department_id=80;
Table created
SQL> desc dekt;
Name Type Nullable Default Comments
----------- ------------ -------- ------- --------
EMPLOYEE_ID NUMBER(6) Y
LAST_NAME VARCHAR2(25)
SALARY NUMBER(8,2) Y
HIRE_DATE DATE
如果是查询,紧跟as,后面查一个别的表的列,拿这些列做本表的列
相当于复制表了,同时还复制了数据
SQL> select * from dekt;
EMPLOYEE_ID LAST_NAME SALARY HIRE_DATE
----------- ------------------------- ---------- -----------
145 Russell 14000.00 2004/10/1
146 Partners 13500.00 2005/1/5
147 Errazuriz 12000.00 2005/3/10
148 Cambrault 11000.00 2007/10/15
149 Zlotkey 10500.00 2008/1/29
150 Tucker 10000.00 2005/1/30
151 Bernstein 9500.00 2005/3/24
152 Hall 9000.00 2005/8/20
153 Olsen 8000.00 2006/3/30
154 Cambrault 7500.00 2006/12/9
155 Tuvault 7000.00 2007/11/23
156 King 10000.00 2004/1/30
157 Sully 9500.00 2004/3/4
158 McEwen 9000.00 2004/8/1
159 Smith 8000.00 2005/3/10
160 Doran 7500.00 2005/12/15
161 Sewall 7000.00 2006/11/3
162 Vishney 10500.00 2005/11/11
163 Greene 9500.00 2007/3/19
164 Marvins 7200.00 2008/1/24
EMPLOYEE_ID LAST_NAME SALARY HIRE_DATE
----------- ------------------------- ---------- -----------
165 Lee 6800.00 2008/2/23
166 Ande 6400.00 2008/3/24
167 Banda 6200.00 2008/4/21
168 Ozer 11500.00 2005/3/11
169 Bloom 10000.00 2006/3/23
170 Fox 9600.00 2006/1/24
171 Smith 7400.00 2007/2/23
172 Bates 7300.00 2007/3/24
173 Kumar 6100.00 2008/4/21
174 Abel 11000.00 2004/5/11
175 Hutton 8800.00 2005/3/19
176 Taylor 8600.00 2006/3/24
177 Livingston 8400.00 2006/4/23
179 Johnson 6200.00 2008/1/4
34 rows selected
看见了没有
这就是查询创建表
就是复制
操作表的列
而不是更新某个列的数据信息
懂?
和update的区别
update不是加列的,而是给列修改数据的
类似于建表的更新操作
SQL> desc dept;
Name Type Nullable Default Comments
------ ------------ -------- ------- --------
DEPTNO NUMBER(2) Y
DNAME VARCHAR2(14) Y
LOC VARCHAR2(13) Y
SQL> alter table dept add(salary number(8,2));
Table altered
SQL> desc dept;
Name Type Nullable Default Comments
------ ------------ -------- ------- --------
DEPTNO NUMBER(2) Y
DNAME VARCHAR2(14) Y
LOC VARCHAR2(13) Y
SALARY NUMBER(8,2) Y
这里关键字为add就是添加一个新的表
好说,跟建表一样
至于其他的操作也好说
比如修改,那就是modify
比如删除,那就是drop
SQL> alter table dept modify(dname varchar2(30));
Table altered
SQL> desc dept;
Name Type Nullable Default Comments
------ ------------ -------- ------- --------
DEPTNO NUMBER(2) Y
DNAME VARCHAR2(30) Y
LOC VARCHAR2(13) Y
SALARY NUMBER(8,2) Y
easy吧,修改数据类型dname被变动了
再看默认值
SQL> alter table dept modify(salary number(8,2) default 1000);
Table altered
SQL> desc dept;
Name Type Nullable Default Comments
------ ------------ -------- ------- --------
DEPTNO NUMBER(2) Y
DNAME VARCHAR2(30) Y
LOC VARCHAR2(13) Y
SALARY NUMBER(8,2) Y 1000
很好说
删除列
drop
SQL> alter table dept drop(salary);
Table altered
SQL> desc dept;
Name Type Nullable Default Comments
------ ------------ -------- ------- --------
DEPTNO NUMBER(2) Y
DNAME VARCHAR2(30) Y
LOC VARCHAR2(13) Y
一般我们是不会修改列名的
反正这些格式你要熟悉
了解一下就行,万一考试考到了呢
将列名rename to新名字
SQL> alter table dept rename column dname to name;
Table altered
SQL> desc dept
Name Type Nullable Default Comments
------ ------------ -------- ------- --------
DEPTNO NUMBER(2) Y
NAME VARCHAR2(30) Y
LOC VARCHAR2(13) Y
把列 dname 修改为name
就是要熟悉这些关键字的语法格式,也没啥别的骚操作
修改表名和删除表
rename
column to
还能修改表的名字哦
SQL> rename dept to dect;
Table renamed
SQL> desc dect;
Name Type Nullable Default Comments
------ ------------ -------- ------- --------
DEPTNO NUMBER(2) Y
NAME VARCHAR2(30) Y
LOC VARCHAR2(13) Y
很骚,很骚
好说
rename to
to别忘了哦
旧到新即可
truncate
delete可以跟where条件,将特定的数据清空,但是不删除表,操作为显示事务,可以回滚撤销
truncate不可以跟where条件,而是将所有数据清空,但是不删除表,操作为隐式事务,无法回滚
SQL> truncate table dect;
Table truncated
SQL> select * from dect;
DEPTNO NAME LOC
------ ------------------------------ -------------
数据不见了
和delete是有明显的区别的
drop的话,表就没了
SQL> drop table dect;
Table dropped
SQL> desc dect;
Object dect does not exist.
就彻底没了
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
REGIONS
LOCATIONS
DEPARTMENTS
JOB_GRADES
EMP
DEKT
COUNTRIES
JOB_HISTORY
EMPLOYEES
JOBS
10 rows selected
查表对象发现没了
确实
总结
提示:重要经验:
1)
2)学好oracle,即使经济寒冬,整个测开offer绝对不是问题!同时也是你考公网络警察的必经之路。
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。