zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Oracle数据库:oracle数据定义语言DDL,查询表、序列、索引、视图、创建表,修改表的列alter,rename to,删除表数据truncate和表drop

2023-09-11 14:15:38 时间

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,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。