oracle 授权 增删改查权限_Oracle增删改查与函数

5875a54a3b41129bd2b0e0a89d41b91d.png

SQL -- 结构化查询语言 关系型数据库

分类: DDL DML DCL DQL TCL

Oracle 的数据类型:

字符 char() varchar2()

数字 number(p,s)

时间 date timestamp

文件 clob blob 二维表 table

创建表 CREATE

create table 表名 ( 列名 数据类型 [约束], 列名 类型 ... --表的结构) ;

约束: not null , primary key , foreign key , unique , check

表 列 column 字段 filed 属性

行 row 记录 row

create alter drop

--------------------------------------------------------------------------

修改表 ALTER

注: 前提 就是表中还没有任何数据

增加字段(列)

alter table 表名 add 列名 数据类型 ;

alter table 表名 add 列名 数据类型 not null ; --匿名约束

alter table 表名 add 列名 数据类型 default 默认值 ;

修改字段

alter table 表名 modify 列名 新的数据类型 ;

alter table 表名 modify 列名 新的数据类型 default 默认值 ;

修改字段名

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

增加约束

alter table 表名 add constraint 约束名 约束的关键字 (列名) ;

--命名约束

alter table 表名 modify 列名 数据类型 not null ;

删除字段

alter table 表名 drop column 列名 ;

删除约束

alter table 表名 drop constraint 约束名 ;

修改表的名字

alter table 旧的表名 rename to 新的表名 ;

rename 旧的表名 to 新的表名 ;

SQL DML 语句

增删改查

简单查询:

select 从数据库表中提取信息。 语法:

select * | 列名 | 表达式 from 表名 where 过滤条件 order by 列名 ;

* --代表所有列

列名 --指定列,多列用逗号分隔

表达式 -- 常量 变量 函数等组成表达式

order by 默认升序 ASC ,降序 DESC

select stuname, age, classno from infos where seat<5 orader by age desc ;

增加数据 插入数据 insert 语法:

insert into 表名【(列名1,列名2,列名3...) 】 values (值1,值2,值3 ...) ;

时间函数

to_date() 将时间进行格式化输入

格式化字符 YYYY 年 year

MM 月 month

DD 日 day

hh24 24小时 hh12 12小时

MI 分

SS 秒

to_date('2020-02-26 11:28:35','yyyy-mm-dd hh24:mi:ss')

insert int infos values (...) ;

注意: 对数据的增删改,需要提交 commit 指令;

常量 == 字面量 值

select 执行的结果,获取得是一个 结果集

创建表的另外一个种方式 根据结果集创建表

crate table 表名 ( --结构);

insert into 表名 as select ... from ... ;

--向表中插入一个结果集

修改数据 update 更新 语法:

update 表名 set 列名=值, 列名=值 ... where 条件 ;

删除数据 delete 删除 语法:

delete from 表名 where 条件;

清空表中的所有数据

delete from 表名; --DML rollback回滚 安全

truncate table 表名; --DDL 不能回滚 不安全

drop table 表名 ; --- 删除表

补充: 设置sqlplus 环境

SQL> show linesize ;

SQL> set linesize 120 ; -- 设置每行宽度120个字符

SQL> col 列名 format a20 ; --设置列宽20个字符长度

SQL 增删改查 insert delete update select

用户SCOTT 口令 tiger 过期

雇员表 EMP

部门表 DEPT

薪水等级表 SALGRADE

SQL语句 操作符

算术运算 + 、 - 、 * 、 / --算术表达式

--复杂的运算使用 函数 来实现

问题: 每名员工的年终奖是2000元,请显示基本工资在2000元以上的员工的月工资,年总工资。

select ename 姓名 , sal "薪水", (sal*12+2000) as "年总工资" from emp where sal > 2000;

关系运算 = 等于 > 大于 < 小于 >= 大于等于 <= 小于等于 != 不等于 -- <> ^=

select ename 姓名 , sal "薪水", (sal*12+2000) as "年总工资" from emp where sal > 2000;

--通常作为where条件从句的一部分进行判断

逻辑运算 and 与 、 or 或 、 not 非

高级查询

消除重复的行

distinct

空值的判断:

is null , is not null

in操作

in (集合) , not in (集合)

between ... and ...

sal between 1000 and 2000 --- sal>=1000 and sal<=2000

模糊查询 like

通配符 % :表示零个或者多个任意字符 -- *

通配符 _ : 代表一个任意字符 -- ?

like 'S%' 以S开头的所有字符串

like '_S%' 第二个字符是S的所有字符串

字符串连接 ||

'Hello' || 'World' = 'HelloWorld'

集合运算:

select 执行结果就是一个集合

交集 intersect 返回两个查询共有的记录

并集 union [all] 返回各个查询的所有记录 [包括重复的记录]

补集 minus 返回第一个查询减去第二个查询剩余的记录

----------------------------------------------------------------------------------------

重难点

连接查询 (多表查询)

问题: 请查询出工资大于2000元的员工的,姓名,部门,工作,工资。

笛卡尔集 select * from a cross join b ; -- select * from a, b ;

select ename, dname, job, sal from emp, dept where emp.deptno=dept.deptno and sal>2000;

内连接:

inner join

满足连接条件的左右两表的记录都选取出来,不满足连接条件的记录不选取。

select e.ename, d.dname, e.job, e.sal from emp e, dept d where e.deptno=d.deptno and e.sal>2000;

--多表查询

select e.ename, d.dname, e.job, e.sal from emp e inner join dept d on e.deptno=d.deptno where e.sal>2000;

外连接:

问题: 查询出公司所有部门及员工的姓名、工作、工资。

部门名称、姓名、工作、工资

outer join

满足连接条件的左右两表的记录都选取出来,不满足连接条件的记录也可能选取出来。

左(外)连接

left join

select d.dname, e.ename, e.job, e.sal from emp e left join dept d on e.deptno=d.deptno;

右连接

right join

select d.dname, e.ename, e.job, e.sal from emp e right join dept d on e.deptno=d.deptno;

oralce 私有的写法:

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

子查询

在select 、update 、 delete 等语句内部可以出现的 select 语句 。内部的语句 嵌套的select 语句 子查询

位置划分:

1、内部嵌套的select语句结果可以作为外部语句条件从句 where 的一部分。

2、内部嵌套的select语句可以作为外部查询等语句的临时表

类型划分:

1、单行子查询: 最多一行记录

2、多行子查询: 可能有多行记录

案例1: 查询出销售部(SALES) 下面的员工的姓名,工作,工资。

select ename, job, sal from emp where deptno = (select deptno from dept where dname='SALES' );

案例2:查询出emp表中比任意一个销售员("SALESMAN") 工资低的员工姓名、工作、工资。

select ename, job, sal from emp where sal < any [all] (select sal from emp where job='SALESMAN');

-- 多行子查询 需要用到 any , all , in , not in 等关键字 ,any 任意 , all 所有

伪列: oracle 表的附加列,不能(增删改)存储数据,只能用于查询(查)。

rowid 返回的是行的物理地址。 插入记录时生成, 可以快速定位行。

rownumber 为结果集的每一行标识一个行号。 查询时生成,可以限制查询返回行数。

案例3: 查询出员工表中前5名的员工的姓名,工作,工资。

select rownum, ename, job, sal from emp where rownum<=5;

案例4: 查询出工资最高的前5名的员工的姓名,工作,工资。

select * from (select ename,job,sal from emp order by sal desc ) where rownum<=5 ;

分页查询

select * from (select rownum r, ename, job, sal from emp ) t where t.r>=6 and t.r<=10 ;

子查询练习题:

1.创建一查询,显示与Blake在同一部门工作的雇员的姓名和受雇日期,但是Blake不包含在内。

select ename, hiredate from emp where deptno = (select deptno from emp where ename='Blake') and ename!='Blake' ;

2.显示位置在Dallas的部门内的雇员姓名、编号以及工作。

select ename, empno, job from emp where deptno in (select deptno from dept where loc='Dallas') ;

3.显示被King直接管理的雇员的姓名以及工资。

select ename, sal from emp where mgr = (select empno from emp where ename='King') ;

4.创建一查询,显示能获得与Scott一样工资和奖金的其他雇员的姓名、受雇日期以及工资。

select ename, hiredate, sal from emp where sal = (select sal from emp where ename='Scott')

and comm = (select comm from emp where ename='Scott') ;

select 高级查询 distinct , is null , in , between ... and ... , like % _ , ||

集合查询: 交集intersect 并集union 补集 minus

连接查询 -- 多表查询

内连接 inner join ... on

外连接 outer join

左外连接 left join

右外连接 right join

子查询:

按位置:

1、 子查询作为外部条件从句的一部分 where ...

2、 子查询作为外部查询的临时表 from ...

按返回:

1.单行子查询

2.多行子查询 any , all , in , not in

-----------------------------------------------------------------------------------

Oracle 函数

通俗地说就是封装了实现特定功能的代码块。 目的是为了代码重用

定义了一个名字叫fun的函数

public static int fun(int x, int y){

System.out.println("实现累加从"+x+"到"+y);

int relust = 0;

for (int i =x ; i<=y ; i ++ ){

relust += i ;

}

System.out.println("累加的计算完成,结果是:"+ relust);

return relust ;

}

oracle 内置的函数:

单行函数: mod(x,y) -- 了解

字符函数 : ASCII(x) , length(x)

数字函数 : power(x,y)

时间函数 : ADD_MONTHS(d,n) last_day(d) round(d,fmt) , EXTRACT(fmt from d) ,between_months(d,d)

转换函数 : TO_CHAR(d|n[,fmt]) , TO_DATE(x [,fmt]) , TO_NUMBER(x[,fmt])

其他的单行函数:

NVL(x,value) NVL2(x,value1,value2)

--注意 空值是不能进行运算的

聚合函数 -- 熟练掌握

avg() 求平均值

sum() 求和

min() 求最小值

max() 求最大值

count() 数据统计

分组 group by

select ... from ... where ... group by 分组的依据 ;

案例: 计算公司里每个岗位(JOB) 的人数。

select job, count(empno) from emp group by job ;

案例:提取显示一下公司里平均工资大于2000的部门(部门的编号)。

案例: 提取显示一下公司里(不包括总经理'PRESIDENT')平均工资大于2000的部门(部门的编号)。

select deptno, avg(sal) from emp where job!='PRESIDENT' group by deptno having avg(sal)>2000;

-- 分组前过滤 where 分组后过滤用 having

案例: 提取显示一下公司里(不包括总经理'PRESIDENT')平均工资大于2000的部门的名称(部门的名称)。

select dname from dept where deptno in (select deptno, avg(sal) from emp where job!='PRESIDENT' group by deptno having avg(sal)>2000) ;

select ename, dname from emp cross join dept where sal>2000 order by sal desc,ename desc; ----笛卡尔集?

select ename, dname,sal from emp , dept where emp.deptno(+)=dept.deptno and sal>2000 order by sal desc,ename desc; ----右连接

select ename, dname,sal from emp , dept where emp.deptno=dept.deptno(+) and sal>2000 order by sal desc,ename desc; -----左连接

检索所有的员工的姓名,以及他经理的姓名?

select e.ename, m.ename from emp e , emp m where e.mgr=m.empno; --自连接

select e.ename, m.ename from emp e inner join emp m on e.mgr=m.empno; -- 标准的自连接写法

查询薪水大于岗位平均薪水的员工?

select * from emp e where sal > (select avg(sal) from emp where job=e.job ) ; -- 相关子查询

查询工资子大于3000的员工所在的部门名称?

exists (select ... from ...) 存在子查询

--子查询返回的是 布尔值 ture , false

select dname from dept d where exists (select * from emp where sal>3000 and deptno=d.deptno) ;

其他函数

nullif(expr1, expr2) -- expr1等于expr2 返回空,否则返回exp1

select ename, job, nullif(length(ename),length(job)) from emp;

coalesce(expr1,expr2,expr3...exprn) -- 从左开始遇到第一个表达式非空就返回

select ename,job, coalesce(comm, sal, 10 ) from emp;

条件表达式函数:

case [expr] when ... then ...

when ... then ...

else ...

end

------------------------------------------------------

select ename,sal,case deptno when 10 then 'dept10'

when 20 then 'dept20'

when 30 then 'dept30'

else 'other' end department

from emp ;

select ename,sal,case when deptno =10 then 'dept10'

when deptno =20 then 'dept20'

when deptno =30 then 'dept30'

else 'other' end department

from emp;

-----------------------------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1021 删除最外层的括号

原题链接 class Solution { public:string removeOuterParentheses(string S) {string str;int flag 0;for(char c: S){if(c( && flag>0){strc;}if(c ) && flag-->1){strc;}}return str;} };

javafx树视图加选框_JavaFX缺少的功能调查:表视图

javafx树视图加选框JavaFX的TableView&#xff08;和TreeTableView&#xff09;赢得了我最近的“ JavaFX缺失功能”调查以及许多后续讨论中&#xff08;尤其是我们苏黎世JavaFX Meetup小组的成员 &#xff09;中提到最多的控件的价格。 &#xff09;。 我想原因之一是一个简单的…

_用WSL,MobaXterm,Cmder配置linux开发环境

离不开Windows的理由很多,作为后端开发需要使用linux的情况也很多,双系统总归是不方便,而且linux下的GUI体验也没用Win 10好. 如果使用虚拟机,那么文件交换和网络等各种问题也需要解决,对系统的内存要求也更高一些.微软为了让更多的开发人员留在Win10上面,开发了WSL功能.目前的…

wamp测试php,php开发环境搭建/测试/LAMP/WAMP

常用的php开发环境由四部分构成:php预处理器&#xff0c;Apache服务器&#xff0c;mysql数据库&#xff0c;phpmyadmin(管理mysql的图形化页面界面)php语言是一种跨平台语言&#xff0c;常用php环境基于windows和Linux两种操作系统搭建&#xff0c;在Linux系统由Apache、mysql、…

LeetCode 933.最近的请求次数

原题链接 解题思路&#xff1a;主要保留PING中比3000大的 class RecentCounter { public:RecentCounter() {}int ping(int t) {time.push(t);while(time.front()<t-3000){ //查询T是否比3000大time.pop(); //T比3000小就出队}return time.size();}queue<int> time;…

对象容器设计模式_容器对象模式。 一种新的测试模式。

对象容器设计模式如果您搜索什么是页面对象的描述&#xff0c;您会发现页面对象模式为我们提供了一种以可重用和可维护的方式对内容建模的常识方法。 还要指出&#xff1a;在Web应用程序的UI中&#xff0c;您的测试与某些区域交互。 Page Object只是将它们建模为测试代码中的对…

php中上传图片怎么显示出来,PHP上传图片类显示缩略图功能

有缩略图功能 但是 感觉不全面&#xff0c;而且有点问题&#xff0c;继续学习&#xff0c;将来以后修改下/*** Created by PhpStorm.* User: Administrator* Date: 2016/6/28* Time: 21:04*/class upload{protected $fileMine;//文件上传类型protected $filepath;//文件上传路径…

LeetCode 1047. 删除字符串中的所有相邻重复项

原题链接 解题思路&#xff1a; 我们可以用栈来维护没有重复项的字母序列&#xff1a; 若当前的字母和栈顶的字母相同&#xff0c;则弹出栈顶的字母&#xff1b; 若当前的字母和栈顶的字母不同&#xff0c;则放入当前的字母。 class Solution { public:string removeDuplica…

javaparser_JavaParser入门:以编程方式分析Java代码

javaparser我最喜欢的事情之一是解析代码并对其执行自动操作。 因此&#xff0c;我开始为JavaParser做出贡献&#xff0c;并创建了两个相关项目&#xff1a; java-symbol-solver和Effectivejava 。 作为JavaParser的贡献者&#xff0c;我反复阅读了一些有关从Java源代码提取信…

prepare的用法 php,PHP中的操作mysqli的预处理prepare

这篇文章主要介绍了关于PHP中的操作mysqli的预处理prepare &#xff0c;有着一定的参考价值&#xff0c;现在分享给大家&#xff0c;有需要的朋友可以参考一下PHP中的操作mysqli的预处理prepare1、【PHP错误】Cannot pass parameter 2 by reference这个错误的意思是不能按引用传…

wps xml转换表格_这功能WPS卖近百元?教你免费将PDF转成Word

[PConline 应用]PDF文件如何转换成为Word&#xff1f;很多朋友研究这个问题已经很久了&#xff0c;PDF更利于统一格式传播&#xff0c;Word更便于编辑&#xff0c;因此收到PDF文件后、想要修改时要如何将PDF转换成Word可谓是一个刚需。当然&#xff0c;不少办公软件提供了这样的…

junit 预期错误_谨慎使用JUnit的预期异常

junit 预期错误有时&#xff0c;当我们收到对jOOQ或其他库的拉取请求时&#xff0c;人们会将单元测试中的代码更改为更“惯用的JUnit”。 特别是&#xff0c;这意味着他们倾向于更改此代码&#xff08;公认的不是那么漂亮的代码&#xff09;&#xff1a; Test public void tes…

LeetCode 231. 2的幂

原题链接 class Solution { public:bool isPowerOfTwo(int n) {if(n<0)return false;if((n&n-1) 0) return true;return false;} };

睡眠 应该用 a加权 c加权_在神经网络中提取知识:学习用较小的模型学得更好...

在传统的机器学习中&#xff0c;为了获得最先进的(SOTA)性能&#xff0c;我们经常训练一系列整合模型来克服单个模型的弱点。 但是&#xff0c;要获得SOTA性能&#xff0c;通常需要使用具有数百万个参数的大型模型进行大量计算。 SOTA模型(例如VGG16 / 19&#xff0c;ResNet50)…

matlab读txt文件不完整,求助Matlab批量读取TXT文件出错

我用dlmread函数批量读取txt文件中的一个数据&#xff0c;但运行结果1.txt文件中只有一个数据0&#xff0c;调试时报错&#xff1a;错误使用 dlmread (line 147)文件结尾不支持空的格式字符串&#xff0c;文件有128列&#xff0c;78行&#xff0c;下面没有列全文件格式是&#…

面向对象代码_面向对象的代码生成方法

面向对象代码代码生成是减少无聊任务的不健康负担的一种常用方法&#xff0c;这些任务常常使我们急切地对代码苦恼。 我见过的许多代码生成框架都使用模板替换重复方法&#xff0c;在该模板中&#xff0c;您编写了模板&#xff0c;以了解生成的代码文件的外观&#xff0c;然后替…

LeetCode 20.有效括号

原题链接 方法一&#xff1a;解题思路&#xff0c;使用栈 模拟法&#xff1b;首先遍历将是左括号形式的部分压入栈中。然后对于右括号形式与栈顶元素进行比对&#xff0c;看是否匹配。如果匹配的话删除栈顶元素&#xff0c;不匹配直接返回false。最后栈为空则全部的括号匹配…

gpu编程如何一步步学习_如何学习贴片机编程

学习贴片机编程首选要对贴片机有所熟悉了解&#xff0c;另外对常用的电脑编辑软件要会使用。目前通常学习贴片机编程有专门的培训学校&#xff0c;或者跟着生产线上现有的贴片机编程师傅学习熟练后再进行编程操作。下面深圳智驰科技就来分享一下如何学习贴片机编程。对贴片机编…

plotcylinder matlab,Matlab在任意两点之间绘制三维圆柱

Matlab在任意两点之间绘制三维圆柱Matlab在任意两点之间绘制三维圆柱此函数可能存在一些不足&#xff0c;请多多指教&#xff01;function plotcylinder(u1,u2,color_a,r)Lnorm(u1-u2);RODu2-u1;[X,Y,Z]cylinder(r,100);x1X*0;y1Y*0;z1Z*0;ZL*Z-L/2;ROD_midpoint(u1u2)/2;xROD_…

简单内存池设计

关键词 内存池 链表 class A { public:static void* operator new(size_t size);static void operator delete(void* phead);static int m_iCout;//分配计数统计&#xff0c;每new一次&#xff0c;就统计一次static int m_iMallocCount;//每次malloc一次&#xff0c;统计一次p…