OracleDBA之表管理
下面是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的格式:
- alter session set nls_date_fomat = "yyyy-mm-dd";
4.大数据(存放媒体)
blob 二进制数据 可以存放图片/声音/视频 最大是4G普通的存放媒体数据一般在数据库中存放的是所放的文件夹路径当为了安全性时才会把媒体文件放在数据库中;
3.oracle中创建表
- sql>create table student( --创建名为student的数据库表
- name varchar2(20), --名字10个变长
- idcar char(18), --身份证18个定长字符
- sex char(2), --性别2个定长字符
- grade number(5,2) --成绩为浮点数,有效5位小数位为2位;
- )
4.oracle中往已有的表中新增列;
- sql>alter table student add(classid number(2));
5.修改已有字段的长度
- sql>alter table student modify(name varchar2(10));
6.删除表中的已有字段
- sql>alter table student modify(name varchar2(10));
7.表的重命名;
- sql>rename student to std;
9.往表中插入数据:
1.省略字段名
- sql>insert into student values('name','','男',234.89);
2.给部分字段赋值
- sql>insert into student(name,idcar) values('TOM','');
3.查询idcard字段为空的学生
- sql>select * from student where idcard is null;
10.修改表中的数据:
- sql>update student set name='cat' where id=1;
11.oracle中的回滚:(要养成创建保存点的习惯)--commit后所有的保存点都没有了
- 1.回滚之前先创建保存点
- sql>savepoint pointName;
- 2.删除表中的记录
- sql>delete from student;;
- 3.回滚
- sql>rollback to pointName;
- truncate table student; --删除表中的所有的数据,不写日志,无法回滚,删除速度极快;
Oracle中的select语句的练习,这也是难点
1.emp表中的内关联查询:给出每个雇员的名字以及他们经理的名字, 使用表的别名;
- sql>select a.ename,b.ename from emp a,emp b where a.mgr=b.empno;
2.去除重复的行,重复的行的意思是行的每个字段都相同; distinct
- sql>select distinct emp.job,emp.mgr from emp;
3.查询SMITH的薪水,职位和部门:
- 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语句运行时间
- sql>set timing on;
5.查询SMITH的年工资;--nvl 处理为null的字段,在表达式里如果有一个值为null则结果就为null用nvl()函数处理为空的字段,例如nvl(comm,0):如果为null则用0替换;
- select emp.ename "名字", emp.sal*12+nvl(emp.comm,0)*12 "年薪" from emp where name='SMITH';
6.模糊查询like %代替多个字符,_代替一个字符;
- select * from emp where emp.ename like 'S%';
7.or的升级in查询
- select * from emp where emp.empno in(7369,7788);
8.查询工资高于500或者是岗位是manager同时名字以J开头的雇员
- SQL> select * from emp where (emp.sal>500 or emp.job='MANAGER') and emp.ename like 'J%';
9.按照工资从低到高排序 order by语句; desc是降序(从高到低),asc是升序(从低到高 默认)
- SQL>select * from emp order by emp.sal asc;
10.按照部门号升序(asc),员工号降序(desc)
- SQL>select * from emp order by emp.deptno ,emp.empno desc;
11.使用列的别名排序:按年薪降序(desc)
- SQL>select emp.sal*12 "年薪" from emp order by "年薪" desc;
数据的分组————min,max,avg,sum,count;
1.查询员工的最高工资和最低工资; min()和max() 的使用
- select max(sal) "最高工资", min(sal) "最低工资" from emp;
2.查询所有员工的工资总和和平均工资 sun() 和 avg() 的使用;
- SQL> select sum(sal) "工资总和", avg(sal) "平均工资" from emp;
3.查询员工的总人数:
- SQL> select count(*) from emp;
4.把最高工资的员工的信息输出(用到了子查询)
- 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.显示工资高于平均工资的员工信息:
- 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.显示每个部门的平均工资和最高工资;
- select avg(sal),max(sal),deptno from emp group by deptno;
2.显示每个部门的每种岗位的平均工资和最高工资
- SQL> select avg(sal),max(sal),deptno,job from emp group by deptno,emp.job order by deptno;
3.显示平均工资小于2000的部门号和他们的平均工资:
- 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.显示雇员名,雇员工资,所在部门名称;
- SQL> select emp.empno,emp.sal,dept.dname from emp,dept where emp.deptno=dept.deptno;
2.显示部门号为10的雇员名,雇员工资,所在部门名称
- SQL> select emp.empno,emp.sal,dept.dname from emp,dept where emp.deptno=10 and emp.deptno=dept.deptno;
3.显示雇员名,雇员工资,工资的级别;
- SQL> select emp.ename,emp.sal,salgrade.grade
- from emp,salgrade
- where emp.sal between salgrade.losal and salgrade.hisal;
子查询: SQL中执行顺序是从右到左执行
1.查询与SMITH在同一部门的所有员工;
- SQL> select * from emp where emp.deptno=(
- select emp.deptno from emp where emp.ename='SMITH');
2.查询和部门10的工作相同的员工的信息
- SQL> select * from emp where emp.job in(
- select emp.job from emp where emp.deptno=10);
3.显示工资比部门号为30的所有员工的工资都高的员工信息;(用 all() 或 max()实现)
- 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的一个员工的工资都高的员工信息;
- 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在同一部门并且职位也相同的员工信息;
- SQL> select * from emp where (deptno,job)=(
- select deptno,job from emp where ename='SMITH');
2.查询员工比自己部门的平均工资高的员工信息;(把查询出的信息当作一张表起一个别名)
- 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中使用子查询时查询的结果会当作一个视图来对待,因此也叫做内嵌视图
必须给内嵌视图命一个别名
OracleDBA之表管理的更多相关文章
- SNF开发平台WinForm之四-开发-主细表管理页面-SNF快速开发平台3.3-Spring.Net.Framework
4.1运行效果: 4.2开发实现: 4.2.1 有了第一个程序的开发,代码生成器的配置应该是没有问题了,我们只要在对应的数据库中创建我们需要的表结构就可以了,如下: 主表结构如下: ...
- mysql 连接命令 表管理 ,克隆表,临时表,字符串属性,设定语句间的分隔符
连接和断开连接mysql -h host -u user -p (即,连接的主机.用户名和使用的密码).断开输入QUIT (或\q)随时退出: 表管理克隆表注意:create table ... li ...
- [小技巧]設定Reporting Services 2008 發生報表管理員權限不足
转载 http://www.dotblogs.com.tw/dorlis.tsao/archive/2011/01/17/20860.aspx 在自己Windows 7 professional的電腦 ...
- 基本 SQL 之数据库及表管理
上篇文章,我们基于『数据库』做了一个宏观上的介绍,你应当了解到数据库是在何种背景下,为了解决什么样的问题而诞生的,以及在具体实现下又可以划分哪些中类型. 非关系型数据库的种类很多,我们会在后续的篇章中 ...
- Mysq基础l数据库管理、表管理、增删改数据整理
一. 数据库管理: 创建数据库: create database(自定义) 查询所有数据库: show databases;(查询所有数据库) show create database ( ...
- SQL语句之 多表管理
SQL语句之 多表管理 一个数据库内通常会有不止一张表,有时候我们要把多张表联系起来,这就需要用到多表管理的语句. 1.外键约束 一个表中的非主键字段,如果在另外一张表中是主键,那么这个字段我们叫它做 ...
- Sqlite—数据库管理与表管理
数据库管理 创建数据库,创建完成之后自动进入 [root@localhost ~]# sqlite3 /www/wwwroot/task.db 使用数据库,如果 /www/wwwroot 路径下面没有 ...
- Mysql—数据库管理与表管理
数据库管理 表管理 删除表
- MySQL:逻辑库与表管理
逻辑库管理 语句 说明 CREATE DATABASE 逻辑库名; 创建逻辑库 SHOW DATABASES; 显示所有逻辑库 DROP DATABASE 逻辑库名; 删除逻辑库 USE 逻辑库名; ...
随机推荐
- touches 事件捕获不到
在UIView上加载了一个UIScrollView(全屏),touches 事件捕获不到了 原因:UIView的touch事件被UIScrollView捕获了,无法传递下去 解决方法:写一个UIScr ...
- centos6字符
[root@back_zabbix_100 ~]# echo $LANGen_US.UTF-8[root@back_zabbix_100 ~]# cat /etc/sysconfig/i18n LAN ...
- 常用类-StringBuffer
总结:凡是要频繁的修改字符串内容的时候,都要使用StringBuffer类来完成,而且在StringBuffer类里提供了一些在String类中没有的,包括:delete(),insert()等等 / ...
- Ubantu 下安装 tensorflow
# 在 Linux 上: $ sudo apt-get install python-pip python-dev python-virtualenv $ virtualenv --system-si ...
- Wine——在Linux上运行Windows软件
官网:https://www.winehq.org/ 参考: wikipedia 教你使用Wine在Linux上运行Windows软件 如何安装和使用Wine,以便在Linux上运行Windows应用 ...
- JavaScript 事件 编程练习
编程练习 使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除. 提示:获取元素的值设置和获取方法为:例:赋值:document.getElement ...
- 使用 SoapUI 测试ASP.NET Web API
我们为不同的目的开发了很多web服务,经过授权的用户就可以访问和使用这些web服务.soapUI 是一个强大的测试web服务的工具,他不仅可以测试SOAP服务,他也支持测试RESTful服务.在这里我 ...
- 排列组合算法的javascript实现
命题:从成员数为N的集合S中,选出M个元素,分别求其排列与组合结果集,即 A(N, M)与C(N, M) js解法: function queue(arr, size){ if(size > a ...
- 一个App完成入门篇(七)- 完成发现页面
第七章是入门篇的倒数第二篇文章了,明天整个APP将进入收官. 本节教程主要要教会大家使用二维码扫描和用do_WebView组件加在html页面. 导入项目 do_WebView组件 扫描功能 自定义事 ...
- R in Action 读书笔记(6)基本图形
MindMapper原文件