一、用户及权限(DBA有最高系统权限)

1.数据库的安全性:系统的安全性、数据的安全性

2.权限分类:

2.1系统权限:获得后可访问数据库

常用的有create table,create user,create views,create session

2.2对象权限:操作数据库对象的内容

Select  insert  update  delete

3.权限的使用

3.1授予系统权限

grant 系统权限 to 用户 [with admin option]

with admin option :权限具有传递作用

3.2对象权限

对象权限:数据   select  insert  update  delete

grant  对象权限 on 表名 to 用户 [with grant option]

with grant option:对象权限具有传递作用

3.3创建用户:

create user 用户名 identified by 密码

3.4创建表格:

create table 表名(

字段1  字段类型1

字段2  字段类型2

……

4.权限的回收

revoke 权限 from 用户;

5.角色:简化权限管理

create role 角色名;

grant 权限  to 角色;

grant 角色  to 用户;

6. 删除用户

drop user 用户名 [cascade]

cascade:级联删除,删除用户连带把用户下的所有表删除

7.修改用户信息:

   自己改自己的密码

password

修改别人的密码(dba的角色)

alter user 用户名 identified by 密码

第一次使用时密码失效(dba的角色)

alter user 用户名 password expire;

锁定|解锁用户

alter user 用户名 account lock|unlock;

8.小结

CREATE USER DBA           可以创建用户

GRANT                              允许用户给其他用户授予访问自己的数据库对象

CREATE ROLE                   允许DBA创建一个角色,角色包含一组权限

ALTER USER                      用户可以修改自己的口令等信息

REVOKE                            收回用户访问数据库对象的权限

二、数据类型:

1.字符类型

char(n):            固定长度,不足的以空格补充

varchar2(n):     可变长度

2.数值类型

number(p,s):

s=0:整数

number(p) <==> number(p,0),p是有效数

s>0:

number(p,s),p是有效位数,s小数点后有s位

s<0:

number(p,s),总有效位数p+|s|,小数点往左数s位,数的位数置为0,最前面的位数要考虑四舍五入。

3.日期型

date

当前系统时间:sysdate     oracle默认的时间格式:'18-10月-17'

4.large object(大对象型):4G

clob:文本类型

blob:二进制流   图片,音频,视频

bfile:将文件作为整体以二进制流存储

三、SQL语言

1.Sql编码规范

1.1sql语句的所有表名、字段名全部小写,系统保留字、内置函数名、sql保留字大写。

1.2连接符or、in、and、以及=、<=、>=等前后加上一个空格。

1.3对较为复杂的sql语句、过程、函数加上注释,说明算法、功能。

1.4SQL语句的缩进风格

一行有多列,超过80个字符时,基于列对齐原则,采用下行缩进

where子句书写时,每个条件占一行,语句另起一行时,以保留字或者连接符开始,连接符右对齐。

1.5多表连接时,使用表的别名来引用列。

1.6SQL 命令是大小写不敏感

1.7SQL 命令可写成一行或多行

1.8一个关键字不能跨多行或缩写

1.9子句通常位于独立行,以便编辑,并易读

2.Sql语句规则

SQL 语句是大小写不敏感

SQL 语句可写成一行或多行

一个关键字不能跨多行或缩写

子句通常位于独立行,以便编辑,并易读

空格和缩进使程序易读

关键字大写,其他小写

3.sql语言基础

Select                             数据查询语句(select)

DML:manipulation    数据操作语言(insert update delete )

DDL: definition           数据定义语言(create table create user;alter,drop)

DCL: control                    数据控制语言(grant revoke)

DTL: transanction         数据事务语言(commit,rollback)

4. select查询

4.1 简单的查询

select *(所有的列)|字段名(指定的列)... from 表名

4.2 字段加别名、连接操作

空格加别名

空格 as 别名

注意:

如果别名中出现空格,必须用“”引起来

如 select '员工编号:'||empno  "emp no"  from emp

如果别名中出现系统关键字,必须用“”引起来

如 select '员工编号:'||empno  "from"  from emp

将列或字符与其它列连结

用双竖条表示 (||)

产生的结果列是一个字符表达式

4..3 算数表达式

比较运算符:=,!=,>=,<=,<>

算术运算符:+,-,*,/

逻辑运算符:

其他运算符:

优先级

乘法和除法的优先级高于加法和减法

同级运算的顺序是从左到右

表达式中使用括号可强行改变优先级的运算顺序

4.4 删除重复行

使用方法:

SELECT  DISTINCT  deptno  FROM  emp;

注:DISTINCT操作会引起排序,通过排序去掉重复记录!

4.5 限定和排序数据

限定的使用(where):

SELECT  [DISTINCT]  {*, column [alias], ...}  FROM  table  [WHERE condition(s)];

排序数据(order  by)

Desc:降序

Asc:升序

注意:如果按照多个字段排序order by后面可以跟多个字段,需要用逗号(,)隔开

4.6 单行函数

4.6.1.字符函数

大小写转换函数

lower():转换成小写

upper():转换成大写

initcap():首字母大写

字符控制函数

length():字符数

lengthb():字节数

substr(string1,start,length):

start=0时:等同于start=1

start>0时:从左往右数start位,截取从左往右截length

start<0时:从右往左数start位,截取从左往右截length

instr(string1,string2):在母字符串string1中查找子字符串string2的位置;如果string1中没有string2,返回0

trim():去除收尾的空格

trim('字符' from string1):将string1字符串前后的'字符'去除

lpad(string,length,string1):左填充,判断string 的长度是否小于length,如果小于,靠左填充string1

rpad(string,length,string1):右填充,判断string 的长度是否小于length,如果小于,靠右填充string1

replace(string,str1,str2):用str2替换string中的str

4.6.2.数值函数

trunc(num1,s):直接截取

s=0:trunc(num1)

s>0:从小数点后s位开始截取

s<0:从小数点前s位开始截取

round(num1,s):四舍五入

s=0:round(num1)

s>0:从小数点后s位开始四舍五入

s<0:从小数点前s位开始四舍五入

mod(num1,num2):取余,正负数取决于num1

4.6.3.日期函数

日期 - 日期 = 天数

months_between(date1,date2):date1>date2,两个日期之间相差的月份

add_months(date1,n):在指定的日期上加上相应的月份

next_day(date1,weekday):给定日期的下一个星期weekday是多少号

last_day(date1):给定日期的月份最后一天的日期

4.6.4.转换函数

a.对日期格式的转换

to_char(date1,'format')

示例:

查询雇员进入公司的年份和月份,并且按年份的升序排序,

如果年份相同,按照月份的降序排序

select ename,to_char(hiredate,'yyyy') year,to_char(hiredate,'mm') month

from emp

order by year ,month desc;

b.对数字进行转换

to_char(date1,'format')

格式:

9:1~9任意数字

0:0

,: 千位符   100,000,000

.: 小数点

L:local 本地货币语言

$: 美元

C.把字符串转换成日期

to_date(string,'formate')

d.把字符串转换成数值型

to_number(sring):把字符串转换成数值型

4.6.5.通用函数

nvl(arg1,arg2):判断了arg1的值,如果为空,返回arg2,否则返回arg1

nvl2(arg1,arg2,arg3):判断arg1的值,如果为空,返回arg3,否则返回arg2

decode(column|expression,result1,value1,result2,value2...[,value])

4.7 多表查询

4.7.1 笛卡尔积

select * from emp,dept;--笛卡尔积

笛卡尔结果形成于:

连接条件被省略

连接条件无效

第一个表的所有记录连接到第二个表的所有记录

注意:为了避免笛卡尔结果我们总是在 WHERE 子句中使用有效连接

4.7.2 连接类型

I.等值连接

例如:

查询出雇员的姓名,工作,工资及部门名称和部门所在地

select e.ename,e.job,e.sal,d.dname,d.loc

from emp e,dept d

where e.deptno=d.deptno; ---等值连接

Ii. 不等连接

查询出雇员的姓名,工资,以及工资的等级

select e.ename,e.sal,s.grade

from emp e,salgrade s

where e.sal between s.losal and s.hisal;---非等值连接

iii. 自连接

查询雇员的姓名,雇员的领导姓名

select e.ename,m.ename

from emp e,emp m

where e.mgr=m.empno;---自连接

iiii.外连接

左[外]连接

右[外]连接

例如:

查询雇员的姓名,工资,以及雇员的部门,部门名称

(把没有员工的部门也要显示)

Select  e.ename,e.sal,d.deptno,d.dname

from emp e,dept d

where e.deptno(+)=d.deptno ---右连接

select e.ename,m.ename

from emp e,emp m

where e.mgr=m.empno(+); ---左连接

SQL 1999:

select * from table1 cross join table2                      ---交叉连接

natural join table2   ---自然连接

join table2 using(column)                     ---using连接

join table2 on table1.column=table2.column ---on连接

left [outer] join table2 on table1.column=table2.column

LEFT OUTER JOIN

在LEFT OUTER JOIN中,会返回所有左边表中的行,甚至在被连接的表中没有可对应的列名的情况下也如此。

返回左表中的所有行,即使左表中有不符合条件的记录,也会在查询结果中显示。

Oracle8i

•select ename, d.deptno from emp e, dept d where e.deptno = d.deptno (+);

Oracle9i

select ename, Dept.deptno from emp LEFT OUTER JOIN Dept

ON emp.deptno = Dept.deptno

RIGHT OUTER JOIN

在RIGHT OUTER JOIN中返回的是表中所有右边的行,甚至在被连接的表中没有对应的情况下也如此。

返回右表中的所有行,即使右表中有不符合条件的记录,也会在查询结果

中显示。

Oracle8i

select last_name, d.dept_id from employees e, departments d where e.department_id(+) = d.department_id;

Oracle9i

select last_name, d.dept_id from employees e RIGHT OUTER JOIN departments d ON e.department_id = d.department_id;

4.8 分组函数

AVG ([DISTINCT|ALL]n) 求平均数

SUM ([DISTINCT|ALL]n) 求和

COUNT ({ *|[DISTINCT|ALL]expr}) 计数

MAX ([DISTINCT|ALL]expr) 求最大值

MIN ([DISTINCT|ALL]expr) 最小值

STDDEV ([DISTINCT|ALL]x) 标准差

VARIANCE ([DISTINCT|ALL]x) 方差

group by语句的使用

使用GROUP BY子句将表分成小组

组函数忽略空值, 可以使用NVL,NVL2,COALESCE 等函数处理空值

Having子句的使用

Having子句的作用是对行分组进行过滤

记录被分组

使用组函数

匹配HAVING子句的组被显示

4.9 小结

SELECT column, group_function

FROM table

[WHERE condition]

[GROUP BY group_by_expression]

[HAVING group_condition]

[ORDER BY column];

4.10 子查询

4.10.1 查询规则

I.子查询要用括号括起来

Ii.将子查询放在比较运算符的右边

Iii.子查询中不要加ORDER BY子句

Iiii.对单行子查询使用单行运算符

4.10.2子查询使用

区别:1.当需要多个表中的数据时,需要进行多表查询,子查询只能返回单表数据

2.多表查询比子查询快

3.子查询功能强大

嵌套子查询:嵌套的子查询是可以独立运行的,由内而外部的

单行子查询:返回一行记录 ,使用单行记录比较运算符

多行子查询:返回多行 ,使用多行比较运算符

<ANY 指小于最大值

>ANY 指大于最小值

>ALL 指大于最大值

<ALL 指小于最小值

关联子查询:自外而内,2个查询之间的关联

5.DML操作数据

5.1 insert插入

insert into 表名(字段名,...) values(值,...)

insert into 表名  values(值,...)

例如:

INSERT INTO emp (empno, ename, job, 2 mgr, hiredate, sal, comm, 3 deptno) 4 VALUES (7196, 'GREEN', 'SALESMAN', 5 7782, SYSDATE, 2000, NULL, 6 10);

插入时要一一对应,插入空值的,在对应的值那里写null

5.2 update更新

update 表名 set 字段名=值,...  [where ...]

例如:

UPDATE emp SET deptno = 20 WHERE empno = 7782;

注意:修改记录时要注意不能违反完整性约束(比如插入部门时,一定是在部门表里有的部门才行)

5.3 delete 删除

delete [from] 表名 [where 条件]

例如:

DELETE FROM dept WHERE dname = 'DEVELOPMENT';

注意:删除记录时要注意不能违反完整性约束

6.事务

开始于第一个执行的语句

结束于:

COMMIT 或 ROLLBACK

DDL or DCL (grant/revoke) 语句

某些错误,退出,或系统崩溃

COMMIT和 ROLLBACK的优点

保证数据一致性

在数据永久性生效前重新查看修改的数据

相关逻辑操作单元

事务控制图:

6.1提交或回滚前数据的状态:

以前的数据可恢复.

当前的用户可看到DML操作的结果.

其他用户不能看到DML操作的结果.

被操作的数据被锁住,其他用户不能修改这些数据

6.2提交后数据的状态:

数据的修改被永久写在数据库中.

数据以前的状态永久性丢失.

所有的用户都能看到操作后的结果.

记录锁被释放,其他用户可操作这些记录.

所有的 savepoints 被去掉.

6.3回滚后数据的状态:

语句将使所有的修改失效.

修改的数据被回退.

恢复数据以前的状态.

行级锁被释放.

6.4回退到某一标识

使用语句产生一个标识,将事务分成几个阶段.

可回退到标识指定的阶段.

6.5 事务特性:

提交:commit

回滚:rollback

设置回滚点:

savepoint 点名

rollback to 点名

•1、原子性(atomicity):

一个事务中包含的所有sql语句都是一个不可分割的单元。

•2、一致性(consistency)

事务必须确保数据库的状态是一致的。

•3、隔离性(isolation)

多个事务独立运行,彼此不影响。

•4、持久性(durability)

事务一旦提交,数据库的变化就会被永久保留下来。

6.6 小结:

7.Alter table语句

7.1.增加字段

alter table 表名 add 字段名 数据类型  [default 默认值]

7.2.修改字段(数据类型以及默认值)

alter table 表名 modify 字段名 数据类型 [default 默认值]

7.3.修改字段名

alter table 表名 rename column 旧列名 to 新列名

7.4.删除字段

alter table 表名 drop column 列名

8.修改表及加注释

8.1修改表名

rename 旧表名 to 新表名

8.2删除表

drop table 表名

8.3为字段加注释

comment on column 表名.字段名  is '注释内容'

8.4查看注释信息

select * from user_col_comments;

8.5为表添加注释

comment on table 表名 is '注释内容'

8.6查看注释信息

select * from user_tab_comments;

8.7删除表中数据

truncate table 表名 :

9.约束

9.1.主键约束(primary key)

9.2.唯一约束(unique)

9.3.非空约束(not null)

9.4.检查约束(check)

9.5.外键约束(foreign key):父表,子表

例如:列级约束

create table person(

pid number(18) primary key,

name varchar2(20) unique,

sex char(6) default 'male' check(sex='male' or 'female') ,

birthday date not null

);

例如:表级约束

create table person1(

pid number(18),

name varchar2(20),

sex char(6) default 'male',

birthday date not null,

constraint person_pid_pk primary key(pid),

constraint person_name_uq unique(name),

constraint person_sex_ck check(sex in('male','female'))

);

其中:  default为默认值

Constraint为约束关键字

约束时not null不能放在前面

REFERENCES 外键约束的关键字

使约束失效

在ALTER TABLE 语句中执行DISABLE子句可使完整性约束失效

使用 CASCADE 选项可使依赖的完整约束失效

例如:

ALTER TABLE emp 2 DISABLE CONSTRAINT emp_empno_pk CASCADE;

使约束生效

使用ENABLE子句将失效的约束生效.

当使UNIQUE 或 PRIMARY KEY约束生效时,会自动创建 UNIQUE 或PRIMARY KEY 索引.

例如:

ALTER TABLE emp ENABLE CONSTRAINT emp_empno_pk;

查看约束

通过查看 USER_CONSTRAINTS 表可得到用户的所有约束.

例如:

SELECT constraint_name, constraint_type, search_condition FROM user_constraints WHERE table_name = 'EMP';

10.视图

10.1 为什么使用视图

限制对数据的访问

很容易的写成复杂的查询

允许数据的独立性

不同的视图可获得相同的数据

10.2简单视图和复杂视图

10.3创建视图

CREATE VIEW empvu10(视图名)AS SELECT empno, ename, job

FROM emp WHERE deptno = 10;

10.4修改视图

使用CREATE OR REPLACE VIEW 子句修改 视图 ,并为每列加别名.

CREATE OR REPLACE VIEW empvu10

(employee_number, employee_name, job_title)

AS SELECT empno, ename, job

FROM emp

WHERE deptno = 10;

在CREATE VIEW语句中列的别名的顺序是和子查询中一致的

10.5 删除视图

DROP VIEW view(视图名);

删除视图并不删除基表中的数据.

11.数据库对象

11.1序列(sequence) --  一组有规律的数字

11.1.1创建

create sequence 序列名

11.1.2序列的使用

属性:

Nextval :序列下一个值

currval :current value 序列当前的值

序列名.属性

ps:当第一次使用序列的时候,只能先调用nextval

create sequence 序列名

[increment by n] --步长

[start with n]  --初始值

[maxvalue n]  --最大值

[minvalue n]  --最小值

[cache n]  --缓存,提前将n位序列存入,使用时节省效率;默认是20

[cycle]  --循环

11.1.3修改序列

修改的规则:

你必须是序列号的所有者并有ALTER权限.

只有以后的序列号受影响.

序列号可被删除并重建,以获得新的开始值.

一些确认被执行. 例如:MAXVALUE不能小于当前序列号.

11.1.4删除序列

使用 DROP SEQUENCE 语句删除序列号

DROP SEQUENCE dept_deptno(序列名);

11.2索引(index)

11.2.1创建索引

可基于一列或多列创建索引

CREATE INDEX index ON table (column[, column]...);

11.2.2创建索引规则

索引列应该经常在 WHERE 子句中,或是连接条件.

此列值域比较广.

此列包含大量空值.

在 WHERE 子句或连接条件中经常一起使用的列.

对大表查询的结果小于总数据的2~4% .

下列的表不适合建索引:

表很小

列不经常在WHERE子句中使用

对大表查询的结果大于总数据的2~4% .

表经常被修改

11.2.3删除索引

DROP INDEX index(索引名);

11.3 同义词(synonym)

创建和删除同义词

创建:CREATE SYNONYM d_sum 2 FOR dept_sum_vu;

删除:DROP SYNONYM d_sum;

11.4 小结

数据库常用对象

第三周博客之二---Oracle中的sql语句的更多相关文章

  1. oracle中查看sql语句的执行计划

    1.在pl/sql中打开cmd命令容器 2.在cmd命令窗口中输入:explain plan for select * from t; 3.查看sql语句的执行计划:select * from tab ...

  2. 第三周博客之一---Oracle基础知识

    一.数据库的定义.作用介绍 1.定义:按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库. 2.数据库的发展历史: 2.1.在1962年数据库一词出现在系统研发的公司的技术备忘录中 2. ...

  3. 第三周博客总结 <西北师范大学| 周安伟>

    一,本周助教小结 工作稳步推进,时间分配合理,点评效率有所提高,主要进行了评分工作,工作情况都汇总到了Excel中. 二,助教本人博客       https://home.cnblogs.com/u ...

  4. 第三周博客作业<西北师范大学|李晓婷>

    1.助教博客链接:https://www.cnblogs.com/lxt-/MyComments.html 2.学生作业打分要求:   https://www.cnblogs.com/nwnu-dai ...

  5. 第一周博客之二---OA项目环境搭建及开发包部署

    OA项目环境搭建 一个项目想要能够在开发人员打包好项目包之后进行测试,就必须进行项目测试环境的搭建,要根据开发工程师的开发环境采用不同的测试环境,以下只是浅谈下Java项目OA(办公自动化平台)的环境 ...

  6. 宇宙最帅叉叉——第三周博客 for 需求改进&原型设计

    需求改进&原型设计 Ⅰ. 需求&原型改进 根据组内成员的讨论以及老师和同学的建议,本周进行了以下的改进: 添加注册功能   根据用户图形界面接收的用户账号及密码,客户端将接受内容记录在 ...

  7. ORACLE中通过SQL语句(alter table)来增加、删除、修改字段

    1.添加字段: alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ; 2.添加备注: comment on ...

  8. Oracle中查看SQL语句的索引命中情况及CPU占用

    第一种: 在PL/SQL中,在Explain plan Window中执行要优化的Sql语句.结果,如下图: Object name列中显示了命中的索引名,Cost列显示了CPU的使用率(%). 第二 ...

  9. oracle 中的sql 语句

    1.update 表名 set 表字段=(select 另一个表中的相同字段 from 另一个表表名 where 表.字段=另一个表.字段) where  表.字段=? 例子:将某个表中的更新到另一个 ...

随机推荐

  1. Java链接MySQL数据库的用配置文件和不用配置文件的代码

    1.利用配置文件(db.properties)链接MySQL数据库 package tool; import java.io.FileInputStream;import java.sql.Conne ...

  2. HTML与CSS的一些知识(四)

    续: line-height 用于设置一行文本行高,一般用于文本的垂直居中: display 用于设置元素的显示方式 float 浮动,让元素漂浮起来排列 浮动的影响: a.浮动后,行内元素可以支持宽 ...

  3. 【我的前端自学之路】【HTML5】.html和.htm的区别

    以下为自学笔记内容,仅供参考. 转发请保留原文链接:https://www.cnblogs.com/it-dennis/p/10508171.html .htm 和 .html 的区别 .htm 和 ...

  4. Java 的 clone 方法 && 浅复制和深复制

    1 Java中对象的创建过程 java创建对象的方式有以下两种: (1)使用new操作符创建一个对象 (2)使用clone的方法复制一个对象,(在Java中,clone是Object类的protect ...

  5. PyQt5——布局管理

    PyQt5布局管理使用方法详见:https://blog.csdn.net/jia666666/article/list/3?t=1& PyQt5布局管理汇总: 1.QHBoxLayout 2 ...

  6. 雷林鹏分享:Composer 安装

    下午在安装 Laravel 框架过程中,遇到了不少问题,因为 Laravel 的安装依赖于 composer,这里就先介绍一下 composer 的安装方法: 安装方法: #下载 sudo curl ...

  7. 射频(SX1278)

    射频是什么? 官方说法:RF,Radio Frequency. (不懂的人,看了还是不懂,不过对于物联网行业的开发工程师.产品经理和项目经理,还是有需要对射频有个基础了解的.) 燚智能解读: 两个人, ...

  8. 如何利用redis来进行分布式集群系统的限流设计

    在很多高并发请求的情况下,我们经常需要对系统进行限流,而且需要对应用集群进行全局的限流,那么我们如何类实现呢. 我们可以利用redis的缓存来进行实现,并且结合mysql数据库一起,先来看一个流程图. ...

  9. Failed to find configured root that contains

    这个主要问题是在android系统下7.0 拍照时,Android提供FileProvider类来供应用之间共享数据. 出现这个问题多为xml文件 path 类型和代码中调用的类型不同导致的 以下为多 ...

  10. 8.1 GOF 设计模式:关于设计模式

    关于设计模式…Design Pattern  追求永恒的美1.1 “模式”一词的起源 “每个模式描述了: 一个在我们周围反复出现的问题, 然后是针对这个问题的解决方案. 这样,其他人可以无数次地反复 ...