Oracle学习系列1
两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 300 ; set pagesize 30 ; 编辑sql命令: ed a.sql 执行 @a 切换用户: conn User/passwd [as sysdba|sysoper ] conn system/manager conn sys/change_on_install as sysdba 显示用户: show user; 获取所有表的名字: select * from tab; 查看表的结构: desc emp; //emp 表 清空屏幕 clear scr **************************************************************** SQL语句: 简单查询 限定查询 单行查询 所需表:scott用户下的表 -- 雇员表,部门表,奖金表,薪水表 查询语句的基本格式 使用DISTINCT 关键字去掉重复的查询列 使用限定查询 对查询结果进行排序 掌握Oracle中提供的各主要单行函数 *********************************************************************************************** SQL包含DML(数据操作语言)、DDL(数据定义语言)、DCL(数据控制语言) 简单查询 : select {distinct } *|具体的列 别名 from 表 select * from emp; select empno,ename, job from emp; 指定查询返回列的名称 ,为列起个别名 select empno 编号 ,ename 姓名 ,job 工作 from emp; 要求查询所有工作: select job from emp; //出现重复值 sel distinct job from emp; //消除重复列。但是在消除重复列时,如果要同时查询多列,则必须保证所有列都重复才能消除 查询雇员的编号和工作: select ename, job from emp; 查询雇员的编号,姓名,工作,显示格式为:编号是7369的雇员,姓名是:SMITH,工作是:CLERK : select '编号是:' || empno ||' 的雇员,姓名是:||'ename ',工作是:' || gob from emp; 要求求出每个雇员的姓名及年薪: select ename , sal*12 from emp; select ename , sal*12 income from emp; // 别名回避中文 *********************************************************************************************** 限定查询(where子句): 格式: select {distinct } *|具体的列 别名 from 表 { where 条件s } 查询出工资大于1500的所有雇员信息: select * from emp where sal>1500; 查询每月可以得到奖金的雇员信息: select * from emp where comm IS NOT NULL; //comm字段不为null 查询无奖金的雇员: select * from emp; where comm IS NULL; 查询出基本工资大于1500,同时可以领取奖金的所有雇员信息: select * from emp where sal>1500 and comm IS NOT NULL; 查询出基本工资大于1500,或者可以领取奖金的所有雇员信息: select * from emp where sal>1500 or comm IS NOT NULL; 查询出基本工资不大于1500,同时不可以领取奖金的所有雇员信息: select * from emp where not ( sal>1500 or comm IS NOT NULL ) ; //通过()表示一组条件 查询基本工资大于1500,但是小于3000的全部雇员信息: select * from emp where sal>1500 and sal <3000 ; ****SQL专门制定范围的查询的过滤语句:between min and max (包含等于的功能)***** select * from emp where sal between 1500 and 3000 ; //between and 等价于sal>=1500 and sal<=3000 查询出1981年雇佣的全部雇员信息: select * from emp where hiredate between ‘ 1-1月 -81 ‘and ’31-12月 -81 ‘ ;//日期表示加上’‘ **结论:between ...and...查询除了支持数字之外,还支持日期的查询(日期实际上以数组的形式表示出来)** 查询出姓名是smith的雇员的信息: select * from emp where ename ='SMITH' ; //Oracle中对大小写敏感,smith不能查询出 查询出雇员编号7369,7499,7521的具体信息: **查询的范围,可以用IN()操作符完成,还有NOT IN()** select * from emp where emp IN( 7369,7499,7521 ); 查询出编号不是7369,7499,7521的具体信息: select * from emp where emp NOT IN( 7369,7499,7521 ); 要求查询出姓名是SMITH,ALLEN,KING的雇员信息: select * from emp where ename IN( 'SMITH','ALLEN','KING' ); 结论:IN操作符可以用在数字和字符串上,指定的额外的值不影响程序的运行 模糊查找功能,SQL中使用LIKE语句,但要注意通配符:% -->匹配任意长度的内容 _ -->匹配一个长度的内容 查询出所有雇员姓名中第二个字母中包含“M”的雇员信息: select * from emp where ename like '_M%'; 查询出雇员姓名中包含字母“M”的雇员信息: select * from emp where ename like '%M%' ; 查询出在1981年雇佣的雇员信息: select * from emp where hiredate like '%81%'; 查询雇员编号不是7369的雇员信息: select * from emp where empno <>7369 ; select * from emp where enpno !=7369 ; *********************************************************************************************** 对查询的结果进行排序(order by子句)(重点) -->排序操作永远放在SQL语句最后执行 格式: select {distinct } *|具体的列 别名 from 表 { where 条件s } { order by 排序字段1,排序字段2 ASC|DESC } //默认低->高(升序) 要求按照工资由低到高排序: select * from emp order by sal ; 要求查询出10部门的所有雇员信息,信息按照工资降序排序,若工资相等,按照雇佣日期升序排序 select * from emp where deptno =10 order by sal desc, hiredate (asc) ;//asc可不写 *********************************************************************************************** 单行函数(重点) 格式:function_name( column | expression , [ arg1,arg2,...] ) 分类: 字符函数:接收字符输入并且返回字符或数值 数值函数:接收数值输入并返回数值 日期函数:对日期数据进行操作 转换函数:从一种数据类型转换成另一宗数据类型 通用函数:NVL函数,DECODE函数 字符函数: 专门处理字符的,例如将大小写转换 将小写字符转换成大写字符 select upper('smith') from dual ;// dual是张数据表 查询smith雇员的所有信息: select * from emp where ename = upper('smith') ; lower()函数: select lower('SMITH') from dual ; //将字符串全部变为小写 initcap()函数: select initcap('hello, world') from dual ; //将单词的第一个字母大写 将雇员表中的雇员姓名变为开头字母大写 select initcap(ename) from emp; <字符串可以使用’||‘ 连接之外,还可以使用concat()函数进行连接操作> select concat('hello' , 'world') from dual ; //不如’||‘好用 字符串截取:substr() select substr('hello',1,3) from dual ; //index从(0/1)开始 结果:hel 字符串长度:length() select length('hello') from dual ; // 结果:5 内容替换:replace() select replace('hello','l','x') from dual ; // 结果:hexxe 要求显示所有雇员的姓名及姓名的后三个字符: tips:先求整个长度-2,再截取 select ename ,substr(ename, length(ename)-2) from emp; or: select ename ename, substr(ename ,-3,3) from emp; *********************************************************************************************** 数值函数: 四舍五入: round() 截断小数点: trunc() 取余: mod 执行四舍五入操作: select round(789.536) from dual ; // result:790 保留两位小数: select round(789.536,2) from dual ; // result:790.54 对整数进行四舍五入的进位: select round(789.536,-2) from dual ; // result:800 验证trunc()函数: select trunc(789.536) from dual ;//result : 789 select trunc(789.536,-2) from dual ;//result : 700 使用mod()进行取余操作: select mod(10,3) from dual ;//result : 1 *********************************************************************************************** 日期函数: 当前日期: select sysdate from dual ; 规则: 日期-数字=日期 日期+数字=日期 日期-日期=数字(天数) 函数: months_between() :求给定日期范围的月数 add_months(): 在指定日期上加指定的月数,求出之后的日期 next_day( date, char): 指定时间的下一个星期几(由char指定)所在的日期 last_day(): 返回指定日期对应月份的最后一天 ---------------------------------------------------- 显示10部门雇员进入公司的星期数: tip: sysdate -hiredate = days /7 = weeks select empno, ename,round( (sysdate - hiredate)/7 ) weeks from emp ; 验证months_between(): select empno, round( ename, months_between(sysdate, hiredate) ) months from emp; 验证add_months(): select add_months(sysdate, 4) from dual ; 验证next_day(): select next_day(sysdate, '星期一') from dual ;//当前系统日期的下一个周一 验证last_day(): select last_day( sysdate ) from dual ; *********************************************************************************************** 转换函数 (重点) 函数: to_char(): 转换成字符串 to_number(): 转换成数字 to_date(): 转换成日期 ===to_char()==== 查询所有雇员的雇员编号,姓名,雇佣日期: select enpno, ename, hiredate from emp ; 将年,月,日进行分开,可以用to_char()函数进行拆分, 必须指定通配符 yyyy-mm-dd select enpno, ename, to_char( hiredate ,'yyyy') year, to_char(hiredate, 'mm') months, to_char(hiredate, 'dd') days from emp; to_char()函数具有日期显示转换的功能: select empno, ename, to_char(hiredate ,'yyyy-mm-dd') //1994-05-04 from emp ; select empno, ename, to_char(hiredate ,'fmyyyy-mm-dd') //1994-5-4 from emp ; to_char()具有分隔数字功能: (表示$:美元 L:本地货币) select empno, ename,to_char(sal, '$99.999') from emp; // sal $1,600 ====to_number()===== 将字符串转变为数字 select to_number('123')+to_number('123') from dual ; //246 ====to_number()===== 将字符串变为date类型 select to_date('2009-02-16','yyyy-mm-dd') from dual ; *********************************************************************************************** 通用函数: NVL() : 将指定的null值变为指定的内容 DECODE() :DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value 等于if1时, DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。 decode(value ,值1,返回值1,值2,返回值2,值3,返回值3,值4,返回值4,缺省值 ) 求出年薪的时候应该加上奖金,格式:(sal+comm)*12: select empno, ename, (sal+comm)*12 from emp ; //错误,有些雇员的comm为null select empno, ename, (sal+NVL(comm, 0)*12 ) income from emp ; <对需要进行计算时,必须对null使用NVL()函数进行转换操作> 验证decode()函数: select decode(1, 1,'内容为1',2,'内容为2',3,'内容为3',4,'内容为4') from dual ; // result :内容为为1 雇员的工作:业务员clerk, 销售人员salesman 经理 manager 分析员analyst 总裁president 要求查询出雇员的编号,姓名,雇佣日期及工作,将工作替换成以上的信息: select empno 雇员编号, ename 雇员姓名, hiredate 雇佣日期, decode(job, 'clerk','业务员','salesman','销售人员','manager','经理','analyst','分析师','president','总裁') 职位 from emp ; *********************************************************************************************** SUMMARY 1,oracle主要用户: 超级管理员:sys/change_on_install 普通管理员:system/manage 普通用户:scott/tiger 2,sqlplusw的一些常用命令: 设置行显示数量:set linesize 300 设置页显示数量:set pagesize 30 ed a.sql以及@a 连接:conn user/passwd as sysdba 3,SQL基础语法的格式 4,单行函数,decode()函数最重要
Oracle学习系列1的更多相关文章
- Oracle学习系列1-7
Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...
- Oracle学习系列7
Oracle学习系列7 ************************************************************************************ 关联表 ...
- Oracle学习系列6
Oracle学习系列6 ************************************************************************************ 删除约 ...
- Oracle学习系列5
Oracle学习系列5 ************************************************************************************ ,掌握 ...
- Oracle学习系列4
Oracle学习系列4 ************************************************************************************ 数据库 ...
- Oracle学习系列3
Oracle学习系列3 ************************************************************************************ 多表查 ...
- oracle学习系列之四 (视图)
视图视图是数据库中特有的对象.视图用于存储查询,但不会存储数据(物化视图除外).这是视图和数据表的重要区别.可以利用视图进行查询,插入,更新和删除数据.Oracle有如下四种视图(关系视图,内嵌视图, ...
- oracle学习系列之三 (约束)
主键约束:外键约束:唯一性约束:检查约束:默认值约束 -——————五大约束 一. 主键约束: --创建表的主键约束 create table student (student_id number ...
- Oracle 学习系列之二(会话与事务级临时表和dual表 )
一. 会话临时表 --创建会话临时表create global temporary table tmp_user_session(user_id int, user_name varchar2(20) ...
随机推荐
- 创建和运行shell脚本程序
转载请标明http://www.cnblogs.com/winifred-tang94/ 要创建一个shell脚本程序,首先新建一个文本文件,然后在这个文本文件中按照shell编程规则输入shell命 ...
- 在Hadoop集群中添加机器和删除机器
本文转自:http://www.cnblogs.com/gpcuster/archive/2011/04/12/2013411.html 无论是在Hadoop集群中添加机器和删除机器,都无需停机,整个 ...
- Spring计划会议内容
我们的小组成员是 王伟光,杨世超,苏海岩,曹锦锋,李夏蕾,闫立新. 组长为闫立新. 经过昨天课堂上的讨论,我们确定了未来一周里的工作内容和目标,以及每个人的任务. 我们确定本周的最终目标是实 ...
- 第八章 标准IO库
1.IO对象时不可复制或者赋值的:也就是说形参或者返回类型也不能为流类型.如果非要传递或者返回IO对象的的话,则必须传递或者返回指向对象的指针或者引用.如: ofstream &print( ...
- 主线程中一定不能放耗时操作,必须要开子线程,比如下载文件,不然会不让你拿到输入流--报错显示android.os.NetworkOnMainThreadException
1.必须要开子线程来操作耗时操作,android.os.NetworkOnMainThreadException new Thread(new Runnable() { @Override publi ...
- AudioQueue语音流 speex压缩 实时通讯 对讲机
参开 http://blog.csdn.net/liulina603/article/details/19029727 博客有多篇文章 http://blog.csdn.net/liulina6 ...
- HexDump.java解析
从包名我们可以看出该类并没有对应用开发者开放,也就是说在google开放的Android API文档中并没有该类的相关介绍:好在Android系统源码是开源的,因此我在解决framework中问题的时 ...
- Generic method return type
Here's the Animal class: public class Animal{ private Map<String,Animal> friends =new HashMap& ...
- 横竖屏切换时候Activity的生命周期
1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate-->onStart-->onResume--> 3.按crtl+f1 ...
- HDU 5000
http://acm.hdu.edu.cn/showproblem.php?pid=5000 题意:有n种属性,每种属性的数值可以是0-T[i],当一个人属性全部小于等于另一个人的属性时,小的那个人会 ...