目录:
前言:
准备工作:
登录:
1.打开SQL Plus命令行工具
第一种方式:
第二种方式:
2.以不同用户登录
SYSTEM(普通管理员):
SYS(超级管理员):
不显示密码方式:
显示密码方式:
SCOTT(普通用户):
若是出现被锁住的情况:
解决方法:
SQL基本命令
1.数据定义语言(DDL)
数据库操作
查询所有用户:
查看当前用户:
创建用户并指定其表空间:
给用户授予dba的权限(超级管理员):
删除用户(超级管理员):
切换用户登录:
表操作
查询:
查询某个用户下所有表名:
查询某个用户下表个数:
查询某个用户的表结构:
查询指定表的建表语句:
创建:
数据类型(链接):
创建表空间:
编辑
创建表:
给表添加注释:
给字段添加注释:
表备份:
修改:
重命名表:
添加字段:
修改字段名:
修改数据类型:
删除:
删除表字段:
删除表:
删除表空间:
删除指定表并重新创建该表:
2.数据操作语言(DML)
添加数据(insert)
给指定字段添加数据:
给表中批量添加数据:
修改数据(update)
修改数据:
删除数据(delete)
删除数据:
编辑
3.数据查询语言(DQL)
编写顺序:
执行顺序:
基本查询
查询多个字段:
设置别名:
去除重复记录:
条件查询
语法:
编辑
条件:
聚合函数
分组查询
排序查询
分页查询
4.数据控制语言(DCL)
管理用户
查看当前用户:
权限控制
查询用户权限:
授予权限:
回收权限:
函数
使用
sys.dual
字符串函数
数值函数
日期函数
日期表示:
函数概述:
eg:
sysdate:
next_day():
last_day():
round() :
add_months():
months_between():
extract():
前言:
1.使用的数据库不同,所使用的语法也略有不同
2.SQL对大小写不敏感,无论大小写,sql自动转换为大写
3.Oracle中对引号里面的内容大小写敏感
3.表空间名、文件路径......等需要用单引号将其包含
4.一般引号里面的内容需要大写
准备工作:
(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)
数据库操作
查询所有用户:
select distinct(OWNER) from all_tables;
查看当前用户:
show user;
创建用户并指定其表空间:
create user 用户名 identified by 密码 default tablespace 表空间;
给用户授予dba的权限(超级管理员):
grant dba to 用户;
删除用户(超级管理员):
(1)查看用户是否有活跃对话
select sid as session_id, serial# from v$session where username='用户名';
(2)如果查询结果显示有活动的会话,结束这些会话
kill session 'session_id, serial#' immediate;
(3)删除用户
drop user 用户名 cascade;
切换用户登录:
conn 用户名/密码
表操作
查询:
查询某个用户下所有表名:
(用户名注意大写)
select table_name from dba_tables where owner = '用户名';
查询某个用户下表个数:
(用户名注意大写)
select count(*) from all_tables where OWNER = '用户名';
查询某个用户的表结构:
desc 用户名.表名;
查询指定表的建表语句:
(表名、用户名注意大写)
select dbms_metadata.get_ddl('TABLE', '表名','用户名') from dual;
创建:
数据类型(链接):
Oracle中的数据类型详解_oracle smallint-CSDN博客
创建表空间:
create tablespace 表空间名 datafile '文件路径\文件名.dbf' size 表空间大小;
创建表:
#创建表
create table 表名(字段1 字段1类型,字段2 字段2类型,字段3 字段3类型,.......字段n 字段n类型) ;
给表添加注释:
comment on table 表名 is '注释';
给字段添加注释:
comment on column 表名.字段名 is '注释';
表备份:
create table 用户名.备份表名 as select * from 用户名.需要备份的表名;
修改:
重命名表:
alter table 用户名.旧表名 rename to 新表名;
添加字段:
alter table 用户名.表名 add 新字段名 新字段类型 default '默认值';
修改字段名:
alter table 用户名.表名 rename column 旧字段名 to 新字段名;
修改数据类型:
alter table T1.emp1 modify temp varchar(30);
删除:
删除表字段:
alter table 用户名.表名 drop column 字段名;
删除表:
drop table 表名;
删除表空间:
(1)查看是否有其它用户在使用该表空间:
select * from dba_users where default_tablespace='表空间名';
(2)若有,则删除这些用户或者将这些用户迁移到别的表空间
(3)删除表空间
drop tablespace 表空间名 including contents and datafiles;
删除指定表并重新创建该表:
truncate table 表名;
2.数据操作语言(DML)
添加数据(insert)
注意:
1.插入数据注意顺序
2.插入的数据大小要合法
给指定字段添加数据:
insert into 表名 (字段1,字段2......) values(值1, 值2......);
给表中批量添加数据:
insert all into 用户名.表名(字段1,字段2,字段3......) values(值1,值2,值3.......)into 用户名.表名(字段1,字段2,字段3......) values(值1,值2,值3.......)
select * from dual;
修改数据(update)
修改数据:
注意:如果没有条件,则会修改整张表
update 表名 set 字段1=值1,字段2=值2......[where 条件];
删除数据(delete)
删除数据:
注意:如果没有条件,则会删除整张表
update 表名 set 字段1=值1,字段2=值2......[where 条件];
3.数据查询语言(DQL)
编写顺序:
select [distinct|all] 字段列表from 表名where 查询条件group by 分组字段列表having 分组后条件列表order by 排序字段列表:asc或者desc
;
作示范的表结构:
表名:T_STUDENT
执行顺序:
from 表名 : 从哪张表查询where 条件 :查询条件group by 分组条件 :分组having 分组后查询条件 :分组后查询条件select 字段列表 :选择字段order by 排序方式 :对查询结果进行排序
;
基本查询
查询多个字段:
select 字段1,字段2,字段3...from 表名;select * from 表名;
设置别名:
select 字段1[as 别名1],字段2 [as 别名2]......from 表名;
去除重复记录:
select distinct 字段列表 from 表名;
条件查询
语法:
select 字段列表 from 表名 where 条件列表;
条件:
比较运算符 | 功能 |
---|---|
> | |
>= | |
< | |
<= | |
= | |
<> 或 != | 不等于 |
between...and... | 在某个范围之内 |
in(...) | 在in之后的括号中,多选一 |
like 占位符 | 模糊匹配(_匹配单个字符,%匹配任意个字符) |
is null | |
and 或 && | 并且 |
or 或 || | 或 |
not 或 ! | 非 |
聚合函数
select 聚合函数(字段列表) from 表名;
注意:
对一列进行计算 所有null值不参与聚合函数的计算
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
分组查询
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
where | 分组之前执行,不满足where条件的不参与分组,where不能对聚合函数进行判断 |
having | 分组之后对结果进行过滤,having可以对聚合函数进行判断 |
eg:
排序查询
select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2;
asc | 升序(默认) |
desc | 降序 |
分页查询
(oracle查询没有limit关键字,引入rownum进行分页查询)
select * from
(select rownum rn, t.* from(select 字段 from t_student) t where rownum <= 终止行
)where rn >= 起始行;
4.数据控制语言(DCL)
管理用户
查看当前用户:
show user;
切换用户:
connect 用户名/密码;
注意连接到数据库超级管理员的时候:
可能会出现以下错误:
解决方法:
connect sys/密码 as sysdba
权限控制
查询用户权限:
select * from dba_sys_privs where grantee='用户名';
授予权限:
grant 权限 to 用户;
权限 | 说明 |
create session | 登录权限 |
create table | 创建表的权限 |
drop any table | 删除任意表 |
insert any table | 向任意表中插入行 |
update any table | 修改任意表中行的权限 |
select on 表名 | 查看指定表的权限 |
eg:
回收权限:
revoke select on 用户2.表2 from 用户1; #回收用户1查看表2的权限
函数
使用
一般形式:
select 函数 from 表名 where 条件;
如果只是想看函数的返回结果可以使用以下形式:
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():
如有错误,欢迎指正!!!