oracle数据库10g笔记1_第1页
oracle数据库10g笔记1_第2页
oracle数据库10g笔记1_第3页
oracle数据库10g笔记1_第4页
oracle数据库10g笔记1_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1Oracle10G 数据库的简介核心知识:SQL 语句(不同的数据库,命令不一样,但是,SQL 语句一样)A.Oracle 发展史(了解)a) 现在世界上最大的数据提供商,编程语言提供商,应用原件提供商,在数据库领域,等价于微软的存在b) Oracle 在古希腊神话中,是“神谕”的意思,指的是上帝的宠儿;在中国的商周时期,将刻在龟壳上的文字,称为上天的指示,现今被称为叫“甲骨文“c) Oracle 最早起源于 IBM 的以及技术人员发表的论文叫-“论关系型数据库的发展”;然后被 oracle 公司的老板 Larry Ellison 所发现,进而有了 oracle 公司B.Oracle 的版本问题:Oracle 版本简介 大小Oracle8 / oracle 8i i 是 internet 表示 oracle 开始向网络发展,但是,8i 只是一个过度的版本1CDOracle 9i 是现在应用比较广泛的版本,可以说是 8i 的升级版本 3CDOracle10G 是一个过渡性的产品,G:表示网格计算;简单说就是将周边的区域以网格的方式进行划分,那么,在搜索数据的时候,会以就近方式进行快速搜索(博士课程)700+MOracle11G 是一个完成的带有网格计算的新产品,已经投入数用 1.8G1.oracle 数据库的安装(必须会)1.安装前的建议:关闭防火墙,断开互联网2.安装文件:install 文件夹下的 setup.exe3.启动安装程序4.选择安装路径25.Next 下一步 然后 会显示当前 安装 oracle 数据库的版本,默认 ”企业版“即可6. Next 下一步 选择默认,下一步7.看清楚:这里是当前全局数据库的名字与 SID 一样的8.同时:点选 然后 下一步a) 如果没有点选,那么在安装数据库的时候,不会有大数据用户的出现,这个事要做实验用的,必须要有;不选择,就一定没有9.余下都是默认,直到此图的出现10.点选“所有账户使用同一个口令” 统一使用“orcladmin”不要擅自更改,不要忘记,忘记了,谁也帮不了你11.余下,next 下一步,到下面页面312.选择“安装” 启动安装程序,之后让其自行安装,并且不要做任何的操作,13.也就是说:点击“安装”按纽是你在安结束装 oracle 数据库时的最后一个操作,其余所有操作,全部禁止2.Oracle10G 数据库的卸载和配置3.Oracle 数据库的监听4.SqlPlus 命令(重点)Oracle 数据库操作住哟啊使用的是命令行方式,而所有的操作都是可以使用 sqlplus来完成,可是对于 sqlplus 有 2 种形式: 一种是 dos 风格的 sqlplus;对应的命令式 sqlplus.exe 一种是 windows 风格的,就是带窗口的 sqlplus;对应命令 sqlplusw.exe在 oracle10G 之中,2 中,是没有什么区别的,但是 sqlplus.exe 命令,在使用时,是不能自动换行的,所以,经常是用的是 sqlplusw.exe。方便视觉效果,看着舒服。注意:这个命令,其本身,对编程是没有任何影响的。虽然 sqlplus 中也会出现折行的情况,但是,可以使用命令进行修改;还有折页效果,可以通过命令改变: 设置每行显示的记录的长度:SET LINESIZE 300;/每行 300 列宽 设置每页显示的记录的长度:SET PAGESIZE 30;/每页 30 条记录这 2 个命令,很多人叫做格式化命令,但是,这种格式化的命令在 sqlplus 下显示的不是4很明显。注意:sqlplusw 本身,在窗口显示上,很舒服了,但是在程序的编辑上不是很方便,因为,中间的命令行,一旦书写错误,没有办法使用“方向键”进行移动,在中间修改,必须将其后面的全部删除才可以进行修改在 sqlplusw 中有 ed 和 命令,可以进行记事本的调用和执行;使用 ed,调用记事本程序: 键入:ed a此时会有提示,找不到 a.sql 文件,问是否创建;但是,使用 ed 命令打开记事本的时候,oracle 中的 sqlplusw 窗口进入到“阻塞状态” ,是不可操作,不可编辑的状态使用,执行记事本上的命令:a使用外部编译软件,编译 sql 的命令文件,然后,也是可以使用命令执行文本的,但是执行的命令,稍有不同 如果是一个后缀是.txt 的文件, 并且在硬盘上:那么必须写上完整的路径 D:/file_name.txt如果文件的后缀是.sql 的,则不需要输入文件后缀:D:/file_name 或者键入 D:file_name在一个数据库中,会有许多的用户,每个用户下面,有许多的数据表,查看这个用户下的表:SELECT * FROM tab;查看当前登陆的用户命令:SHOW user;如果用户输入错误,但是登陆成功了,那么也使可以使用 sqlplusw 来切换用户的,命令如下:“”可选择的操作 AS SYSDBA/SYSOPER 按照超级管理员/普通操作者方式登陆CONN 用户名/密码 AS SYSDBA/SYSOPER例如:CONN sys/orcl AS SYSDBA;一旦使用了 sys 登陆,则无法直接查看 emp 等表,因为 emp 不是 sys 用下存储的表,要想访问 emp 表,则必须使用 scott.emp 的方式 表明访问的是 scott 这个用户下的 emp 表Sqlplusw 命令窗口也可以调用本机的操作系统命令,使用“host”作为命令前缀HOST COPY d:file_name.sql d:hello.txt;总结:(重点)1.oracle 数据的安装和卸载2.Oracle 数据库中的四个主要用户:超级管理员: sys/change_on_install普通管理员: system/manager5普通用户: scott/tiger大数据用户: sh/sh 这个是可以自定义2.slqplusw 中的各种命令3.监听服务的问题5.用户的表结构(重要)1.知识点1.SQL 语法的基本格式、简单查询、限定查询、分组统计的使用;2.Scott 用户下的主要的表的结构,需要记下3.单行函数的使用2.复习:a) SELECT * FROM tab;-查看当前用户下的表b) DESC table_name;-查查看表结构2.scott 用户的表结构66.简单查询(重点):1.简单查询:查询一张表中的所有数据。2.曾经使用过的查询语句a) SELECT * FROM emp;i. 这个语句主要指的是:从 emp 表中查询所有列的数据ii. * 占位符,代表 emp 表中所有的列名iii. 该语句属于 SQL 语句的范围iv. SQL 语句:SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本文件的扩展名。SQL 通常用于数据库的通信,ANSI(美国国家标准学会)声明,SQL 是关系数据库管理系统(RDBMS 指的是关系型数据库管理系统(Relationship Data Base Management System) )的标准语言。v. Oracle 是全世界最早使用 SQL 标准语句的数据库产品。vi. SQL 功能强大,概括起来,它可以分为以下几组: DML:数据库操作语言(Data Manipulation Language)-用于检索或者修改数据(最主要的,面试,笔试,都会被考到) DDL:数据库定义语言(Data Definition Language)-用于定义数据的结构,如创建、修改或者删除数据库对象 DCL:数据库控制语言(Data Control Language)-用于定义数据库用户的权限3.语法结构:SELECT DISTINCT * | 字段 别名 ,字段 别名 FROM 表名称 别名范例:查询 dept 表的全部记录SELECT * FROM dept;范例:查询每个雇员的编号,姓名,基本工资确定数据表的内容:emp:编号,姓名,基本工资SELECT empno,ename,sal FROM emp;范例:查询出每个雇员的职位SELECT job FROM emp;有问题了,查询出的结果存在重复数据,主要原因是现在没有消除掉重复的记录, 可以使用 DISTINCT 消除掉重复的记录SELECT DISTINCT job FROM emp;a) 重复数据:指的是一行中的每个列的记录都重复,才叫重复数据范例:查询出每个雇员的姓名,职位SELECT ename,job FROM emp;7b) 在进行简单查询的操作中,也可以使用各个数学的四则运算的操作符范例:显示每一个雇员的姓名、职位、基本年薪需要的数据表:empemp 表要显示的列名称:姓名、职位、年薪=月薪*12SELECT ename,job,sal*12 FROM empc) 在上面的范例中,出现了“sal*12”显示的列,此列名不使用于显示列名,那么可以起一个别名。注意:别名不要使用中文,只要是程序的开发都要避免中文(包括数据库开发也是一样)SELECT ename,job,sal*12 sals FROM emp范例:公司有 200 元/月饭食补助和 100 元/月车费补助,请计算年薪需要的数据表:empemp 表要显示的列名称:姓名、职位、年薪=(月薪+200+100)*12SELECT ename,job,(sal+300)*12 sals FROM emp范例:公司每年年底,都会多发放一个月的工资,作为年底奖金,计算年薪需要的数据表:empemp 表要显示的列名称:姓名、职位、年薪=(月薪+200+100)*12+salSELECT ename,job,(sal+300)*12+sal sals FROM empd) 在简单查询中,可是使用“|”连接符,来连接查询字段范例:试一试“|” 的使用SELECT empno | ename FROM emp;看着很讨厌的,改改SELECT empno | | ename FROM emp;e) 由于“, ”在数据库中属于原样输出的字符串,所以必须使用“”单引号括起来f) 即:在 SQL 中, “”单引号表示的是字符串范例:要求显示的数据按照如下格式显示:雇员编号是:7369 的雇员姓名是:SMITH,基本工资是:800,职位是:CLERK!使用的数据表:emp需要显示的列名称:empno、ename、sal、job相当于查找:empno、ename、sal、job 字段,并且使用“|”进行连接。SELECT 雇员编号是: | empno | 的雇员姓名是: | ename | ,基本工资是: | sal | ,职位是: | job | ! FROM emp;i. 看着很表头长!,取个别名SELECT 雇员编号是: | empno | 的雇员姓名是: | ename | ,基本工资是: | sal | ,职位是: | job | ! 雇员信息 FROM emp;ii. 一定要记住,别名上的内容部要使用”“括起来;只有在 SELECT 子句之中出现的内容,使用“ “单引号。iii. 子句:1. 理论上:SELECT 之后的语句叫 SELECT 子句,FROM 之后的子句叫 FROM8子句。这个只是习惯上的称呼,没有什么必然或者定义。7.限定查询(重点)1.复习上一堂课的内容:a) 在简单查询中,是将所有的记录进行显示,但是现在可以对显示的记录进行过滤的操作,那么就属于限定查询的范围了。2.限定查询:就是在简单查询语法的基础上,增加了一个 WHERE 子句,用于指定限定条件。3.语法结构:条件(condition)SELECT DISTINCT * 字段 别名 ,字段 别名 FROM 表名称 别名WHERE 条件(s)4.在 WHERE 子句后可以增加多个条件,最长见的条件就是最基本的关系运算:、=、)、BETWEEN AND、LIKE、IN、NULL、IS NULL、AND、 OR、NOT;8.1 关系运算范例:查找基本工资高于 1500 的所有员工信息需要的数据表:emp 表需要显示的列名称:emp 表的所有信息条件:sal 1500SELECT * FROM emp WHERE sal1500;范例:查找职位是办事员的员工信息需要的数据表:emp;显示的列名称:emp 下的所有列名称条件:job=CLERKSELECT * FROM emp WHERE job=clerk;结果未选定行-没有返回相应的查询结果!原因:在 Oracle 数据库中,所有的数据都是区分大小写的,所以 job=clerk没有找到相应结果行所以代码修改如下:SELECT * FROM emp WHERE job=CLERK; 1. 以上是单个条件的,也可以同时满足多个条件2. 而多个条件之间可以使用 AND 或者 OR 进行连接操作3. AND 多和条件之间 全部满足 并列存在4. OR 多个条件之间 任意满足一个即可 任意其中一个范例:查询工资在 1500-3000 之间的全部员工信息SELECT * FROM emp WHERE sal=1500 AND sal=1200SELECT * FROM emp where (job=CLERK OR job=SALESMAN) AND sal1200注意:操作符号本身有优先级别,但是这些优先级,基本上是不会去背诵的,那么就使用“() ”去改变运算有优先级别。范例:查询所有不是办事员的员工信息SELECT * FROM emp WHERE job 1 个匹配任意多个字符:% - 0 个、1 个、多个范例:查询雇员姓名中以字母 C 开头的全部雇员信息11SELECT * FROM emp WHERE ename LIKE C% ;范例:查询雇员姓名中第二个字母是 C 的全部雇员信息SELECT * FROM emp WHERE ename LIKE _C% ;范例:查询雇员姓名中带有字母 C 的全部雇员信息SELECT * FROM emp WHERE ename LIKE %C% ;在这里,也使可以使用 NOT 求反操作的范例:查询雇员姓名中不带有字母 C 的全部雇员信息SELECT * FROM emp WHERE ename NOT LIKE %C% ;LIKE 子句,除了字符串,其他任意的数据,也是可以的。SELECT * FROM emp WHERE ename LIKE %1% OR hiredate LIKE %1% OR sal LIKE %1%;说明:LIKE 子句的使用在开发之中,LIKE 子句,是必用的,但是使用 LIKE 子句的时候,需要注意:如果在模糊查询上不设置任何的查询关键字的话(%),则表示查询全部记录;这个特点,可以帮助我们在开发的时候,节省很多代码,必须牢记。8.数据的排序 (重点)1.当数据返回查询结果后,所有数据默认是按照雇员编号排序的2.也可以使用“ORDER BY“子句进行排序3.语法如下:SELECT DISTINCT * 字段 别名 ,字段 别名 FROM 表名称 别名WHERE 条件(s) ORDER BY 字段 ASC | DESC , 字段 ASC | DESC . ;4.“ORDER BY“子句,是写在所有 SQL 语句的最后面的内容5.对于排序的说明:a) 排序时,可以指定多个排序的字段;b) 排序的方式 2 种:i. ASC 升序 默认的ii. DESC 降序 用户需要指定序列,从大到小排序范例:查询所有雇员的信息,要求按工资排序SELECT * FROM emp ORDER BY sal ;SELECT * FROM emp ORDER BY sal ASC;范例:查询所有雇员的信息,要求按工资降序排序SELECT * FROM emp ORDER BY sal DESC;12范例:查询所有雇员的信息,按工资由高到低排序,如果工资相同,则按照雇用日期由早到晚排序此时需要两个字段排序:工资(DESC),雇用日期(ASC);SELECT * FROM emp ORDER BY sal DESC, hiredate ASC;对于排序操作,只在需要的地方上使用。“ORDER BY“子句是写在所有的 SQL 语句的最后的部分。9.单行函数(重点) 10.1 字符函数在 oracle 中,即使要验证字符串,也必须编写完整的 SQL 语句,所以在 ORACLE 数据库中,为了简便用户查询,专门提供了一个“dual”虚拟表。1.UPPER(字符串|列):将输入的字符串变为大写返回;范例:试一试转换大写函数:SELECT UPPER(hello word) hi FROM dual;一般,在用户输入数据的时候,不会去关心数据本身是大写/小写。 。 。 。 。SQL SELECT * FROM emp WHERE ename=UPPER(输入 str 的值: smith原值 1: SELECT * FROM emp WHERE ename=UPPER(3.INITCAP(字符串|列):将开头首字母大写;范例:将所有雇员姓名首字母大写SELECT INITCAP(ename) ename FROM emp;4.LENGTH(字符串|列):求字符串长度;范例:将所有雇员姓名的长度SELECT LENGTH(ename) ename FROM emp;范例:将所有姓名长度为 5 的所有雇员信息13SELECT * FROM emp WHERE LENGTH(ename) = 5;5.REPLACE(字符串|列):进行替换;范例:使用“_”替换名字中的所有“A”SELECT REPLACE(ename,A,_) FROM emp ;6.SUBSTR(字符串|列,开始点,结束点):字符串截取;字符串截取操作有两种语法:1. 语法一:SUBSTR(字符串 | 列,开始点),表示从开始点一直截取到结尾;范例:SELECT ename,SUBSTR(ename,3) FROM emp;2. 语法二:SUBSTR(字符串 | 列,开始点,结束点),表示从开始点截取到结束点,截取部分内容;范例:SELECT ename,SUBSTR(ename,0,3) FROM emp;SELECT ename,SUBSTR(ename,1,3) FROM emp;范例:要求截取每个雇员姓名的后三个字母SELECT ename,SUBSTR(ename,LENGTH(ename)-2) FROM emp;或者设置负数,表示从后指定截取位置SELECT ename,SUBSTR(ename,-3) FROM emp;面试题:问 SUBSTR()函数截取的时候下标从 0,还是 1 开始?在 ORACLE 数据库中,SUBSTR()函数,从 0 或 1 开始,都是一样的;SUBSTR()函数也可以设置负数,表示由后指定截取的开始点。10.2 数字函数1、数字函数一共有 3 个:i. ROUND(数字 | 列 ,保留小数的位数):四舍五入的操作;ii. TRUNC(数字 | 列 ,保留小数的位数):舍弃指定位置的内容;iii. MOD(数字 1,数字 2):取模,取余数;范例:验证 ROUND()函数SELECT ROUND(805.53567),ROUND(-805.53567),ROUND(-805.53567,2) ,ROUND(805.53567,-1)FROM dual;范例:验证 TRUNC()函数-截取小数点后面所有的位数SELECT TRUNC(805.53567),TRUNC(-805.53567),TRUNC(-805.53567,2),TRUNC(805.53567,-141) FROM dual;范例:验证 MOD()函数SELECT MOD(10,3) FROM dual;10.3 日期函数1.学习日期,首先要解决的问题是获取当前的日期,可以使用“SYSDATE“;代码如下:SELECT SYSDATE FROM dual;2.除了获取当前日期外,在日期中,也可以进行若干的运算:日期 + 数字 = 日期,表示若干天之后的日期SELECT SYSDATE + 3,SYSDATE + 300 FROM dual;日期 - 数字 = 日期,表示若干天之前的日期SELECT SYSDATE - 3,SYSDATE - 300 FROM dual;日期 - 日期 = 数字,表示两个日期间天数,但必须是大日期 - 小日期范例:求出每个雇员到今天为止雇佣的天数SELECT ename,hiredate,SYSDATE-hiredate FROM emp;注意:上述公式只有 3 个,没有 日期+日期,它没有代表意义,什么都不是3.除了上述三个公式外,oracle 提供了 4 个操作函数LAST_DAY(日期):求出指定日期的最后一天范例:求出本月最后一天的日期SELECT LAST_DAY(SYSDATE) FROM dual;NEXT_DAY(日期,星期数):求出下一个指定星期 X 的日期范例:下一个星期一是几号?SELECT NEXT_DAY(SYSDATE,星期一) d FROM dual;范例:下一个星期二是几号?SELECT NEXT_DAY(SYSDATE,星期二) d FROM dual;ADD_MONTHS(日期,数字):求出若干月之后的日期;数字表示的是月;范例:计算出在座各位最晚毕业时间(即找工作的时间)SELECT ADD_MONTHS(11-6 月-12,2) d FROM dual;MONTHS_BETWEEN(日期 1,日期 2):求出两个日期之间所经过的月份4.范例:计算每个雇员,到今天为止的雇佣月份SELECT ename,hiredate,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate) dates FROM emp;5. 在所有的开发中,如果是日期的操作,建议使用以上的函数,因为这些函数可以避免闰年的问题。1510.4 转换函数(重点-核心)1.在 oracle 数据库中常用的三种数据:a) 数字(NUMBER)b) 字符串(VARVHAR2)c) 日期(DATE)2.转换函数的主要功能是:完成上述三种数据之间的相互转换的操作3.一共有三种转换函数:TO_CHAR(字符串 | 列,格式字符串):将日期或者数字变为字符串显示TO_DATE(字符串,格式字符串):将字符串变为 DATE 显示TO_NUMBER(字符串):将字符串变为数字显示a) TO_CHAR()函数范例:使用 SYSDATE()显示当前系统时间SELECT SYSDATE FROM dual;这个在 oracle 数据库中是以“日-月-年”的格式显示的,这个种格式不适用于开发和中国人的想法。这种情况下,可以使用 TO_CHAR()函数,但是使用此函数需要一些格式字符串:年(yyyy) ,月(mm) ,日(dd) 。范例:使用 SYSDATE()显示当前系统时间,格式:“年-月-日”SELECT TO_CHAR(SYSDATE,yyyy-mm-dd) FROM dual;SELECT TO_CHAR(SYSDATE,yyyy-mm-dd),TO_CHAR(SYSDATE,yyyy) y,TO_CHAR(SYSDATE,mm) m ,TO_CHAR(SYSDATE,dd) d FROM dual;问题:在这个时候,会有前导“0”的出现,即 03 02 诸如此类消除 0 的做法是加入 fm,正常是加“0”的SELECT TO_CHAR(SYSDATE,fmyyyy-mm-dd) FROM dual;在 DATE 中,是包含时间的但是,之前的代码没有显示时间,加入时间,就需要增加标记:时(hh) ,分(mi) ,秒(ss)SELECT TO_CHAR(SYSDATE,yyyy-mm-dd hh:mi:ss) FROM dual;问题:显示结果是:2012-03-02 03:20:24 十二小时制的,在 hh 后添加 24 即可SELECT TO_CHAR(SYSDATE,yyyy-mm-dd hh24:mi:ss) FROM dual;使用了 TO_CHAR()函数后,所有的内容都是字符串不再是 DATE 行数据了TO_CHAR()函数也可用于数字的格式化上:此时你遇到的每一个“9”表示一位数字的概念,而不是数字 9 的概念。SELECT TO_CHAR(85098654132168,999,999,999,999,999,999) nums FROM dual;实现效果16nums-85,098,654,132,168如果要在数字前面显示货币,那么在形如999,999,999,999,999,999前,添加 L.L 表示 Local 的含义,表示当前系统语言环境的货币符号。b) TO_DATE()函数此函数的主要功能是将一个字符串变为 DATE 型数据。范例:将字符串1983-04-07使用 TO_DATE()函数,转换成 DATE 类型数据SELECT TO_DATE(1983-04-07,yyyy-mm-dd) FROM dual;一般此函数,在更新数据库的时候,使用很多c) TO_NUMBER()函数将字符串转换成数字,现在使用较少了范例:将字符串1使用 TO_NUMBER 函数,转换成 DATE 类型数据SELECT TO_NUMBER(1) FROM dual;SELECT TO_NUMBER(1) + TO_NUMBER(5) FROM dual;在 oracle 中,以上的功能不使用 TO_NUMBER()函数,也可以完成,所以基本上 TO_NUMBER()函数已经是不考虑了10.5 通用函数(重点-核心)通用函数主要有两个:NVL()、DECODE()是 oracle 的特性函数;1.NVL()函数,是处理 null 的范例:查询每个雇员的全部年薪SELECT ename,sal,comm,(sal+comm)*12 FROM emp;此时,会有 null 字段出现,原因在于 COMM 提成字段上为 null,要解决,就必须使用NVL()函数进行处理:将 null 变为 0;以上就是 NVL()函数的作用。SELECT ename,sal,comm,(sal+comm)*12,NVL(comm,0) FROM emp;SELECT ename,sal,comm,(sal+NVL(comm,0)*12,NVL(comm,0) FROM emp;2.DECODE()函数:多数值判断相当于之前 java 中的 ifelse语句,唯一不同的是 DECODE()函数判断的是数值,而不是逻辑判断范例:查询全部雇员的职位,但是这些职位要求替换中文显示CLERK 办事员SALESMAN 销售员MANAGER 经理ANALYST 分析员PRESIDENT 总裁17以上显示的数据,一定是逐行显示的,所以这个时候就必须采取 DECODE()函数,函数语法如下:DECODE(数值 | 列,判断值 1,显示值 1,判断值 2,显示值 2,判断值 3,显示值3, 。 。 。)实现上面范例代码如下:SELECT empno,ename,job, DECODE(job,CLERK,办事员,SALESMAN,销售员) FROM emp;DECODE()函数,在 oracle 中很具有特点的函数,是一定要会的10.习题 1.选择部门 30 中的所有员工2.列出所有办事员(CLERK)的姓名,编号和部门编号3.找出佣金高于薪金的雇员4.找出佣金高于薪金 60%的雇员5.找出部门 10 中所有经理(MANAGER)和部门 20 中所有办事员(CLERK)的详细资料。6.找出部门 10 中所有经理 MANAGER,部门 20 中所有办事员 CLERK,既不是经理又不是办事员但其薪金大于或等于 2000 的所有雇员的详细信息7.找出收取佣金的员工的不同工作8.找出不收取佣金或后去的佣金低于 100 的员工9.找出各月倒数第 3 天受雇的所有员工10.找出早于 12 年前受雇的员工11.以首字母大写的方式显示所有员工的姓名1812.显示正好为 5 个字符的员工的姓名13.显示不带有“R”的员工姓名14.显示所有员工姓名的前三个字符15.显示所有与昂的姓名,用“a”替换所有“A”16.显示满 10 年服务年限的员工的姓名和受雇日期17.显示员工的详细资料,按姓名排序18.显示所有员工姓名和受雇日期,根据其服务年限,将最老的员工排在前面19.显示所有员工的姓名、工作和薪金,按工作的降序排列,若工作相同则按薪金排序20.显示左右雇员姓名、加入公司的年份和月份,按受雇日期所在月份排序,若月份相同则将最早的员工排在最前面21.显示在一个月为 30 填的情况下所有雇员的日薪资,忽略余数22.找出在(任何年份的)2 月受聘的所有雇员23.计算每个雇员加入公司的天数24.显示姓名字段的任何位置包含“A”的所有雇员姓名25.以年月日的方式显示所有雇员的服务年限19第一步:求出每个雇员的雇佣年数:被雇佣的总月数/12=年数;第二步:求出月数,以上计算之中被忽略的小数点实际上都是月份,所以直接取余即可第三步:求出天数,最准确的做法是在不超过 30 天的范围之内求;现在已经知道当前的时间使用 SYSDATE 取出,而雇佣的日期使用 hiredate 取出,可是 hiredate 和 SYSDATE 之间的差距太大了,所以肯定会有误差,那么就必须想办法将hiredate 的日期提升到与 SYSDATE 差距在 30 天的范围之内。在之前学习过两个函数:MONTHS_BETWEEN():求出两个日期间的月数,如果是:MONTHS_BETWEEN(SYSDATE,hiredate)求出的是雇佣日期到今天为止的雇佣月份;ADD_MONTHS():在一个日期上加入指定的月之后的日期,如果说hiredate+与今天相距的月数 = 一个新的日期,而且这个新的日期肯定和 SYSDATE 相距不超过 30 天。以上的这道程序,属于日期函数的综合应用,本身已经超过了 SQL 的掌握程度,知道就行了,如果真遇到了这种问题,也轮不到你解决。11.多表查询(重点)12.1 多表查询的介绍12.2 多表查询的基本概念 一条 SQL 语句,从一张表中查询出所需要的内容,叫单表查询。一条 SQL 语句,从多张表中查询出所需要的内容,叫多表查询。多表查询语法如下SELECT DISTINCT * 字段 别名 ,字段 别名 FROM 表名称 别名 ,表名称 别名 ,.WHERE 条件(s) 范例:查询雇员表和部门表中的总记录数可以使用 COUNT()函数完成SELECT COUNT(*) FROM emp; -14 条记录SELECT COUNT(*) FROM dept;-4 条记录注意问题:SELECT * FROM 表名;以后是不可以这样写的原因:1.语句简单,书写方便,属于新人做法(没有任何开发经验的人)2.如果数据量较大的话,浏览器无法浏览数据,切可能会造成系统死机20SELECT COUNT(*) FROM 表名原因:1.语句简单,书写方便,有经验的人会做的事情2.如果数据量较小则可以查询全部数据,如果数据量较大,则不能直接使用SELECT 语句查询,这样是稳妥的做法范例:查询雇员表和部门表中的总记录数SQL SELECT COUNT(*) FROM emp,dept;COUNT(*)-56以上表的数据来自哪里? 共计 56= 员工表的 14 条记录 * 部门表的 4 条记录为什么:是由于数据库的查询机制所决定的。根据上图所示:每条 emp 的记录,会与 dept 表的数据匹配 4 次,所以会有 56 条数据SQL SELECT * FROM emp,dept;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC- - - - - - - - -7369 SMITH CLERK 7902 17-12 月-80 800 20 10 ACCOUNTING NEW YORK7499 ALLEN SALESMAN 7698 20-2 月 -81 1600 300 30 10 ACCOUNTING NEW YORK7521 WARD SALESMAN 7698 22-2 月 -81 1250 500 30 10 ACCOUNTING NEW YORK7566 JONES MANAGER 7839 02-4 月 -81 2975 20 10 ACCOUNTING NEW YORK7654 MARTIN SALESMAN 7698 28-9 月 -81 1250 1400 30 10 ACCOUNTING NEW YORK7698 BLAKE MANAGER 7839 01-5 月 -81 2850 30 10 ACCOUNTING NEW YORK7782 CLARK MANAGER 7839 09-6 月 -81 2450 10 10 ACCOUNTING NEW YORK7788 SCOTT ANALYST 7566 19-4 月 -87 3000 20 10 ACCOUNTING NEW YORK7839 KING PRESIDENT 17-11 月-81 5000 10 10 ACCOUNTING NEW YORK7844 TURNER SALESMAN 7698 08-9 月 -81 1500 0 30 10 ACCOUNTING NEW YORK7876 ADAMS CLERK 7788 23-5 月 -87 1100 20 10 ACCOUNTING NEW YORK7900 JAMES CLERK 7698 03-12 月-81 950 30 10 ACCOUNTING NEW YORK7902 FORD ANALYST 7566 03-12 月-81 3000 20 10 ACCOUNTING NEW YORK7934 MILLER CLERK 7782 23-1 月 -82 1300 10 10 ACCOUNTING NEW YORK7369 SMITH CLERK 7902 17-12 月-80 800 20 20 RESEARCH DALLAS7499 ALLEN SALESMAN 7698 20-2 月 -81 1600 300 30 20 RESEARCH DALLAS7521 WARD SALESMAN 7698 22-2 月 -81 1250 500 30 20 RESEARCH DALLAS7566 JONES MANAGER 7839 02-4 月 -81 2975 20 20 RESEARCH DALLAS217654 MARTIN SALESMAN 7698 28-9 月 -81 1250 1400 30 20 RESEARCH DALLAS7698 BLAKE MANAGER 7839 01-5 月 -81 2850 30 20 RESEARCH DALLAS7782 CLARK MANAGER 7839 09-6 月 -81 2450 10 20 RESEARCH DALLAS7788 SCOTT ANALYST 7566 19-4 月 -87 3000 20 20 RESEARCH DALLAS7839 KING PRESIDENT 17-11 月-81 5000 10 20 RESEARCH DALLAS7844 TURNER SALESMAN 7698 08-9 月 -81 1500 0 30 20 RESEARCH DALLAS7876 ADAMS CLERK 7788 23-5 月 -87 1100 20 20 RESEARCH DALLAS7900 JAMES CLERK 7698 03-12 月-81 950 30 20 RESEARCH DALLAS7902 FORD ANALYST 7566 03-12 月-81 3000 20 20 RESEARCH DALLASEMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC- - - - - - - - -7934 MILLER CLERK 7782 23-1 月 -82 1300 10 20 RESEARCH DALLAS7369 SMITH CLERK 7902 17-12 月-80 800 20 30 SALES CHICAGO7499 ALLEN SALESMAN 7698 20-2 月 -81 1600 300 30 30 SALES CHICAGO7521 WARD SALESMAN 7698 22-2 月 -81 1250 500 30 30 SALES CHICAGO7566 JONES MANAGER 7839 02-4 月 -81 2975 20 30 SALES CHICAGO7654 MARTIN SALESMAN 7698 28-9 月 -81 1250 1400 30 30 SALES CHICAGO7698 BLAKE MANAGER 7839 01-5 月 -81 2850 30 30 SALES CHICAGO7782 CLARK MANAGER 7839 09-6 月 -81 2450 10 30 SALES CHICAGO7788 SCOTT ANALYST 7566 19-4 月 -87 3000 20 30 SALES CHICAGO7839 KING PRESIDENT 17-11 月-81 5000 10 30 SALES CHICAGO7844 TURNER SALESMAN 7698 08-9 月 -81 1500 0 30 30 SALES CHICAGO7876

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论