Oracle基本语法
前言:
1.使用的数据库不同,所使用的语法也略有不同
2.SQL对大小写不敏感
3.Oracle中对引号里面的内容大小写敏感
3.表空间名、文件路径……等需要用单引号将其包含
4.一般引号里面的内容需要大写
准备工作:
安装tips:PLSQL、Oracle以及客户端远程连接服务器笔记(仅供参考)-CSDN博客
(1).Win+R打开services.msc
![]()
(2)启动一些服务:
(qwq我不知道哪些有用,哪些没用,所以我都把打开了,不知道有没有负面影响,大家参考一下别的博客吧)
![]()
登录:
1.打开SQL Plus命令行工具
第一种方式:
第二种方式:
(1)win+R 打开cmd
![]()
(2)输入sqlplus
![]()
2.以不同用户登录
注意:
1.使用用户口令这种形式登录的时候,是不显示密码的,口令输入的时候是不显示的,直接输就好
2.若是想以显示密码的形式输入,直接在用户名那一块输入:用户名/密码
3.超级管理员(sys)输入时需要注意指定 as sysdba
SYSTEM(普通管理员):
SYS(超级管理员):
不显示密码方式:
用户名:SYS
密码:sys密码 as sysdba
![]()
显示密码方式:
用户名:sys/sys密码 as sysdba
![]()
SCOTT(普通用户):
若是出现被锁住的情况:

解决方法:
(1)登录超级管理员账户,
![]()
(2)输入alter user 用户名 account unlock;
![]()
(3)重新登录即可:
![]()
SQL基本命令
1.数据定义语言(DDL)
数据库操作
查询所有用户:
1 | select distinct(OWNER) from all_tables; |
查看当前用户:
1 | show user; |
创建表空间:
1 | create tablespace 表空间名 datafile '存储路径\***.dbf' size 空间大小; |
创建用户并指定其表空间:
(指定表空间需要先创建表空间,如果不指定表空间,就会按照默认空间存储)
1 | create user 用户名 identified by 密码 default tablespace 表空间; |
给用户授予dba的权限(超级管理员):
1 | grant dba to 用户; |
删除表空间:
1 | drop tablespace 表空间名 including contents and datafiles; |
删除用户(超级管理员):
(1)查看用户是否有活跃对话
1 select sid as session_id, serial# from v$session where username='用户名';
![]()
(2)如果查询结果显示有活动的会话,结束这些会话
1 kill session 'session_id, serial#' immediate;
(3)删除用户
1 drop user 用户名 cascade;
![]()
切换用户登录:
1 | conn 用户名/密码 |
表操作
查询:
查询某个用户下所有表名:
(用户名注意大写)
1 | select table_name from dba_tables where owner = '用户名'; |
查询某个用户下表个数:
(用户名注意大写)
1 | select count(*) from all_tables where OWNER = '用户名'; |
查询某个用户的表结构:
1 | desc 用户名.表名; |
查询指定表的建表语句:
(表名、用户名注意大写)
1 | select dbms_metadata.get_ddl('TABLE', '表名','用户名') from dual; |
创建:
数据类型:
创建表空间:
1 | create tablespace 表空间名 datafile '文件路径\文件名.dbf' size 表空间大小; |
创建表:
1 | #创建表 |
给表添加注释:
1 | comment on table 表名 is '注释'; |
给字段添加注释:
1 | comment on column 表名.字段名 is '注释'; |
表备份:
1 | create table 用户名.备份表名 as select * from 用户名.需要备份的表名; |
给表添加一列:
1 | alter table 表名 add (字段名 字段类型 约束条件); |
修改:
重命名表:
1 | alter table 用户名.旧表名 rename to 新表名; |
添加字段:
1 | alter table 用户名.表名 add 新字段名 新字段类型 default '默认值'; |
修改字段名:
1 | alter table 用户名.表名 rename column 旧字段名 to 新字段名; |
修改数据类型:
1 | alter table T1.emp1 modify temp varchar(30); |
删除:
删除表字段:
1 | alter table 用户名.表名 drop column 字段名; |
删除表:
1 | drop table 表名; |
删除表空间:
(1)查看是否有其它用户在使用该表空间:
1 select * from dba_users where default_tablespace='表空间名';
(2)若有,则删除这些用户或者将这些用户迁移到别的表空间
(3)删除表空间
1 drop tablespace 表空间名 including contents and datafiles;
![]()
![]()
删除指定表并重新创建该表:
1 | truncate table 表名; |
2.数据操作语言(DML)
添加数据(insert)
注意:
1.插入数据注意顺序
2.插入的数据大小要合法
给指定字段添加数据:
1 | insert into 表名 (字段1,字段2......) values(值1, 值2......); |
给表中批量添加数据:
1 | insert all into 用户名.表名(字段1,字段2,字段3......) values(值1,值2,值3.......) |
修改数据(update)
修改数据:
注意:如果没有条件,则会修改整张表
1 | update 表名 set 字段1=值1,字段2=值2......[where 条件]; |
删除数据(delete)
删除数据:
注意:如果没有条件,则会删除整张表
1 | delete from 表名; |
3.数据查询语言(DQL)
编写顺序:
1 | select [distinct|all] 字段列表 |
作示范的表结构:
表名:T_STUDENT
执行顺序:
1 | from 表名 : 从哪张表查询 |
基本查询
查询多个字段:
1 | select 字段1,字段2,字段3...from 表名; |
设置别名:
1 | select 字段1[as 别名1],字段2 [as 别名2]......from 表名; |
去除重复记录:
1 | select distinct 字段列表 from 表名; |
条件查询
语法:
1 | select 字段列表 from 表名 where 条件列表; |
条件:
比较运算符 | 功能 |
---|---|
> | |
>= | |
< | |
<= | |
= | |
<> 或 != | 不等于 |
between…and… | 在某个范围之内 |
in(…) | 在in之后的括号中,多选一 |
like 占位符 | 模糊匹配(_匹配单个字符,%匹配任意个字符) |
is null | |
and 或 && | 并且 |
or 或 || | 或 |
not 或 ! | 非 |
聚合函数
1 | select 聚合函数(字段列表) from 表名; |
注意:
对一列进行计算 所有null值不参与聚合函数的计算
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
分组查询
1 | select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件]; |
where | **分组之前执行,不满足where条件的不参与分组,where不能对聚合函数进行判断** |
---|---|
having | **分组之后对结果进行过滤,having可以对聚合函数进行判断** |
eg:
排序查询
1 | select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2; |
asc | 升序(默认) |
---|---|
desc | 降序 |
分页查询
(oracle查询没有limit关键字,引入rownum进行分页查询)
1 | select * from |
4.数据控制语言(DCL)
管理用户
查看当前用户:
1 | show user; |
切换用户:
1 | connect 用户名/密码; |
注意连接到数据库超级管理员的时候:
可能会出现以下错误:
![]()
解决方法:
1 connect sys/密码 as sysdba
![]()
权限控制
查询用户权限:
1 | select * from dba_sys_privs where grantee='用户名'; |
授予权限:
1 | grant 权限 to 用户; |
权限 | 说明 |
---|---|
create session | 登录权限 |
create table | 创建表的权限 |
drop any table | 删除任意表 |
insert any table | 向任意表中插入行 |
update any table | 修改任意表中行的权限 |
select on 表名 | 查看指定表的权限 |
eg:
回收权限:
1 | --回收用户权限 |
1 | revoke select on 用户2.表2 from 用户1; #回收用户1查看表2的权限 |
函数
使用
一般形式:
1 select 函数 from 表名 where 条件;
如果只是想看函数的返回结果可以使用以下形式:
1 select 函数 from sys.dual;
sys.dual
dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录
字符串函数
eg:
数值函数
eg:
日期函数
日期表示:
日期-月份-年份
eg:21-9月-2024
函数概述:
eg:
sysdate:
next_day():

last_day():

round() :

add_months():

months_between():
extract():
约束
概念
约束是作用于表中字段上的规则,用于限制存储在表中的数据
约束可以在创建表/修改表的时候添加
分类
约束 | 描述 | 关键字 |
---|---|---|
非空约束 | 限制该字段的数据不能为null | not null |
唯一约束 | 保证该字段的所有数据都是唯一的、不重复的 | unique |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | primary key |
默认约束 | 保存数据时,如果未指定该字段的值,则采用默认值 | default |
检查约束 | 保证字段值满足某一条件 | check |
外键约束 | 用来让两张表的数据之间建立连接,保证数据的一致性和完整性 | foreign key |
建表时添加约束:
sql语句添加:
1 | alter table 表名 add constraints 约束名称 primary key(列名); |
外键约束
子表(从表):具有外键的表
父表(主表):外键所关联的表
FOREIGN KEY约束可以与另外一个表的PRIMARY KEY及UNIQUE关联
添加外键:
在创建表的时候添加:
1 | constraint 外键名称 foreign key(外键) references 表名(外键关联的键) |
1 | foreign key(列名) references 外键关联的表名 |
sql语句添加(alter):
1 | alter table 表名 add constraint 外键名称 foreign key(列名) references 表名(外键关联的键); |
查询外键
根据外键名称查看外键所在位置:
1 | select * from user_cons_columns cl where cl.constraint_name= upper('外键名称'); |
查找表的外键:
(包括名称,引用表的表名和对应的列名)
1 | select * from user_constraints c where c.constraint_type='R' and c.table_name=upper('表名'); |
删除外键
1 | alter table 表名 drop constraint 外键名称; |
多表查询
基本概念
自然连接(内连接):左表与右表中每一个元组进行条件匹配,满足条件的才会查询出来
自连接:同一个表内的查询
外连接:
- 左外连接:左表中的元组不会丢失,即每一个左表中的元素都可查出,若右表没有匹配的,就置为空
- 右外连接:右表中的元组不会丢失,即每一个右表中的元素都可查出,若左表没有匹配的,就置为空
- 全连接:左右表的悬浮元组都会加入到最后的查询结果中
基本结构
内连接+外连接:
1 | select 查询的字段名 from 左表 [inner|left|right|full] join 右表 on 连接条件; |
自连接:
1 | select 别名.查询的字段名(列名)from 表1 别名1, 表1 别名2 where 连接条件; |
关系运算
大学模式:
首先以黑书里面的大学模式为例:
创建基本表结构:
1 | create table classroom |
插入数据:
1 | delete from prereq; |
内连接 (自然连接)
1 | select 查询的字段(列名)from 左表 inner join 右边 on 连接条件; |
外连接
左外连接
1 | select 查询的字段名(列名)from 左表 left join 右表 on 连接条件; |
右外连接
全连接
1 | select 查询出的字段名(列名) from 左表 full join 右表 on 连接条件; |
自连接
1 | select 别名.查询的字段名(列名)from 表1 别名1, 表1 别名2 where 连接条件; |
视图
基本概念
- 视图是一个虚拟表,视图不在数据库中存储数据,视图的行和列来自于子查询所返回的结果
- 视图名不允许与基本表重名
- 可以通过视图对数据进行增删改查:insert、delete、select
- 基本表中的数据改变时,视图中的数据也会动态更新
基本操作
查看视图
1 | desc Vcourse; |
创建视图
1 | create [or replace] [{force|noforce}] view 视图名(别名列表) as 子查询; |
修改视图
1 | create or replace view 视图名 as 子查询; |
删除视图
1 | drop view [if exists] 视图名; |
子查询
如有错误,欢迎指正!!!