付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1、课程名称:SQL语句2、所需要的表在所有的讲解中所要使用到的表全部都是 scott 用户下的表,所以必须了解在此用户下有那几张表,以及每张表的作用是什么。2.1、雇员表(emp)雇员表中的是一个个的雇员的基本信息。第(1)页MLDN实训中心:2.2、部门表(dept)表示一个个具体的部门信息2.3、工资等级表(SALGRADE)一个公司工资是有等级制度,那么用此表表示一个工资的等级2.4、奖金表(BONUS)表示的是一个雇员的工资及奖金第(2)页MLDN实训中心:工资等级表(SALGRADE)No.字段类型描述1GRADENUMBER等级名称2LOSALNUMBER此等级的最低工资3HIS
2、ALNUMBER此等级的最高工资部门表(dept)No.字段类型描述1DEPTNONUMBER(2)部门,是唯一2DNAMEVARCHAR2(14)部门名称3LOCVARCHAR2(13)部门位置雇员表(EMP)No.字段类型描述1EMPNONUMBER(4)表示雇员,是唯一2ENAMEVARCHAR2(10)表示雇员3JOBVARCHAR2(9)表示工作职位4MGRNUMBER(4)表示一个雇员的5HIREDATEDATE表示雇佣日期6SALNUMBER(7,2)表示月薪,工资7COMMNUMBER(7,2)表示奖金,或者称为佣金8DEPTNONUMBER(2)部门3、知识点3.1、上次课程
3、的主要知识点1、 Oracle 的安装及主要用户2、 sqlplusw 命令行工具3.2、本次预计讲解的知识点1、2、3、4、5、查询语句的基本格式使用 DISTINCT 关键字去掉重复的查询列使用限定查询对查询结果进行排序掌握 Oracle 中提供的各主要单行函数4、具体内容对于各个不同的数据库来讲,重点是掌握 SQL 语句,因为现在的数据库全部是以 SQL 语句为操作的标准,在实际中,各个数据库就是提供的函数不同。4.1、SQL简介(了解)SQL(Structured Query Language,结构查询语言)是一个功能强大的数据库语言。SQL 通常用于与数据库的通讯。ANSI(学会)声
4、称,SQL 是关系数据库管理系统的标准语言。第(3)页MLDN实训中心:奖金表(BONUS)No.字段类型描述1ENAMEVARCHAR2(10)雇员2JOBVARCHAR2(9)雇员工作3SALNUMBER雇员工资4COMMNUMBER雇员奖金(佣金)SQL 功能强大,概括起来,它可以分成以下几组:DML(Data Manipulation Language,数据操作语言)用于检索或者修改数据DDL(Data Definition Language,数据定义语言) 用于定义数据的结构,如创建、修改或者删除数据库对象 DCL(Dontrol Language,数据控制语言)用于定义数据库用户的
5、权限4.2、简单查询语句(重点)实际上简单查询语句语法格式就是;之前查询全部:如果现在假设,只需要查询出雇员的、工作的话,则就需要指定查询的列。第(4)页MLDN实训中心:SELECT empno,ename,job FROM emp ;SELECT * FROM emp ;SELECT * | 具体的列 别名FROM 表名称 ;查询的时候可以指定查询的返回列的名称,即为一个列起别名。现在要求查询出所有的工作。肯定要查询的是一个 job 字段第(5)页MLDN实训中心:SELECT job FROM emp ;SELECT empno, ename, job 工作 FROM emp ;以上的查
6、询结果似乎有一些不妥。因为工作存在重复值,既然要查询的是工作,所以肯定应该将重复的内容消除掉,所以在查询的时候可以通过 DISTINCT 直接消除掉所有的重复列。但是,在消除重复列的时候,有一点必须说明,如果要同时查询多列,则必须保证所有列都重复才能消除掉。例如:查询雇员的及工作因为雇员不重复,所以此时证明所有的列没有重复的,所以不能消除掉。一个新的要求:要求查询出雇员的,工作,但是显示的格式:是:7369 的雇员,是:SMITH,工作是:CLERK第(6)页MLDN实训中心:SELECT DISTINCT empno,job FROM emp ;SELECT DISTINCT * | 具体的
7、列 别名FROM 表名称 ;要想实现此种功能,则可以使用 Oracle 中提供的字符串连接操作,使用“|”表示。如果要加入一些显示信息的话,所有的其他的固定信息要使用“”括起来。在查询中也可以使用四则运算功能,例如:要求,求出每个雇员的及年薪。在程序中 sal*12 意义很不明确,所以最好为这个运算结果起一个别名,但是在起别名的时候一定要回避中文。程序中可以支持+、-、*、/的语句,所有的语句要有优先顺序,先乘除后加减。第(7)页MLDN实训中心:SELECT ename , sal * 12eFROM emp ;SELECT ename , sal * 12 FROM emp ;SELECT
8、 是: | empno | 的雇员,是: | ename | ,工作是: | job FROM emp ;4.3、限定查询(WHERE子句)(重点)之前的查询是将一张表的全部必须指定限定查询。限定查询的语法:查询出来,那么现在如果希望可以根据指定的条件查询的话,则范例:查询出工资大于 1500 的所有雇员信息 数学计算中,工资大于:sal1500范例:查询每月可以得到奖金的雇员信息奖金是 comm 字段只要字段中存在内容,则表示此内容不为空(null),如果存在内容,则会显示具体的值。不为空的表示:字段 IS NOT NULL范例:查询没有奖金的雇员第(8)页MLDN实训中心:SELECT *
9、 FROM emp WHERE comm IS NOT NULL ;SELECT * FROM emp WHERE sal1500 ;SELECT DISTINCT * | 具体的列 别名FROM 表名称WHERE 条件(s) 没有奖金则 comm 字段的内容肯定是 null,格式:字段 IS NULL范例:要求查询出,基本工资大于 1500,同时可以领取奖金的雇员信息。此时应该是两个条件,而且两个条件必须同时满足既然要求两个条件全部满足,则必须使用 AND 操作符进行条件的连接。同时指定了两个条件,两个条件必须同时满足才可以查询出结果。范例:要求查询出,基本工资大于 1500,或者可以领取奖
10、金的雇员信息。 如果要或者的概念使用 OR 进行连接,表示两个条件有一个满足即可。第(9)页MLDN实训中心:SELECT * FROM emp WHERE sal1500 OR comm IS NOT NULL ;SELECT * FROM emp WHERE sal1500 AND comm IS NOT NULL ;SELECT * FROM emp WHERE comm IS NULL ;之前使用 NOT 可以取反,把真的条件变为,变为真的。范例:要求查询出,基本工资不大于 1500,同时不可以领取奖金的雇员信息。此时相当于是整体的条件取反。从程序中可以发现,通过括号表示一组的条件。范
11、例:查询基本工资大于 1500,但是小于 3000 的全部雇员信息 满足两个:sal 1500 ,sal 1500 AND sal1500 AND comm IS NOT NULL) ;实际上 BETN AND 操作等价:sal=1500 AND sal、=、=、=等计算符号不等于符号:在 SQL 中如果要想使用不等于符号,可以有两种形式:“”、“!=”范例:查询雇员不是 7369 的雇员信息使用“”完成使用“!=”完成第(16)页MLDN实训中心:SELECT * FROM emp WHERE empno!=7369 ;SELECT * FROM emp WHERE empno7369 ;4
12、.4、对结果进行排序(ORDER BY子句)(重点)在 SQL 中可以使用 ORDER BY 子句对查询的结果进行排序,例如,现在使用查询全部的语句:此时,从查询结果可以发现,是按照雇员的进行排序的,那么此时如果要对使用指定的列进行排序,则就必须使用 ORDER BY 语句,语法格式如下:范例:要求按照工资由低到高排序第(17)页MLDN实训中心:SELECT * FROM emp ORDER BY sal ;SELECT DISTINCT * | 具体的列 别名FROM 表名称WHERE 条件(s)ORDER BY 排序的字段 1,排序的字段 2 ASC|DESC ASC 表示升序、DESC
13、 表示降序SELECT * FROM emp ;之前是按照由低到高的顺序完成,是采用的升序的形式,现在要求使用降序的形式完成。实际上如果在排序的时候没有指定排序规则,则默认的排序规则是升序排列。要想使用降序的方式完成,则使用 DESC 即可。范例:要求查询出 10 部门的所有雇员信息,查询的信息按照工资由高到低排序,如果工资相等,则按照第(18)页MLDN实训中心:SELECT * FROM emp ORDER BY sal DESC ;SELECT * FROM emp ORDER BY sal ASC ;雇佣日期由早到晚排序。 此时存在两个排序条件,第一个是降序,第二个升序排序的操作肯定是
14、放在整个 SQL 语句的最后执行。4.5、单行函数(重点)数据库系统中,每个数据库之间唯一不同的最大区别点就在与函数的支持上,使用函数可以完成一系列的操作功能。单行函数语法:参数说明:function_name:函数名称column:数据库列名 expres:字符串或计算表达式 arg1,arg2:在函数中使用参数单行函数分类:字符函数:接受字符输入并且返回字符或数值数值函数:接受数值输入并返回数值日期函数:对日期型数据进行操作转换函数:从一种数据类型转换为另一种数据类型通用函数:NVL 函数、DECODE 函数4.5.1、字符函数是专门处理字符的,例如,可以将大写字符变为小 ,还能求出字符的
15、长度。范例:将小写字母变为大写字母第(19)页MLDN实训中心:function_name(column|expres,arg1,arg2,)SELECT * FROM empWHERE deptno=10 ORDER BY sal DESC,hiredate ASC ;范例:一般用户在查询一个人的呢?的时候有可能考虑到这个人的是大写字母存的还是小写字母保存 那么此时,为了方便用户的使用就可以使用 upper 函数完成。还可以使用 lower()函数将一个字符串变为小写字母表示。还可以使用 initcap()函数将单词的第一个字母大写第(20)页MLDN实训中心:SELECT INITCAP(
16、O WORLD) FROM dual ;SELECT LOWER(O WORLD) FROM dual ;SELECT * FROM emp WHERE ename=UPPER(Smith) ;SELECT UPPER(smith) FROM DUAL ;范例;使用此函数将雇员表中的雇员变为开头字母大写字符串除了可以使用“|”连接之外,还可以使用 CONCAT()函数进行连接操作。第(21)页MLDN实训中心:SELECT CONCAT(o ,world) FROM DUAL ;SELECT INITCname) FROM emp ;此时已经完成了连接,但是此种方式肯定不如“|”好使。在字符函
17、数中可以进行字符串的截取、求出字符串的长度、进行指定内容的替换字符串截取:substr()字符串长度:length()内容替换:replace()但是在 substr()函数的时候有一点需要提醒大家注意,跟面试有关: Oracle 中substr()函数的截取点是从 0 还是从 1 开始。|- 从 0 或从 1 开始效果是一样的,因为 Oracle 比较智能。范例:要求显示所有雇员的及的后三个字符 因为雇员的字符串长度不一样,所以只能求出整个的长度再减去 2,这样进行截取操作。此时,功能已经实现了,但是操作比较麻烦。实际上在 substr()函数中提供了一种非常方便的机制,可以采用倒着截取的方
18、式,只要输入的位置是负数就表示倒着进行。第(22)页MLDN实训中心:SELECT ename,SUBSTR(ename,-3,3) FROM emp ;SELECT ename,SUBSTR(ename,LENGTH(ename)-2) FROM emp ;SELECT substr(o,1,3) 截取字符串 , length(o) 字符串长度 ,replace(o,l,x) 字符串替换FROM DUAL ;4.5.2、数值函数数值函数只要是包含以下几种:四舍五入:ROUND()截断小数位:TRUNC()取余(取模):MOD范例:执行四舍五入操作当然,在 ROUND()函数中也可以指定四舍五
19、入的位数范例:保留两位小数在使用 ROUND()函数中还有一点非常有意思,可以直接对整数进行四舍五入的进位。第(23)页MLDN实训中心:SELECT ROUND(789.536,-2) FROM dual ;SELECT ROUND(789.536,2) FROM dual ;SELECT ROUND(789.536) FROM dual ;TRUNC()与 ROUND()不同的是,在 TRUNC()操作中,不会保留任何的小数,而且小数点也不会执行四舍五入的操作。范例:验证 TRUNC()函数范例:通过 TRUNC()也可以指定小数点的保留位数范例:使用负数表示位数第(24)页MLDN实训中
20、心:SELECT TRUNC(789.536,-2) FROM DUAL ;SELECT TRUNC(789.536,2) FROM DUAL ;SELECT TRUNC(789.536) FROM DUAL ;范例:使用 MOD()函数可以进行取余的操作4.5.3、日期函数在 Oracle 中提供了很多与日期操作相关的函数,包括加减日期等等。但是在日期进行加或减结果的时候有一些规律:日期 数字 = 日期日期 + 数字 = 日期日期 日期 = 数字(天数)范例:显示 10 部门雇员进入公司的数 如果要想完成此操作,则首先必须知道当前的日期,在 Oracle 中可以通过以下的操作求出当前日期,使
21、用 sysdate 表示。数:当前日期 雇佣日期 = 天数 / 7 = 求出数第(25)页MLDN实训中心:SELECT empno,ename,ROUND(SYSDATE-hiredate)/7) FROM emp ;SELECT SYSDATE FROM DUAL ;SELECT MOD(10,3) FROM DUAL ;在 Oracle 中提供了以下的日期函数支持:MONTHS_BETN():求出给定日期范围的月数ADD_MONTHS():在指定日期上加上指定的月数,求出之后的日期 NEXT_DAY():下一个的今天是那一个日期LAST_DAY():求出给定日期的最后一天日期范例:验证
22、MONTHS_BETN()程序查询时包含了小数点,可以使用 ROUND()进行四舍五入的操作。第(26)页MLDN实训中心:SELECT empno,ename,MONTHS_BETN(sysdate,hiredate) FROM emp ;范例:验证 ADD_MONTHS()函数范例:验证 NEXT_DAY()函数 此函数求出下一次给定日期数范例:验证LAST_DAY()函数 求出一个日期的最后一天第(27)页MLDN实训中心:SELECT LAST_DAY(SYSDATE) FROM DUAL ;SELECT NEXT_DAY(SYSDATE,一) FROM DUAL ;SELECT AD
23、D_MONTHS(SYSDATE,4) FROM DUAL ;4.5.4、转换函数转换函数主要有以下几种:TO_CHAR():转换成字符串TO_NUMBER():转换成数字TO_DATE():转换成日期范例:查询所有雇员的雇员、雇佣日期但是现在要求可以将年、月、日进行分开,此时就可以使用 TO_CHAR()函数进行拆分,拆分的时候必须指定拆分的通配符:年:y,年是四位的数字,所以使用 yyyy 表示月:m,月是二位的数字,所以使用 mm 表示日:d,日是二位的数字,所以使用 dd 表示还可以使用 to_char()函数进行日期显示的转换功能。 Oracle 中默认的日期格式:19-4 月 -8
24、7 中国的喜欢格式:1987-04-19第(28)页MLDN实训中心:SELECT empno,ename,TO_CHAR(hiredate,yyyy-mm-dd) FROM emp ;SELECT empno,ename,TO_CHAR(hiredate,yyyy) year , TO_CHAR(hiredate,mm) months , TO_CHAR(hiredate,dd) dayFROM emp ;SELECT empno,ename,hiredate FROM emp ;从运行结果中可以发现,如果是 5 月,则会使用 05 表示。那么这个 0 称为前导 0,如果不希望显示前导 0
25、的话,则可以使用 fm 去掉这些 0。to_char()函数除了可以用在日期上,也可以用在数字上。例如:要查询全部的雇员、工资最好在数字中加入一些符号,以分割太长的数字,一般中国使用“,”,所以,此时,可以使用 to_char()函数进行格式化: 9:表示一位数字如果,此时,希望数字可以明确的表示出区域,可以使用以下两种符号:第(29)页MLDN实训中心:SELECT empno,ename,TO_CHAR(sal,99,999) FROM emp ;SELECT empno,ename,sal FROM emp ;$:表示L:表示Local 的缩写,以本地的语言进行金额的显示TO_NUMBE
26、R 是可以将字符串变为数字的一种函数。以上就表示把字符串变为数字,之后进行数字的加法操作。TO_DATE()函数可以将一个字符串变为 DATE 型的数据。2009-2-16 是一个字符串,现在要变为 DATE 类型。 例第(30)页MLDN实训中心:SELECT TO_DATE(2009-02-16,yyyy-mm-dd)FROM DUAL ;SELECT TO_NUMBER(123) + TO_NUMBER(123) FROM DUAL ;SELECT empno,ename,TO_CHAR(sal,$99,999)FROM emp ;4.5.5、通用函数范例:要求求出每个雇员的年薪m)*1
27、2求出年薪的时候应该加上奖金的,格式(之所以造成这样的结果,是因为有些雇员的奖金是 NULL,NULL 值计算之后结果还是 NULL。所以,面对这样的情况,就可以使用 NVL 函数,可以将一个指定的 null 值变为指定的内容。第(31)页MLDN实训中心:SELECT empno,ename,NVL(comm,0),(sal+NVL(comm,0)*12e FROM emp ;SELECT empno,ename,(m)*12 FROM emp ;如果需要进行计算的时候,对于 null 必须使用 NVL()函数进行一个转换操作。DECODE()函数,此函数是在面试最有可能问到语法:。DECODE()类似于 IFELSEIFELSE 语句。说明:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026陕西汉中宁强县妇幼保健院招聘24人备考题库及一套答案详解
- 2026陕西榆林市市属公立医院春季招聘66人备考题库含答案详解(完整版)
- 2025年安全生产考试题库(建筑施工安全)施工安全教育培训课程试题附答案
- 浙江杭州市城市建设投资集团有限公司2026届春季校园招聘备考题库附答案详解(精练)
- 潍坊市公开招聘2026届山东省公费师范毕业生备考题库(82人)含答案详解(a卷)
- 盐亭县2026年上半年公开考核招聘教师备考题库(10人)附答案详解
- 2025年新药品管理法培训试题(含答案)
- 邛崃市2026年“蓉漂人才荟”公开招聘事业单位工作人员的补充备考题库含答案详解(b卷)
- 2025年康复治疗师康复训练方案设计试题及答案解析
- 节日促销门店执行方案
- 浙江大学“六高强校”战略
- 2025年中国联通太原市分公司招聘笔试参考题库含答案解析
- 国家职业技术技能标准 6-04-05-02 涂装工 人社厅发200966号
- 手卫生课件(完整版)
- DB33 656-2013 用能单位能源计量管理要求
- 中国科技大学课件系列:《生物信息学》01
- 聚合性痤疮的临床特征
- 安装通风管道安全协议书3
- 【经典文献】《矛盾论》全文
- 安全安全技术交底模板
- 初中数学优生(尖子生)培养策略
评论
0/150
提交评论