Oracle 学习(三)基本SQL语法

一、学习目标

  • 基础SQL语法

二、基础SQL语法

(1)DDL语言(data definition language)数据定义语言

1.建表 create table

2.操作表 alter table

  • a.添加字段:alter table 表名 add 要添加的字段名
  • b.删除字段:alter table 表名 drop column 要删除的字段名
  • c.修改字段:alter table 表名 rename 原字段名 to 新字段名
  • d.修改字段类型:alter table 表名 modify 字段名 字段类型

3.删除表 drop table

(2)DML语言(Data Manipulation Language)数据操纵语言

1.新增记录:insert into 表名(字段名...) values(信息...)
2.修改记录:update 表名 set 要修改的字段记录 where 判断条件
3.删除记录:delete from 表名 where 判断条件

(3)DQL语言(DQL Data Query Languate) 数据查询语言

1.查询记录:select 查询的字段 from 表名 where 判断条件

(4)DCL语言(Data Controller Languate) 数据控制语言

1.解锁: conn / as sysdba --用sys登录

alter user 用户名 account unlock --给用户解锁

锁定:alter user 用户名 account lock

2.创建用户:create user 用户名 identified by 密码
修改用户密码:alter user 用户名 identified by 密码

3.删除用户:drop user 用户名

drop user 用户名 cascade 删除用户和用户创建的对象

4.常用角色:

connect【修改会话的权限】

resource【创建table、view、procedure、trigger的·权限】

dba【拥有所有的系统权限,包括配置表空间,赋给其他用户权限】

5.权限:

  • a. 系统权限 赋予:grant create session to 用户名 [with admin option(权限可传递)]
    撤回:revoke create session from 用户名 查看当前用户: select * from session_privs
  • b. 对象权限 赋予:grant 权限 on 对象 to 用户名 [with grant option(权限可传递)]
    撤回:revoke 权限 on 对象 from 用户名
    查看当前用户:select * from user_tab_privs

6.角色:

  • a. 常用的系统角色:
    connect角色:该角色具有创建会话,修改会话等权限
    resource角色: 具有创建表格(create table),创建视图(create view),创建存储(create procedure) 等 权限
    dba角色:拥有所有的系统权限,包括无限制的空间选额和给其他用户授予各种权限的能力。用户SYSTEM 拥有DBA角色。
  • b. 赋予角色给某一个用户:grant 角色名... to 用户名
    撤销用户的某个角色:revoke 角色名 from 用户名
    查询当前用户拥有的角色:select * from user_role_privs
    查询当前用户的角色的权限信息:select * from role_sys_privs
  • c. 创建自定义角色:create role 角色名
    删除角色: drop role 角色名
    赋予权限给角色:grant 权限名 to 角色名
    撤销角色的权限:revoke 权限名 from 角色名
    查看某个角色的具体权限: select * from dba_sys_privs where grantee =角色名; --注意: 当前登录用需要dba角色的权限才能查看

7.表空间是数据库最大的逻辑单元,一个Oracle数据库至少包含一个表空间,就是名为SYSTEM的系统表空间。每个表空间是由一个或多个数据文件组成的,一个数据文件只能与一个表空间相关联。在oracle中所有的表都存储在表空间中。

a. 创建user1_tablespace表空间--------- 注意:创建表空间需要对应的(create tablespace)权限

CREATE TABLESPACE user1_tablespace --表空间名称
DATAFILE 'E:\user1.DBF' ----路径名称
SIZE 100M ----是指定该数据文件的大小,也就是表空间的大小。
AUTOEXTEND ON NEXT 32M MAXSIZE UNLIMITED ----大小自动扩展,没有最大限制
LOGGING ----logging 表示在创建表空间时,将生成日志记录
EXTENT MANAGEMENT LOCAL ----表示创建的表空间采用"本地化"方式管理
SEGMENT SPACE MANAGEMENT AUTO; ----设置表空间中段的管理方式为自动;

b. 创建了表空间怎么样 (分配给用户) 如果创建用户没有设置默认表空间,则默认为USERS表空间

CREATE USER 用户名
IDENTIFIED BY 密码
DEFAULT TABLESPACE user1_tablespace

c. 查看用户对应的默认表空间

SELECT USERNAME, DEFAULT_TABLESPACE FROM DBA_USERS where USERNAME='user1';

d. 修改用户的默认表空间

alter user 用户名 default tablespace user1_tablespace;

e. 查看表空间的名称及大小

SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) "ts_size(M)"
FROM dba_tablespaces t, dba_data_files d
WHERE t.tablespace_name = d.tablespace_name
GROUP BY t.tablespace_name;

f. 查看表空间物理文件的名称及大小

SELECT tablespace_name,
file_id,
file_name,
round(bytes / (1024 * 1024), 0) total_space
FROM dba_data_files
ORDER BY tablespace_name;

g. 查看表空间的使用情况

SELECT SUM(bytes) / (1024 * 1024) as "free_space(M)", tablespace_name
FROM dba_free_space
GROUP BY tablespace_name;

h. 增加数据文件

ALTER TABLESPACE user1_tablespace
ADD DATAFILE 'E:\user1_add.DBF' --添加数据文件
SIZE 100M --大小100M
AUTOEXTEND ON -- 大小自动扩展
NEXT 10M --扩展的增量为10M
MAXSIZE 1024M; --最大扩展到1024M

i. 修改数据文件的大小

ALTER DATABASE DATAFILE 'E:\user1_add.DBF' -- 文件路径
RESIZE 50M;

j. 删除数据文件

ALTER TABLESPACE user1_tablespace
DROP DATAFILE 'E:\user1_add.DBF'

k. 删除表空间

删除user 只是删除了该user下的schema objects,是不会删除相应的tablespace的

drop user ×× cascade

删除tablespace

DROP TABLESPACE tablespace_xxx INCLUDING CONTENTS AND DATAFILES;

(5)约束

约束:保证数据库中数据的安全性

1.主键约束(唯一性、非空性):primary key
语法:alter table 表名 add constraint 约束名 primary key(约束的字段名)

2.唯一约束(唯一性,可以为空):unique
语法:alter table 表名 add constraint 约束名 unique(约束的字段名)

3.检查约束:check
语法:alter table 表名 add constraint 约束名 check(约束的字段名)

4.外键约束:foreign key
语法:alter table 表名 add constraint 约束名 foreign key(约束的字段名) references 主表 名(关联的字段名) 【on delete cascade(删除主表时,从表也删除)/on delete null(删除主表时,从表的关联设为空)】

(6)查询

1.单表查询

语法:select [distinct] 字段名 from 表名 where 条件 order by 排序字段 [asc/desc]

  • a. 去除重复行:distinct
  • b. 模糊查询:like '%*%'(包含*的)、like '*%'(以*开头的)、like '%*'(以*结尾的)
  • c.除此之外的:not
  • d.排序(必须在sql最后):order by 排序依据 【 desc:降序/asc:升序(默认)】

2.分组查询

语法:select 分组的字段 ,查询的字段 from 表名 group by 分组的字段 having 查询条件

分组函数:

  • a.函数:count(统计函数)、max(最大值)、min(最小值)、avg(平均值)、sum(求和)

数字函数:dual(dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录)

  • a. abs(绝对值)、sqrt(求平方根)、power(求幂)、round(四舍五入)

字符函数:dual

  • a.连接两个字符串:concat(字符1,字符2)
  • b.替换字符串:replace(字符串,被替换的字符,替换的字符)
  • c.截取字符串:substr(字符串,从第几个开始,截取几个)
  • d.转大写 upper(被转的字符串)
  • e.转小写 lower(被转的字符串)

转换函数:dual

  • a.将字符转串换为日期 to_date(字符串,日期格式)
  • b.将日期转换为cahr数据类型 to_char(日期,'yyyy')得到日期的年份to_char(日期,'mm')得到日期的月份
    to_char(日期,'dd')得到日期的日(几号)to_char(日期,'day')得到日期的星期

日期函数:dual

  • a.返回在日期基础上再加3个月后新的日期 select sysdate,add_months(sysdate,3) hz from dual;
  • b.返.回日期所在月份最后一天的日期 select sysdate,last_day(sysdate) hz from dual;
  • c.截取日期的指定部分 select extract (year/month/day from date '2001-2-16' ) from dual;

3.内联查询:将一个查出来的结果当做条件来查询

4.多表关联查询

连接运算:连接运算是由一个笛卡尔积运算和一个选取运算构成的。首先用笛卡尔积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运算,确保只把分别来自两个数据集合并且具有重叠部分(符合选取运算)的行合并在一起

select 查询的字段 from 表1 left/right/inner join 表2 on 条件
  • a. left[outer] join(左连接) :返回包括左表(集合)中的所有记录和右表(集合)中联结字段相等的记录
  • b. right[outer] join(右连接) :返回包括右表中的所有记录和左表中联结字段相等的记录
  • c. inner join(等值连接) :只返回两个表中联结字段相等的行

(7)视图

1.视图是一种数据库对象,是从一个或者多个数据表或视图中导出的虚表视图所对应的数据并不真正地存储在视图中, 而是存储在所引用的数据表中,视图的结构和数据是对数据表进行查询的结果。

2.作用:

  • a.简化数据操作:视图可以简化用户处理数据的方式
  • b.着重于特定数据:不必要的数据或敏感数据可以不出现在视图中。
  • c.视图提供了一个简单而有效的安全机制,可以定制不同用户对数据的访问权限。
  • d.提供向后兼容性:视图使用户能够在表的架构更改时为表创建向后兼容接口。
  • e.自定义数据:视图允许用户以不同方式查看数据。
  • f.导出和导入数据:可使用视图将数据导出到其他应用程序。

3.语法:

创建: create 【or replace】 view 视图名(视图字段名) as 结果集 【 with read only】

or replace :若所创建的试图已经存在,ORACLE自动重建该视图;
force :不管基表是否存在,ORACLE都会自动创建该视图;
noforce :只有基表都存在,ORACLE才会创建该视图;
with read only :该视图上不能进行任何DML操作;
with check option :插入或者修改的数据必须满足视图定义的约束

删除: drop view 视图名

删除视图不影响基表中的数据。

(8)索引

1.类似书的目录结构,索引直接指向包含所查询值的行的位置,减少磁盘I/O,与所索引的表是相互独立的物理结构,Oracle 自动使用并维护索引,插入、删除、更新表后,自动更新索引。

2.作用:提高数据库查询语句的速度

3.类型:

  • a.唯一索引:当某列的值都不相同时(当建立主键约束或唯一约束时会自动建立唯一索引)
    语法:create unique index 索引名 on 表名(表字段)

    b.组合索引:当两个或多个列一起出现在where条件中时,则在这些列中同时创建组合索引
    语法:create unique index 索引名 on 表名(表字段)

    c.反向索引:
    语法:create unique index 索引名 on 表名(表字段) reverse

    d.位图索引:列中有非常多的重复的值时候。例如某列保存了 “性别”信息。Where 条件中包含了 很多OR操作符。较少的update操作,因为要相应的跟新所有的bitmap
    语法:create bitmap index 索引名 on 表名(字段名)
    结构:位图索引使用位图作为键值,对于表中的每一数据行位图包含了TRUE(1)、FALSE(0)、或NULL值。
    优点:位图以一种压缩格式存放,因此占用的磁盘空间比标准索引要小得多

    e.基于函数索引:在WHERE条件语句中包含函数或者表达式时
    语法:create index 索引名 on 表名(function(字段名))

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值