问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle创建并调用用户自定义函数,输入班号和课程号查询课程平均成绩_问一问

发布网友 发布时间:2022-04-08 04:29

我来回答

2个回答

懂视网 时间:2022-04-08 08:50

今天我们主要谈谈Oracle数据库

一:Oracle原理

      1:什么是数据库:数据库管理的是硬盘中的数据,把数据打包,方便管理,数据增删改查,它的保存数据的是数据库文件;数据库一切都是表:用数据表来保存数据;

      2:分类:

        (1)结构化数据库:保存在硬盘当中,SQL语句查询;以SQL语句模型为基础的数据库

        (2)非结构化数据库:mongoDB,Redis,memecache;把数据保存在内存,在一定时间内写

      3:每个数据库就是一个实例,就是一个服务,直接面对操作系统,没有隔离层,效率高

      4:sql语句是定位到表,定位到行(从后往前执行),定位到列,输出

二:数据库的常用简单常识:

    1:Oracle主要以system登陆

    2:Oracle管理工具

      (1)sqlplus

      (2)pl/sql

    3:sqlplus常用命令:

      (1)连接管理命令---conn(ect)用户名/密码@网络服务器[as system/sysdba];

              ---断开连接:disconnect/disc;

              ---修改密码:passw[ord]  修改自己的密码:password  回车  旧密码  然后新密码;

              ---显示当前用户:show user;

              ---退出:exit

      (2)文件操作命令---运行指定的sql脚本:start和@ ;  start d: est.sql/start d: est.sql;

              ---edit:编辑指定的SQL标本:sql>edit d:a.sql;

              ---spool:将屏幕上的内容输出到指定文件中spool d:.sql 然后 :sql>spool off;

      (3)交换命令:可以替代变量,该变量在执行时需要用户输入select * from student where job = ‘&job‘;

      (4)看当前用户可以操作的表:pl/sql:我的对象-->Tables;

三:用户管理:

    1:用户本身管理:

      (1):增---create user C##用户名 identified by  密码;注意:密码必须以字母开头;

      (2):删---drop user C##用户名 cascade;

      (3):改---Paddword 用户名;

      (4):查---select * from dba_users;查看数据库里面所有的用户;

         ---select * from all_users;查看你能管理的所有用户;

         ---select * from user_users;查看当前用户信息;

    2:用户权限管理:

      (1):基本原理:什么是权限:就是你能不能曹组某跳SQL语句;

      (2):权限有对象权限;系统权限;

      (3):添加权限:

          ---grant connect  to C##用户名;

          ---grant 操作名 on 表明 to 用户名;

          ---grant 操作名 on 表明 to 用户名 with grant option;

      (4)删除权限---revoke 操作名 on 表名 from 用户名;

    3:用户密码管理:

        (1)profile:用户密码管理文件,用于强制对用户进行管理,步骤是创建文件,赋予文件;

        (2)数据库创建时会自动创建默认的profile选项:default,建立用户时如果没有指定profile选项就会分配default;

        (3)用户锁定:

             ---增加用户锁定:create profile 规则名称 limit failed_login_attempts 错误次数 password_lock_time 锁定天数;

             ---删除用户锁定:drop profile password_history/名字 (cascade);

    4:基于角色的权限管理:

        (1):基本原理把各个权限打包,继承到某个角色上,给用户赋予这个角色,用户就拥有了这些权限;

        (2):重要角色---resource:数据库内部资源操作权限;

              ---connect:连接权限;

              ---dba:数据库管理员权限;

四:数据表管理

    1:增:简单插入---insert into 表名 values (‘A001‘,‘tom‘,‘男‘,‘01-05-14‘,10); //和列字段对应即可

        多个插入---insert into 新表名(字段名) select 列 from 表名 where 行限定条件(不是所有数据,年龄段,某个部门)

       技巧函数---to_date():to_date(‘日期‘,yyyy-mm-dd):按照你喜欢的格式插入日期(y/m/d)

    2:查---select * from 表名; //该用户自己的表

              select * from 用户名.表名;    //查属于别人的表,需要授权(系统用户,或者数据拥有用户)

    3:改---update 表名 set 列名=‘值‘ where id=‘B0002‘;

    4:删---drop table 表名; //删除数据和表,快,不能恢复

        delete from student; //删除所有记录,表还在,同时会把操作过程写入日志中,可以恢复,但是速度很慢

 

五:Oracle查询:

   在复合SQL语句语句中,如果没有达到预期结果,我们从内到外或者从外到内,把每个分语句都执行一遍,进行查错;先定位到表,定位到行,定位到列,输出

   1:单表查询

      (1)存查询语句

          ---select 列限定 from 表限定 where 行限定; //数据限定条件区分大小写,java限定大小写,select什么就输出什么select * from emp where job = ‘CLERK‘;

          ---查询空值:select * from 表名 where 列名 is null;

          ---模拟中的数据复制的技巧:insert into users(id,name,pass) select * from users;

          ---查询特定列的值:select col1,col2,col3,... from 表限定 where 行限定;

          ---去除重复行(distinct):select distinct 列限定 from 表名 where 行限定(z只能单行查询)

          ---where 行限定 and 行限定:select * from emp where empno < 7800 and sal>2000

          ---like 模糊行限定:

              (1)%:匹配多个字符:select * from 表名 where 限定列 like "%k%"

              (2)_:匹配一个字符:select * from 表名 where 限定列 like "__k%";//两个下划线

          ---in:枚举查询:select * from emp where empno in(12,56,90);

      (2)使用逻辑操作符:比如工资高于400或岗位为manager的雇员,并且名字首字母为大写的J---select * from emp where (sal>500 or job=‘manager‘) and ename like ‘J%‘;

      (3)统计函数总结:统计函数只能出现在选择列表,having,order by子句中 

          列子:select avg(sal), max(sal),deptno from emp group by deptno having avg(sal) > 2000 order by avg (sal);

    2:多表查询

      (1)笛卡尔乘积的原理----默认回去每条数据都去对应一遍;所以,多表查询的时候,绑定条件不能等于表的个数-1(n-1);  列子:select * from emp,dept;

      (2)逻辑外键多表联查---列子:select e.name,d.name, from emp e,dept  d where e.deptno=d.deptno

      (3)外表限定范围的多表查询(设计)----列子:select * from emp e,salgrade s where  e.sal between s.losal and s.hisal;

      (4)本表多层次查询(无限分类),自连接的多表查询---列子:select * from emp worker,emp boss where worker.mgr = boss.empno;//查出的都是有领导的人

    3:子查询/嵌套查询  

      (1)什么叫子查询:多个select 关键词在同一个查询语句中,这种情况下,就是子查询.把内部select查询到的结果当成一张表,在通过外面的select语句查询出最终的结果

      (2)行子查询---"=" 单行查询(只返回一行数据):select * from emp where depno=(select deptno from emp where ename=‘SMITH‘);//和smith同一部门的所有员工

            ---"in" 多行子查询(返回多行数据)(包含): select * from emp where job in(select distinct job from emp where deptno=20);//查询20号部门工作相同的员工信息

            ---"all"操作符-多行(比最大的大,取最大值):select * from emp where sal > all (select sal from emp where deptno=30);

select * from emp where sal>(select max(sal) from emp where deptno=30);//显示比部门30的所有员工工资高的员工

      (3)列子查询---列子:select * from emp where (deptno,job)=(select deptno,job from emp where ename=‘SMITH‘);//注意查询的列顺序一致

      (4)from子句子查询---在from子句中使用子查询的时候,该子查询会被当做一个视图来对待(也是一张缓存表),因此叫做内嵌视图,当在from子句中使用子查询的时候,必须指定别名,但是不要加as,列别名可以加as

               ---列子:select t2.ename,t2.sal,t2.deptno,t1.avsal from emp t2, (select deptno, avg(sal) avsal from emp group by deptno)  t1 where t2.deptno = t1.deptno and t2.sal > t1.avsal;

      (5)子查询更新数据---列子:update emp set (job,sal,comm)=(select job, sal,comm from emp where ename=‘SMITH‘) where ename=‘SCOTT‘;

    4:分页查询

      (1)分页查询原理:只要是到了数据库,一切都是表.视图,数据字典,包括我们查询所获得的结果,都是表;那我们查询的对象本身就是表,获得的结果也是表

      (2)rownum分页:列子

          ---第一步:select * from emp;//子查询,

          ---第二步:2 select ta.*, rownum rn from (select * from emp) ta;//显示行号,oracle分配的

          ---第三部:2 select ta.*, rownum rn from (select * from emp) ta;//显示行号,oracle分配的

          ---第四部:4  select * from (select ta.*, rownum rn from (select * from emp) ta where rownum <=10) where rn >= 6;

      (3)RowID分页---列子:select * from ** where rowid in (select rid from (select rownum rn, rid from (select rowid rid, cid from emp order cid desc) where rownum <1000) where rn>9980) order by cid desc;

      (4)分析函数来分页---列子:select * from (select  t.*, row_number() over( order by cid desc) rk from ** t) where rk <10000 an rk >9980;

    5:查询结果直接建表---列子:create table mytable(id,name,sal) as select empno,ename,sal from emp

    6:合并查询

      (1):union//或(or关键词)---列子:select * from emp where sal>2500 union select * from emp where job=‘MANAGER‘;//取得两个结果集的并集,去掉重复

      (2):union all//或(or关键词)---列子:select * from emp where sal>2500 union all select * from emp where job=‘MANAGER‘;//取得两个结果集的并集,不去掉重复

      (3):intersect//且(and)---列子:select * from emp where sal>2500 union all select * from emp where job=‘MANAGER‘;//取得两个结果集的并集,不去掉重复

 

      (4):minus//差集(-)in/not in---列子:select * from emp where sal>2500 minus select * from emp where job=‘MANAGER‘;//取得两个结果集的差集,选择第一个集合中特有的数据,前面的是被减去

    7:SQL函数(dual:测试表)

      (1):字符函数---lower(字符):把字符串转化为小写;

            ---upper(char):将字符串转化为大写格式

            ---length():返回字符串的长度

            ---substr(char,m,n):取字符串的字串

            ---replace(char,search_s,replace_s) : 后换前

            ---instr(char_1,char_2,[,n[,m]]):取得chr_2,在char_1中起始位置下标

      (2):数学函数

            ---abs(n):取绝对值

            ---round(n,[m]):四舍五入,n为数据,m为四舍五入到第几位

            ---trunc(n,[m]):截取,截取到小数点的第几位

            ---mod(m,n):对m用n取摸(余数)

            ---floor(n):向下取整

            ---ceil(n):向上取整

      (3):日期函数

            ---dd-mm-yy:默认日期:天,月,年

            ---to_date

            ---sysdate:返回系统时间

            ---add_month(d,n):

            ---last_day(d);指定月份最后一天

 

      (4):数据转换函数:用于将一种数据类型转换成另外一种数据类型,某些情况下,oracle会允许值的数据类型和实际的不一样,这是oracle会隐式的进行数据类型转换.

并不好,最好用转换函数进行显式的转换---列子:create table t1(id,int);insert into t1 values(‘10‘);

 

 

      (5):系统函数/sys_content

            ---terminal:当前会话客户对应的终端的标示符

            ---language:语言

            ---db_name:当前数据库名称

            ---nls_date_format:当前会话客户对应的日期格式

            ---nls_date_format:当前会话客户对应的日期格式

            ---host:主机名称

            ---select sys_context(‘userenv‘,‘db_name‘) from dual;//usernv:用户环境,固定格式

 

六:数据表字段管理

    1:增加一个字段---alter table student add (age number(3));

    2:删除一个字段---alter table 表名 drop column 列名; //强烈建议不要对成熟的系统这么做

    3:修改字段的类型或是名字(不能有数据)---alter table student(表名) modify (sex number(1));

    4:修改表的名字---修改表的名字

    5:查:desc 表名

七:数据对象管理

    1:简单插入---insert into 表名 values (‘A001‘,‘tom‘,‘男‘,‘01-05-14‘,10); //和列字段对应即可

    2:多个插入---insert into 新表名(字段名) select 列 from 表名 where 行限定条件(不是所有数据,年龄段,某个部门)

    3:查询---select * from 表名; //该用户自己的表

    4:修改---update 表名 set 列名=‘值‘ where id=‘B0002‘;

    5删除:

      (1)drop table 表名; //删除数据和表,快,不能恢复   

      (2)delete from student; //删除所有记录,表还在,同时会把操作过程写入日志中,可以恢复,但是速度很慢

      (3)truncate table 表名; //相当于删除表和数据然后重建表.

      (4)delete from 表名 where 行限定条件; //删除不定条数

    

    

 

 

 

 

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

              

谈谈Oracle基本操作(上)

标签:

热心网友 时间:2022-04-08 05:58

摘要Oracle简单语句总结一、Oracle表空间、用户操作表空间操作–1. 创建表空间create tablespace studentspacedatafile ‘D:\Oracle\fanzhe\oradata\MYOWNER\studentdata01’ size 200mautoextend on maxsize 500m;–2 修改表空间alter tablespace studentspaceadd datafile ‘D:\Oracle\fanzhe\oradata\MYOWNER\studentdata02’ size 200mautoextend on maxsize 500m;–关闭表空间alter tablespace studentspace offline;–开启表空间alter tablespace studentspace online;–3 删除表空间drop tablespace studentspace including contents and datafiles;用户操作–1创建用户Creat user 用户名Identified by 密码Default tablespace 指定表空间–2为用户授权Grant dba(权限:connect(连接角色,基本角色) resource:开发者角色 dba:超级管理员角色) to 用户名二、Oracle基本操作(注:字符串类型是单引号,而不能用双引号)以下表在scott表下操作,其中四张是我自己建立的表(course、score、sdept、student),其余表全是scott用户下自带表。在这里插入图片描述--创建数据库--1创建sdept表create table scott.sdept( deptno char(2) primary key, dname char(30) not null unique, address character(30), telphone char(15) unique)tablespace "STUDENTSPACE";--2.创建学生表create table scott.student( sno char(15) , sname char(8) not nul咨询记录 · 回答于2021-11-15oracle创建并调用用户自定义函数,输入班号和课程号查询课程平均成绩Oracle简单语句总结一、Oracle表空间、用户操作表空间操作–1. 创建表空间create tablespace studentspacedatafile ‘D:\Oracle\fanzhe\oradata\MYOWNER\studentdata01’ size 200mautoextend on maxsize 500m;–2 修改表空间alter tablespace studentspaceadd datafile ‘D:\Oracle\fanzhe\oradata\MYOWNER\studentdata02’ size 200mautoextend on maxsize 500m;–关闭表空间alter tablespace studentspace offline;–开启表空间alter tablespace studentspace online;–3 删除表空间drop tablespace studentspace including contents and datafiles;用户操作–1创建用户Creat user 用户名Identified by 密码Default tablespace 指定表空间–2为用户授权Grant dba(权限:connect(连接角色,基本角色) resource:开发者角色 dba:超级管理员角色) to 用户名二、Oracle基本操作(注:字符串类型是单引号,而不能用双引号)以下表在scott表下操作,其中四张是我自己建立的表(course、score、sdept、student),其余表全是scott用户下自带表。在这里插入图片描述--创建数据库--1创建sdept表create table scott.sdept( deptno char(2) primary key, dname char(30) not null unique, address character(30), telphone char(15) unique)tablespace "STUDENTSPACE";--2.创建学生表create table scott.student( sno char(15) , sname char(8) not nul
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
塔罗牌软件哪个好 煎鱼腥草需要放冰糖吗 我和我们在一起原著小说结局 是根据哪部小说改编的 ...之后打开任何软件都会出现Adobe Reader 怎么恢复?急!!! ...格式不是解压安装那种 而是Adobe Reader那个图标的文件?_百度... ...不知道为什么桌面的图标都变成了Adobe Reader了,而且还不能打开,请... 我和我们在一起什么时候更新 一周更新几集每周几点更新 为什么说结婚要给女方彩礼和嫁妆 为何我一开机就自动打开Adobe Reader所在的文件夹? 如何空调拆装 移动花卡月租从花呗余额中扣? 移动花卡宝藏版可以降成普通移动吗? 羽绒服沾了不知道是什么东西?黑的,就是洗不下来怎么办?用洗衣液和洗洁... 多长时间不带耳钉耳洞会长在一起? 洗羽绒服洗衣液能否代替洗涤剂 洗纯毛衣物时,用洗发液与丝毛净、洗衣液、羽绒服洗涤剂的区别 快手上那些做手工耳环的,都是在哪里进的原材料? 古代戴耳环那耳洞是怎么样弄的呢? 开米羽绒洗洗的羽绒服,和普通洗衣液洗的不一样吗? 羽绒服怎么清洗,拿洗衣粉还是洗衣液洗比较好? 羽绒服应该怎么洗涤?和平常洗衣服有什么区别吗?需要加什么洗涤剂吗? 今天刚打了耳洞 是手工扎的 直接用银针扎进去的 需要注意什么呢 请问蓝月亮手洗洗衣液和羽绒服专用洗衣液有什么特别的区别吗?手洗的洗衣液能用来侵泡羽绒服吗? 历史新时期是指什么时候? 重阳节的来历,五十字。 结合自身谈谈对新时代的认识是什么? 网上办的移动花卡自动扣费还是按时吃药交费? 负荚曳屣是什么意思 负箧曳屣的曳还是拽?都可以吗? “负箧曳屣”是成语吗? 贾仲孝的学术成果 哥德巴赫猜想的证明? 高数的英语论文里的References 需要翻译为汉语,谢谢! 将两个棱长为6的正四面体放在一个正方体内,若这两个正四面体可以在正方体内自由活动,求大正方体的外接 谁有北大08年学生名单 谁来证明一下哥德巴赫猜想 李克正的发表论著 08年那一届兰州一中北大入取名单 怎么知道某一学术领域有影响力的国外杂志有哪些? 一个自然各个数位的数字之和是20,这个自然数最小是什么最高位的计算单位是什? 北京大学2008年本科山西省录取人数 北京大学第一期毕业生的名单 有没有免费的外文数据库推荐 求09年被北大录取的山东考生名单,最好加上地区 关于素数等差数列的证明 安徽阜阳历年北大考取学生名单 外文版学术论文报刊网址 北京大学2007级元培学校新生名单中有肖先金吗 有能证明哥德巴赫猜想的吗? 杨老师给与了苏步青怎样的影响?