下面是Oracle表管理的部分,用到的测试表是oracle数据库中scott用户下的表做的测试,有的实验也用到了hr用户的数据,以下这些东西是我的麦库上存的当时学Oracle的学习笔记今天拿出来和大家分享一下,转载请注明出处,下面用的Oracle的版本是10g,用的时WinServer2003的操作系统,可能有些命令和Oracle11g的有所不同,但大部分是一样的,接下来还会陆续的分享一下Oracle中对数据库的管理,对表的管理,还有Oracle中的存储过程和PL/sql编程。用到的Oracle的管理工具是PL/sql Developerl和sql PLUS,欢迎大家批评指正。 1.必须以字母开头
3.不能使用oracle的保留字命名
2.oracle的数据类型
char 定长 最长2000字符(因为是定长的,在做查询时是多位同时比较,其好处是查询速度特快)
demo:varchar2(10) 存放‘ab’,就占2个字符;
clob(character large object) 字符型大对象,最大是4G
2.数字类型:
number(5,2)表示有5位有效数字,两位小数;范围 -999.99 -- 999.99
date 包括年月日和时分秒
在oracle中默认的日期格式是“DD-MON-YY” 如“01-5月-1992”,如果没有月则添加不成功;
altersessionsetnls_date_fomat="yyyy-mm-dd";
4.大数据(存放媒体)
3.oracle中创建表
1sql>createtablestudent(--创建名为student的数据库表2 namevarchar2(20),--名字10个变长3 idcarchar(18),--身份证18个定长字符4 sexchar(2),--性别2个定长字符5 gradenumber(5,2)--成绩为浮点数,有效5位小数位为2位;6)
4.oracle中往已有的表中新增列;
sql>altertablestudentmodify(namevarchar2(10));
6.删除表中的已有字段
7.表的重命名;
sql>renamestudenttostd;
1.省略字段名
sql>insertintostudentvalues('name','231','男',234.89);
2.给部分字段赋值
sql>insertintostudent(name,idcar)values('TOM','123');
3.查询idcard字段为空的学生
sql>select*fromstudentwhereidcardisnull;
10.修改表中的数据:
sql>updatestudentsetname='cat'whereid=1;
11.oracle中的回滚:(要养成创建保存点的习惯)--commit后所有的保存点都没有了
1.emp表中的内关联查询:给出每个雇员的名字以及他们经理的名字,使用表的别名;
sql>selectdistinctemp.job,emp.mgrfromemp;
3.查询SMITH的薪水,职位和部门:
sql>settimingon;
6.模糊查询like %代替多个字符,_代替一个字符;
select*fromempwhereemp.enamelike'S%';
8.查询工资高于500或者是岗位是manager同时名字以J开头的雇员
sql>select*fromempwhere(emp.sal>500oremp.job='MANAGER')andemp.enamelike'J%';
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;
5.显示工资高于平均工资的员工信息:
sql>select*fromempwheresal=(selectmax(sal)fromemp);//ERROR不能使用分组函数 error:select*fromempwheresal=max(sal);--error;error:selectename,max(sal)fromemp;-error;
group by 和 having子句
having子句用于限制分组显示结果
3.显示平均工资小于2000的部门号和他们的平均工资:
sql>selectemp.deptno,avg(sal)fromempgroupbyemp.deptnohavingavg(sal)<2000; DEPTNOAVG(SAL)----------------301566.66666
分组函数只能出现在选择列表,having,order by子句中
2.显示部门号为10的雇员名,雇员工资,所在部门名称
sql>selectemp.ename,emp.sal,salgrade.gradefromemp,salgradewhereemp.salbetweensalgrade.losalandsalgrade.hisal;
1.查询与SMITH在同一部门的所有员工;
sql>select*fromempwhereemp.jobin( selectemp.jobfromempwhereemp.deptno=10);
3.显示工资比部门号为30的所有员工的工资都高的员工信息;(用 all() 或 max()实现)
1.查询与SMITH在同一部门并且职位也相同的员工信息;
sql>select*fromempwhere(deptno,job)=(selectdeptno,jobfromempwhereename='SMITH');
在from中使用子查询时查询的结果会当作一个视图来对待,因此也叫做内嵌视图<br style=\"\\"margin:\" padding:=\"\"/>必须给内嵌视图命一个别名