下面是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的格式:
altersessionsetnls_date_fomat="yyyy-mm-dd";
4.大数据(存放媒体)
blob 二进制数据 可以存放图片/声音/视频 最大是4G普通的存放媒体数据一般在数据库中存放的是所放的文件夹路径当为了安全性时才会把媒体文件放在数据库中;
3.oracle中创建表
6.模糊查询like %代替多个字符,_代替一个字符;
select*fromempwhereemp.enamelike'S%';
7.or的升级in查询
select*fromempwhereemp.empnoin(7369,7788);
8.查询工资高于500或者是岗位是manager同时名字以J开头的雇员
SQL>select*fromempwhere(emp.sal>500oremp.job='MANAGER')andemp.enamelike'J%';
9.按照工资从低到高排序 order by语句; desc是降序(从高到低),asc是升序(从低到高 默认)
SQL>select*fromemporderbyemp.salasc;
10.按照部门号升序(asc),员工号降序(desc)
SQL>select*fromemporderbyemp.deptno,emp.empnodesc;
11.使用列的别名排序:按年薪降序(desc)
SQL>selectemp.sal*12"年薪"fromemporderby"年薪"desc;
数据的分组――――min,max,avg,sum,count;
1.查询员工的最高工资和最低工资; min()和max() 的使用
selectmax(sal)"最高工资",min(sal)"最低工资"fromemp;
2.查询所有员工的工资总和和平均工资 sun() 和 avg() 的使用;
SQL>selectsum(sal)"工资总和",avg(sal)"平均工资"fromemp;
3.查询员工的总人数:
SQL>selectcount(*)fromemp;
4.把最高工资的员工的信息输出(用到了子查询)
SQL>select*fromempwheresal=(selectmax(sal)fromemp);//ERROR不能使用分组函数 error:select*fromempwheresal=max(sal);--error;error:selectename,max(sal)fromemp;-error;
select 后面若有分组函数子可以跟分组函数
5.显示工资高于平均工资的员工信息:
SQL>select*fromempwheresal=(selectmax(sal)fromemp);//ERROR不能使用分组函数 error:select*fromempwheresal=max(sal);--error;error:selectename,max(sal)fromemp;-error;
group by 和 having子句
group by 用于对查询的结果进行分组统计
having子句用于限制分组显示结果
1.显示每个部门的平均工资和最高工资;
selectavg(sal),max(sal),deptnofromempgroupbydeptno;
2.显示每个部门的每种岗位的平均工资和最高工资
SQL>selectavg(sal),deptno,jobfromempgroupbydeptno,emp.joborderbydeptno;
3.显示平均工资小于2000的部门号和他们的平均工资:
SQL>selectemp.deptno,avg(sal)fromempgroupbyemp.deptnohavingavg(sal)<2000; DEPTNOAVG(SAL)----------------301566.66666
分组函数只能出现在选择列表,having,order by子句中
如果select中同时有group by,having,order by 则三者的顺序为group by,order by;
多表查询:
1.显示雇员名,雇员工资,所在部门名称;
SQL>selectemp.empno,emp.sal,dept.dnamefromemp,deptwhereemp.deptno=dept.deptno;
2.显示部门号为10的雇员名,雇员工资,所在部门名称
SQL>selectemp.empno,deptwhereemp.deptno=10andemp.deptno=dept.deptno;
3.显示雇员名,雇员工资,工资的级别;
SQL>selectemp.ename,salgrade.gradefromemp,salgradewhereemp.salbetweensalgrade.losalandsalgrade.hisal;
子查询: SQL中执行顺序是从右到左执行
1.查询与SMITH在同一部门的所有员工;
SQL>select*fromempwhereemp.deptno=(selectemp.deptnofromempwhereemp.ename='SMITH');
2.查询和部门10的工作相同的员工的信息
SQL>select*fromempwhereemp.jobin( selectemp.jobfromempwhereemp.deptno=10);