Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >OracleDBA之表管理

OracleDBA之表管理

作者头像
lizelu
发布于 2018-01-12 02:46:57
发布于 2018-01-12 02:46:57
1.1K00
代码可运行
举报
文章被收录于专栏:青玉伏案青玉伏案
运行总次数:0
代码可运行

  下面是Oracle表管理的部分,用到的测试表是oracle数据库中scott用户下的表做的测试,有的实验也用到了hr用户的数据,以下这些东西是我的麦库上存的当时学Oracle的学习笔记今天拿出来和大家分享一下,转载请注明出处,下面用的Oracle的版本是10g,用的时WinServer2003的操作系统,可能有些命令和Oracle11g的有所不同,但大部分是一样的,接下来还会陆续的分享一下Oracle中对数据库的管理,对表的管理,还有Oracle中的存储过程和PL/SQL编程。用到的Oracle的管理工具是PL/SQL Developerl和SQL PLUS,欢迎大家批评指正。

1.表名和列名的命名规则:   1.必须以字母开头   2.长度不能超过30个字符   3.不能使用oracle的保留字命名   4.只能使用字母数字下划线,$或#; 2.oracle的数据类型   1.字符型:    char 定长 最长2000字符(因为是定长的,在做查询时是多位同时比较,其好处是查询速度特快) demo: char(10) 存放‘ab’占俩个字符后面空着的8个字符用空格补全,所以存了2个字符也占10个字符的空间;    varchar2 变长 最大是4000字符(查询速度较慢,因为是变长,查询比较是是一位一位的比较) demo:varchar2(10) 存放‘ab’,就占2个字符;    clob(character large object) 字符型大对象,最大是4G   2.数字类型:     number 的范围 10的-38次方---10的38次方可以表示小数也可以表示整数     number(5,2)表示有5位有效数字,两位小数;范围 -999.99 -- 999.99     number(5) 表示有5位整数,范围:-99999-99999;   3.日期类型:     date 包括年月日和时分秒     timestamp 时间戳(毫秒级)     在oracle中默认的日期格式是“DD-MON-YY” 如“01-5月-1992”,如果没有月则添加不成功;     修改date的格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alter session set nls_date_fomat = "yyyy-mm-dd";

  4.大数据(存放媒体)     blob 二进制数据 可以存放图片/声音/视频 最大是4G普通的存放媒体数据一般在数据库中存放的是所放的文件夹路径当为了安全性时才会把媒体文件放在数据库中; 3.oracle中创建表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 sql>create table student( --创建名为student的数据库表
2   name varchar2(20),    --名字10个变长
3   idcar char(18),     --身份证18个定长字符
4   sex char(2),     --性别2个定长字符
5   grade number(5,2)    --成绩为浮点数,有效5位小数位为2位;
6 )

4.oracle中往已有的表中新增列;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sql>alter table student add(classid number(2));

5.修改已有字段的长度

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sql>alter table student modify(name varchar2(10));

6.删除表中的已有字段

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sql>alter table student modify(name varchar2(10));

7.表的重命名;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sql>rename student to std;

9.往表中插入数据:   1.省略字段名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sql>insert into student values('name','231','男',234.89);

  2.给部分字段赋值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sql>insert into student(name,idcar) values('TOM','123');

  3.查询idcard字段为空的学生

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sql>select * from student where idcard is null;

10.修改表中的数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sql>update student set name='cat' where id=1;

11.oracle中的回滚:(要养成创建保存点的习惯)--commit后所有的保存点都没有了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  1.回滚之前先创建保存点
    sql>savepoint pointName;
  2.删除表中的记录
    sql>delete from student;;
  3.回滚
    sql>rollback to pointName;
    truncate table student; --删除表中的所有的数据,不写日志,无法回滚,删除速度极快;

Oracle中的select语句的练习,这也是难点

  1.emp表中的内关联查询:给出每个雇员的名字以及他们经理的名字, 使用表的别名;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sql>select a.ename,b.ename from emp a,emp b where a.mgr=b.empno;

  2.去除重复的行,重复的行的意思是行的每个字段都相同; distinct

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sql>select distinct emp.job,emp.mgr from emp;

  3.查询SMITH的薪水,职位和部门:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select emp.ename as 姓名,emp.sal as 薪水, emp.job as 工作,dept.dname as 部门
2 from emp,dept where emp.ename='SMITH' and emp.deptno=dept.deptno;

姓名 薪水 工作 部门
---------- --------- --------- --------------
SMITH 800.00 CLERK RESEARCH

  4.打开显示sql语句运行时间  

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sql>set timing on;

  5.查询SMITH的年工资;--nvl 处理为null的字段,在表达式里如果有一个值为null则结果就为null用nvl()函数处理为空的字段,例如nvl(comm,0):如果为null则用0替换;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select emp.ename "名字", emp.sal*12+nvl(emp.comm,0)*12 "年薪" from emp where name='SMITH';

  6.模糊查询like %代替多个字符,_代替一个字符;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from emp where emp.ename like 'S%';

  7.or的升级in查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from emp where emp.empno in(7369,7788);

8.查询工资高于500或者是岗位是manager同时名字以J开头的雇员

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select * from emp where (emp.sal>500 or emp.job='MANAGER') and emp.ename like 'J%';

  9.按照工资从低到高排序 order by语句; desc是降序(从高到低),asc是升序(从低到高 默认)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL>select * from emp order by emp.sal asc;

  10.按照部门号升序(asc),员工号降序(desc)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL>select * from emp order by emp.deptno ,emp.empno desc;

  11.使用列的别名排序:按年薪降序(desc)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL>select emp.sal*12 "年薪" from emp order by "年薪" desc;

数据的分组————min,max,avg,sum,count;   1.查询员工的最高工资和最低工资; min()和max() 的使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select max(sal) "最高工资", min(sal) "最低工资" from emp;

  2.查询所有员工的工资总和和平均工资 sun() 和 avg() 的使用;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select sum(sal) "工资总和", avg(sal) "平均工资" from emp;

  3.查询员工的总人数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select count(*) from emp;

  4.把最高工资的员工的信息输出(用到了子查询)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL>select * from emp where sal=(select max(sal) from emp);
//ERROR 不能使用分组函数
error: select * from emp where sal = max(sal);--error;
error: select ename,max(sal) from emp; -error;

    select 后面若有分组函数子可以跟分组函数

  5.显示工资高于平均工资的员工信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL>select * from emp where sal=(select max(sal) from emp);
//ERROR 不能使用分组函数
error: select * from emp where sal = max(sal);--error;
error: select ename,max(sal) from emp; -error;

group by 和 having子句   group by 用于对查询的结果进行分组统计   having子句用于限制分组显示结果   1.显示每个部门的平均工资和最高工资;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 select avg(sal),max(sal),deptno from emp group by deptno;

  2.显示每个部门的每种岗位的平均工资和最高工资

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select avg(sal),max(sal),deptno,job from emp group by deptno,emp.job order by deptno;

  3.显示平均工资小于2000的部门号和他们的平均工资:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select emp.deptno,avg(sal) from emp group by emp.deptno having avg(sal)<2000;

DEPTNO AVG(SAL)
------ ----------
30 1566.66666

分组函数只能出现在选择列表,having,order by子句中 如果select中同时有group by ,having ,order by 则三者的顺序为group by ,having, order by;

多表查询:   1.显示雇员名,雇员工资,所在部门名称;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select emp.empno,emp.sal,dept.dname from emp,dept where emp.deptno=dept.deptno;

  2.显示部门号为10的雇员名,雇员工资,所在部门名称

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select emp.empno,emp.sal,dept.dname from emp,dept where emp.deptno=10 and emp.deptno=dept.deptno;

  3.显示雇员名,雇员工资,工资的级别;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select emp.ename,emp.sal,salgrade.grade
          from emp,salgrade
        where emp.sal between salgrade.losal and salgrade.hisal;    

子查询: SQL中执行顺序是从右到左执行   1.查询与SMITH在同一部门的所有员工;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select * from emp where emp.deptno=(
         select emp.deptno from emp where emp.ename='SMITH');

  2.查询和部门10的工作相同的员工的信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select * from emp where emp.job in( 
         select emp.job from emp where emp.deptno=10);      

 3.显示工资比部门号为30的所有员工的工资都高的员工信息;(用 all() 或 max()实现)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select * from emp where sal>all(
         select sal from emp where emp.deptno=30);
或者(下面的效率要高的多)
SQL> select * from emp where sal>(
         select max(sal) from emp where emp.deptno=30);

  4.显示工资比部门号为30的一个员工的工资都高的员工信息;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select * from emp where sal>any(
         select sal from emp where emp.deptno=30);
或者(下面的效率要高的多)
SQL> select * from emp where sal>(
         select min(sal) from emp where emp.deptno=30);

返回多字段的子查询:    1.查询与SMITH在同一部门并且职位也相同的员工信息;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select * from emp where (deptno,job)=(
         select deptno,job from emp where ename='SMITH');

    2.查询员工比自己部门的平均工资高的员工信息;(把查询出的信息当作一张表起一个别名)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select * from emp a,(
         select deptno,avg(sal) mysal from emp group by deptno) a2
         where a.deptno = a2.deptno and a.sal>a2.mysal;

在from中使用子查询时查询的结果会当作一个视图来对待,因此也叫做内嵌视图 必须给内嵌视图命一个别名

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-07-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【MySQL】复合查询
查询工资高于 500 或岗位为 MANAGER 的雇员,同时还要满足他们的姓名首字母为大写的 J
YoungMLet
2024/03/01
1490
【MySQL】复合查询
MySQL 多表查询与复杂查询技巧实战
实际开发中往往数据来自不同的表,所以需要多表查询。本节我们用一个简单的公司管理系统,有三张表EMP,DEPT,SALGRADE来演示如何进行多表查询。
用户11286421
2025/03/24
1550
MySQL 多表查询与复杂查询技巧实战
MySQL复合查询
对于CURD之一的查找,他作为最重要的操作,仅仅在一张表之中查是不够的,还需要在多表之间进行查询,复合查询就是解决多表查询的问题。
每天都要进步呀
2023/10/16
2400
MySQL复合查询
【MySql】复合查询
实际开发中往往数据来自不同的表,所以需要多表查询。现在我们用三张表EMP,DEPT,SALGRADE来演示多表查询。
平凡的人1
2023/10/15
2590
【MySql】复合查询
常用sql查询语句
5.9 合并查询(union 并集, intersect 交集, union all 并集+交集, minus差集)
FGGIT
2024/10/15
1470
SQL员工部门表综合查询60题
CREATE DATABASE oa; USE oa; CREATE TABLE dept( deptno INT PRIMARY KEY, dname VARCHAR(20), loc VARCHAR(20) ) DROP TABLE emp CREATE TABLE emp( empno INT PRIMARY KEY, ename VARCHAR(20) NOT NULL, job VARCHAR(20) CHECK (job IN ('CLERK','SALESMAN','MANAGER','
Albert陈凯
2018/04/04
5.3K0
mysql练习(含答案)
表结构 DROP DATABASE IF EXISTS test1; CREATE DATABASE test1; USE test1; ##部门表 #DROP IF EXISTS TABLE DEPT; CREATE TABLE DEPT( DEPTNO int PRIMARY KEY,##部门编号 DNAME VARCHAR(14) , ##部门名称 LOC VARCHAR(13) ##部门地址 ) ; INSERT INTO DEPT VALUES (10,'ACCOU
Java学习
2018/04/17
2.6K0
mysql练习(含答案)
MySQL 多表查询
多表查询是指基于两个和两个以上的表查询.在实际应用中,查询单个表可能不能满足你的需求.
用户9615083
2022/12/25
4.1K0
MySQL 多表查询
PL/SQL --> 存储过程
存储过程子程序的一种类型,能够完成一些任务,作为schema对象存储于数据库。是一个有名字的PL/SQL代码块,支持接收或不接受参数
Leshami
2018/08/07
1.4K0
Hive案例04-员工部门表综合案例
1. 数据说明 (1) dept表 hive> select * from dept; # deptno(部门编号) dname(部门名称) loc(部门所在地区) 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES
CoderJed
2018/09/13
8910
单表查询练习
# ORDER BY price DESC 排序查询, DESC是降序 ASC是升序 默认 ASC -- 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 -- 格式: -- SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; -- ASC 升序 (默认) -- DESC 降序 SELECT pname,price FROM product ORDER BY price DESC; SELECT pid,pname,price
名字是乱打的
2022/05/13
9830
Oracle之PL/SQL学习笔记
  自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧。是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家批评指正。   PL/SQL定义:PL/SQL是由Oracle开发,专门用于Oracle的程序设计语言。 PL---Procedural Language. SQL—Structure QueryLanguage。PL/SQL包括过程化语句和SQL语句     PL/SQL的单位:块。 一个块中可以嵌套子块
lizelu
2018/01/12
1.2K0
​oracle 笔记
一、 oracle介绍 ORACLE 数据库系统是美国 ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组 软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或 B/S 体系结构的数据库之一。 比如SilverStream 就是基于数据库的一种中间件。ORACLE 数据库是目前世界上使用最为广泛的数据 库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能; 作为一个关系数据库, 它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只 要在一种机型上学习了ORACLE 知识,便能在各种类型的机器上使用它。
千羽
2021/07/20
9100
​oracle 笔记
Java补充之MySQL入门必备知识
mysql5.5 mysql5.6 mysqI5.7(稳定) mysql8 更高版本
timerring
2023/05/24
1.5K0
Java补充之MySQL入门必备知识
组函数及分组统计[通俗易懂]
{ORDERBY 排序字段 ASC|DESC,排序字段 ASC|DESC,……}
全栈程序员站长
2022/07/10
1.6K0
组函数及分组统计[通俗易懂]
Oracle总结【PLSQL学习】
PLSQL介绍 PLSQL是Oracle对SQL99的一种扩展,基本每一种数据库都会对SQL进行扩展,Oracle对SQL的扩展就叫做PLSQL… SQL99是什么 (1)是操作所有关系型数据库的规则 (2)是第四代语言 (3)是一种结构化查询语言 (4)只需发出合法合理的命令,就有对应的结果显示 SQL的特点 (1)交互性强,非过程化 (2)数据库操纵能力强,只需发送命令,无需关注如何实现 (3)多表操作时,自动导航简单,例如: select emp.empno,emp.sal,dept.dname fr
Java3y
2018/03/15
2.4K0
Oracle总结【PLSQL学习】
数据库表中常用的查询实验
select ename,sal from emp where deptno=10;
Twcat_tree
2022/11/30
1K0
Oracle SQL 异常处理
有预定义异常 与 用户自定义异常 还有 raise_application_error()函数 raise_application_error() 只能把异常抛出而不能处理异常。
星哥玩云
2022/08/17
6910
Oracle SQL 异常处理
Oracle高级查询-imooc
本章介绍多表查询的概念,什么是笛卡尔集,等值连接、不等值连接、外连接、自连接和层次查询等多表连接查询的内容。
chenchenchen
2023/01/30
2.1K0
Oracle数据库学习笔记 (四 —— select 从入门到放弃 【下】)
Oracle 数据库查询专题 (select * from emmmm 80 T)
Gorit
2021/12/09
1.2K0
相关推荐
【MySQL】复合查询
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文