Oracle基本语法(SQLPlus)

发布于:2024-06-22 ⋅ 阅读:(168) ⋅ 点赞:(0)

目录:

前言:

准备工作:

登录:

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(): 



如有错误,欢迎指正!!!


网站公告

今日签到

点亮在社区的每一天
去签到