数据库课件:第8章 数据查询_第1页
数据库课件:第8章 数据查询_第2页
数据库课件:第8章 数据查询_第3页
数据库课件:第8章 数据查询_第4页
数据库课件:第8章 数据查询_第5页
已阅读5页,还剩78页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

第8章数据查询主要内容SELECT语句介绍简单查询分组查询多表查询子查询合并查询SQL内置函数8.1SELECT语句介绍SELECT[ALL|DISTINCT]column_name[,expression…]FROMtable1_name[,table2_name,view_name,…][WHEREcondition][GROUPBYcolumn_name1[,column_name2,…][HAVINGgroup_condition]][ORDERBYcolumn_name2[ASC|DESC][,column_name2,…]];8.2简单查询无条件查询有条件查询查询排序查询统计

8.2.1无条件查询查询所有列SELECT*FROMemployees;

查询指定列SELECTdepartment_id,department_nameFROMdepartments;

使用算术表达式SELECTemployee_id,salary*0.8FROM.employees;使用字符常量SELECTemployee_id,'salaryis:',salaryFROMemployees;使用函数SELECTemployee_id,UPPER(first_name)FROMemployees;

改变列标题SELECTemployee_idempno,salarysalFROMemployees;使用连接字符串SELECT'员工名:'||first_name||last_nameFROMemployees;

消除重复行SELECTALLdepartment_idFROMemployees;SELECTDISTINCTdepartment_idFROMemployees;

8.2.2有条件查询查询满足条件的元组可以通过WHERE子句实现。WHERE条件中常用的运算符号运算符号谓词比较大小=,>,<,>=,<=,<>,!=确定范围BETWEENAND,NOTBETWEENAND确定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重条件AND,OR关系运算SELECTemployee_id,salaryFROMemployeesWHEREdepartment_id!=10;

SELECTemployee_id,salaryFROMemployeesWHEREsalary>1000;确定范围谓词BETWEENAND与NOTBETWEENAND。SELECT*FROMemployeesWHEREdepartment_idBETWEEN10AND20;SELECT*FROMemployeesWHEREsalaryNOTBETWEEN1000AND2000;确定集合谓词IN可以用来查找属性值属于指定集合的元组。SELECTemployee_id,first_name,last_name,salaryFROMemployeesWHEREdepartment_idIN(10,20,30,50);字符匹配%(百分号)代表任意长(长度为0)字符串。_(下划线)代表任意单个字符。ESCAPE:转义字符SELECT*FROMemployeesWHERElast_nameLIKE'%S%';SELECT*FROMemployeesWHEREfirst_nameLIKE'_a%';SELECT*FROMemployeesWHEREfirst_nameLIKE'%x_%'ESCAPE'x';空值操作涉及空值查询时使用ISNULL或ISNOTNULL,这里的IS不能用=替代。SELECT*FROMemployeesWHEREdepartment_idISNULL;SELECT*FROMemployeesWHEREcommission_pctISNOTNULL;逻辑操作用逻辑运算符NOT、AND和OR来联结多个查询条件。优先级:NOT、AND、OR(用户可以用括号改变优先级)。IN谓词实际上是多个OR运算的缩写。

SELECT*FROMemployeesWHEREdepartment_id=10ANDsalary>1500;SELECT*FROMemployeesWHERE(department_id=10ORdepartment_id=20)ANDsalary>1500;注意:使用BETWEEN…AND,NOTBETWEEN…AND,IN,NOTIN运算符的查询条件都可以转换为NOT,AND,OR的逻辑运算。例如,下面两个语句是等价的:SELECT*FROMemployeesWHEREsalary>3000ANDsalary<4000;SELECT*FROMemployeesWHEREsalaryBETWEEN3000AND4000;升序、降序排序ASC:升序(缺省);DESC:降序SELECTemployee_id,salaryFROMemployeesORDERBYsalary;SELECTemployee_id,salaryFROMemployeesORDERBYsalaryDESC;多列排序

首先按照第一个列或表达式进行排序;当第一个列或表达式的数据相同时,以第二个列或表达式进行排序,以此类推。SELECT*FROMemployeesORDERBYdepartment_id,salaryDESC;8.2.3查询排序按表达式排序

可以按特定的表达式进行排序。

SELECTemployee_id,salaryFROMemployeesORDERBYsalary*12;使用别名排序

可以使用目标列或表达式的别名进行排序。SELECTemployee_id,salary*12year_salaryFROMemployeesORDERBYyear_salary;

使用列位置编号排序

如果列名或表达式名称很长,那么使用位置排序可以缩短排序语句的长度。SELECTemployee_id,salary*12yearsalFROMemployeesORDERBY2;8.2.4查询统计函数格式功能AVGAVG([DISTINCT|ALL]<列名>)计算一列值的平均值(要求数值列)COUNTCOUNT([DISTINCT|ALL]*)统计元组个数COUNTCOUNT([DISTINCT|ALL]<列名>)统计一列中非空值的个数MAXMAX([DISTINCT|ALL]<列名>)求一列值中的最大值MINMIN([DISTINCT|ALL]<列名>)求一列值中的最小值SUMSUM([DISTINCT|ALL]<列名>)计算一列值的总和(要求数值列)STDDEVSTDDEV(<列名>)..计算一列值的标准差VARIANCEVARIANCE(<列名>)计算一列值的方差注意除了COUNT(*)函数外,其他的统计函数都不考虑返回值或表达式为NULL的情况。聚集函数只能出现在目标列表达式、ORDERBY子句、HAVING子句中,不能出现在WHERE子句和GROUPBY子句中。默认对所有的返回行进行统计,包括重复的行;如果要统计不重复的行信息,则可以使用DISTINCT选项。如果对查询结果进行了分组,则聚集函数的作用范围为各个组,否则聚集函数作用于整个查询结果。统计50号部门员工的人数、平均工资、最高工资、最低工资。SELECTcount(*),avg(salary),max(salary),min(salary)FROMemployeesWHEREdepartment_id=50;统计所有员工的平均工资和工资总额。SELECTavg(salary),sum(salary)FROMemployees;统计有员工的部门的个数。SELECTcount(DISTINCTdepartment_id)FROMemployees;统计员工工资的方差和标准差。SELECTvariance(salary),stddev(salary)FROMemployees;8.3分组查询基本语法单列分组查询多列分组查询使用HAVING子句限制返回组SELECTcolumn,group_function,…FROMtable[WHEREcondition]GROUPBYgroup_by_expression[HAVINGgroup_condition][ORDERBYcolumn[ASC|DESC]];(1)基本语法注意:GROUPBY子句用于指定分组列或分组表达式。集合函数用于对分组进行统计。如果未对查询分组,则集合函数将作用于整个查询结果;如果对查询结果分组,则集合函数将作用于每一个组,即每一个分组都有一个集合函数。HAVING子句用于限制分组的返回结果。WHERE子句对表中的记录进行过滤,而HAVING子句对分组后形成的组进行过滤。在分组查询中,SELECT子句后面的所有目标列或目标表达式要么是分组列,要么是分组表达式,要么是集合函数。单列分组查询将查询出来的记录按照某一个指定的列进行分组SELECTdepartment_id,count(*),avg(salary)FROMemployeesGROUPBYdepartment_idORDERBYdepartment_id;

多列分组查询在GROUPBY子句中指定了两个或多个分组列SELECTdepartment_id,job_id,count(*),avg(salary)FROMemployeesGROUPBYdepartment_id,job_id;使用HAVING子句限制返回组可以使用HAVING子句,只有满足条件的组才会返回。SELECTdepartment_id,count(*),avg(salary)FROMemployeesGROUPBYdepartment_idHAVINGavg(salary)>8000;8.4多表查询交叉连接内连接等值连接不等值连接自身连接外连接左外连接右外连接全外连接8.4.1交叉连接概念两个或多个表之间的无条件连接。一个表中所有记录分别与其他表中所有记录进行连接。如果进行连接的表中分别有n1,n2,n3…条记录,那么交叉连接的结果集中将有n1×n2×n3×…条记录。标准SQL语句的连接方式SELECTtable1.column,talbe2.column[,…]FROMtable1CROSSJOINtable2;Oracle扩展的连接方式SELECTtable1.column,talbe2.column[,…]FROMtable1,table2;employees表中有107条记录,dept表中有28条记录,那么两个表交叉连接后有2996条记录。SELECTemployee_id,first_name,salary,department_nameFROMemployeesCROSSJOINdepartments;或者:SELECTemployee_id,first_name,salary,department_nameFROMemployees,departments;8.4.2内连接执行过程内连接语法等值内连接非等值内连接自身内连接执行过程首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第1个元组与该元组拼接形成结果表中的一个元组。表2全部找完后,再找表1中的第2个元组,然后再从头扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第2个元组与该元组拼接形成结果表中的一个元组。重复执行,直到表1中的全部元组都处理完毕为止。内连接语法:标准SQL语句的连接方式SELECTtable1.column,talbe2.column[,…]FROMtable1[INNER]JOINtable2[JOIN…]ONcondition;内连接语法:Oracle扩展的连接方式SELECTtable1.column,talbe2.column[,…]FROMtable1,table2[,…]WHEREcondition;等值内连接SELECTemployee_id,salary,e.department_id,department_nameFROMemployeeseJOINdepartmentsdONe.department_id=d.department_idWHEREe.department_id=10;SELECTemployee_id,salary,e.department_id,department_nameFROMemployeese,departmentsdWHEREe.department_id=d.department_idANDe.department_id=10;非等值内连接SELECTemployee_id,first_name,last_name,salary,gradeFROMhr.employeesJOINhr.sal_gradesONsalary>min_salaryANDsalary<max_salary;SELECTemployee_id,first_name,last_name,salary,gradeFROMhr.employees,hr.sal_gradesWHEREsalary>min_salaryANDsalary<max_salary;

自身内连接SELECTwork.employee_id,work.first_name,manager.employee_id,manager.first_nameFROMemployeesworkJOINemployeesmanagerONwork.manager_id=manager.employee_id;SELECTwork.employee_id,work.first_name,manager.employee_id,manager.first_nameFROMemployeeswork,employeesmanagerWHEREwork.manager_id=manager.employee_id;8.4.3外连接左外连接右外连接全外连接左外连接语法:标准SQL语句的连接方式SELECTtable1.column,table2.column[,…]FROMtable1LEFTJOINtable2[,]ONtable1.column<operator>table2.column[,…];左外连接语法:Oracle扩展的连接方式SELECTtable1.column,table2.column[,…]FROMtable1,table2[,…]WHEREtable1.column<operator>table2.column(+)[…];查询10号部门的部门名、员工号、员工名和所有其他部门的名称,语句为SELECTdepartment_name,employee_id,first_name,last_nameFROMdepartmentsdLEFTJOINemployeeseONd.department_id=e.department_idANDd.department_id=10;或SELECTdepartment_name,employee_id,first_name,last_nameFROMdepartmentsd,employeeseWHEREd.department_id=e.department_id(+)ANDe.department_id(+)=100;

右外连接语法:标准SQL语句的连接方式SELECTtable1.column,table2.column[,…]FROMtable1RIGHTJOINtable2[,…]ONtable1.column<operator>table2.column[…];右外连接语法:Oracle扩展的连接方式SELECTtable1.column,table2.column[,…]FROMtable1,table2[,…]WHEREtable1.column(+)<operator>table2.column[…];查询20号部门的部门名称及其员工号、员工名,和所有其他部门的员工名、员工号,语句为SELECTemployee_id,first_name,department_nameFROMdepartmentsdRIGHTJOINemployeeseONd.department_id=e.department_idANDd.department_id=20;或SELECTemployee_id,first_name,department_nameFROMdepartmentsd,employeeseWHEREd.department_id(+)=e.department_idANDd.department_id(+)=20;全外连接是指在内连接的基础上,将连接操作符两侧表中不符合连接条件的记录加入结果集中。在Oracle数据库中,全外连接的表示方式为SELECTtable1.column,table2.column[,…]FROMtable1FULLJOINtable2[,…]ONtable1.column1=table2.column2[…];查询所有的部门名和员工名,语句为SELECTdepartment_name,first_name,last_nameFROMemployeeseFULLJOINdepartmentsdONe.department_id=d.department_id;

8.5子

询子查询概述无关子查询单行单列子查询多行单列子查询单行多列子查询多行多列子查询相关子查询在FROM子句中使用子查询在DDL语句中使用子查询使用WITH子句的子查询子查询的概念子查询是指嵌套在其他SQL语句中的SELECT语句,也称为嵌套查询。在执行时,由里向外,先处理子查询,再将子查询的返回结果用于其父语句(外部语句)的执行。子查询作用在INSERT或CREATETABLE语句中使用子查询在UPDATE语句中使用子查询可以修改一个或多个记录的数据;在DELETE语句中使用子查询可以删除一个或多个记录在WHERE和HAVING子句中使用子查询可以返回一个或多个值;在DDL语句中使用子查询子查询概述8.5.1无关子查询单行单列子查询多行单列子查询单行多列子查询多行多列子查询单行单列子查询是指子查询只返回一行数据,而且只返回一列的数据。运算符=,>,<,>=,<=,!=查询比105号员工工资高的员工的员工号、员工名、员工工资信息,语句为SELECTemployee_id,first_name,last_name,salaryFROMemployeesWHEREsalary>(SELECTsalaryFROMemployeesWHEREemployee_id=105);(1)单行单列子查询(2)多行单列子查询多行单列子查询是指返回多行数据,且只返回一列的数据。运算符号运算符含义IN与子查询返回结果中任何一个值相等NOTIN与子查询返回结果中任何一个值都不等>ANY比子查询返回结果中某一个值大=ANY与子查询返回结果中某一个值相等<ANY比子查询返回结果中某一个值小>ALL比子查询返回结果中所有值都大<ALL比子查询返回结果中任何一个值都小EXISTS子查询至少返回一行时条件为TRUENOTEXISTS子查询不返回任何一行时条件为TRUE查询与50号部门某个员工工资相等的员工信息。SELECTemployee_id,first_name,last_name,salaryFROMemployeesWHEREsalaryIN(SELECTsalaryFROMemployeesWHEREdepartment_id=50);

查询比50号部门某个员工工资高的员工信息。SELECTemployee_id,first_name,last_name,salaryFROMemployeesWHEREsalary>ANY(SELECTsalaryFROMemployeesWHEREdepartment_id=50);查询比50号部门所有员工工资高的员工信息。SELECTemployee_id,first_name,last_name,salaryFROMemployeesWHEREsalary>ALL(SELECTsalaryFROMemployeesWHEREdepartment_id=50);(3)单行多列子查询单行多列子查询是指子查询返回一行数据,但是包含多列数据。多列数据进行比较时,可以成对比较,也可以非成对比较。成对比较要求多个列的数据必须同时匹配,而非成对比较则不要求多个列的数据同时匹配。查询与169号员工的工资、工种都相同的员工的信息。SELECTemployee_id,first_name,last_name,salary,job_idFROMemployeesWHERE(salary,job_id)=(SELECTsalary,job_idFROMemployeesWHEREemployee_id=169);查询与50号部门某个员工工资相同,工种也与10号部门的某个员工相同的员工的信息。SELECTemployee_id,first_name,last_name,salary,job_idFROMemployeesWHEREsalaryIN(SELECTsalaryFROMemployeesWHEREdepartment_id=50)ANDjob_idIN(SELECTjob_idFROMemployeesWHEREdepartment_id=50);(4)多行多列子查询多行多列子查询是指子查询返回多行数据,并且是多列数据。例如,查询与50号部门某个员工的工资和工种都相同的员工的信息,语句为SELECTemployee_id,first_name,last_name,salary,job_idFROMemployeesWHERE(salary,job_id)IN(SELECTsalary,job_idFROMemployeesWHEREdepartment_id=50);

8.5.2相关子查询子查询在执行时并不需要外部父查询的信息,这种子查询称为无关子查询。如果子查询在执行时需要引用外部父查询的信息,那么这种子查询就称为相关子查询。在相关子查询中经常使用EXISTS或NOTEXISTS谓词来实现。如果子查询返回结果,则条件为TRUE,如果子查询没有返回结果,则条件为FALSE。查询没有任何员工的部门号、部门名。SELECT*FROMdepartmentsdWHERENOTEXISTS(SELECT*FROMemployeeseWHEREe.department_id=d.department_id);

查询比本部门平均工资高的员工信息。SELECTemployee_id,first_name,last_name,salaryFROMemployeeseWHEREsalary>(SELECTavg(salary)FROMemployeesWHEREdepartment_id=e.department_id);8.5.3在FROM子句中使用子查询当在FROM子句中使用子查询时,该子查询被作为视图对待,成为内嵌视图。查询各个员工的员工号、员工名及其所在部门平均工资。SELECTemployee_id,first_name,last_name,d.avgsalFROMemployees,(SELECTdepartment_id,avg(salary)avgsalFROMemployeesGROUPBYdepartment_id)dWHEREemployees.department_id=d.department_id;查询各个部门号、部门名、部门人数及部门平均工资。SELECTd.department_id,department_name,ds.amount,ds.avgsalFROMdepartmentsd,(SELECTdepartment_id,count(*)amount,avg(salary)avgsalFROMemployeesGROUPBYdepartment_id)dsWHEREd.department_id=ds.department_id;内嵌视图有一种特殊的应用,称为Top-N-Analysis查询,通过使用伪列ROWNUM,为查询结果集排序,并返回符合条件的记录。Top-N视图的基本定义形式为:SELECT[column_list],ROWNUMFROM(SELECT[column_list]FROMtableORDERBYTop-N_column)WHEREROWNUM<=N;查询工资排序在前1~5名的员工号、员工名、工资及其工资排序号。SELECT*FROM(SELECTemployee_id,first_name,last_name,salaryFROMemployeesORDERBYsalaryDESC)nested_ordeWHEREROWNUM<=5;查询工资排序在前5~10名的员工号、员工名、工资及其工资排序号。SELECT*FROM(SELECTROWNUMnum,employee_id,first_name,last_name,salaryFROM(SELECTemployee_id,first_name,last_name,salaryFROMemployeesORDERBYsalaryDESC)nested_order1)nested_order2WHEREnumBETWEEN5AND10;8.5.4DDL语句中的子查询可以在CREATETABLE和CREATEVIEW语句中使用子查询来创建表和视图。CREATETABLEemp_subqueryASSELECTemployee_id,first_name,last_name,salaryFROMemployees;CREATEVIEWemp_view_subqueryASSELECT*FROMemployeesWHEREsalary>2000;8.5.5使用WITH子句的子查询如果在一个SQL语句中多次使用同一个子查询,可以通过WITH子句给子查询指定一个名字,从而可以实现通过名字引用该子查询,而不必每次都完整写出该子查询。查询人数最多的部门的信息。SELECT*FROMdepartmentsWHEREdepartment_idIN(SELECTdepartment_idFROMemployeesGROUPBYdepartment_idHAVINGcount(*)>=ALL(SELECTcount(*)FROMemployeesGROUPBYdepartment_id));相同的子查询连续出现了两次,因此可以按下列方式编写查询语句。WITHdeptinfoAS(SELECTdepartment_id,count(*)numFROMemployeesGROUPBYdepartment_id)SELECT*FROMdepartmentsWHEREdepartment_idIN(SELECTdepartment_idFROMdeptinfoWHEREnum=(SELECTmax(num)FROMdeptinfo))8.6合并操作语法UNIONINTERSECTMINUS语法:

SELECTquery_statement1[UNION|UNIONALL|INTERSECT|MINUS]SELECTquery_statement2;注意:当要合并几个查询的结果集时,这几个查询的结果集必须具有相同的列数与数据类型。如果要对最终的结果集排序,只能在最后一个查询之后用ORDERBY子句指明排序列。8.6.1并集运算UNION运算符用于获取几个查询结果集的并集,将重复的记录只保留一个,并且默认按第一列进行排序。查询50号部门的员工号、员工名、工资和部门号以及工资大于8000的所有员工的员工号、员工名、工资和部门号,语句为SELECTemployee_id,salary,department_idFROMemployeesWHEREdepartment_id=50UNIONSELECTemployee_id,salary,department_idFROMemployeesWHEREsalary>8000ORDERBYdepartment_id;如果要保留所有的重复记录,则需要使用UNIONALL运算符。SELECTemployee_id,salary,department_idFROMemployeesWHEREdepartment_id=50UNIONALLSELECTemployee_id,salary,department_idFROMemployeesWHEREsalary>8000ORDERBYdepartment_id;8.6.2交集运算INTERSECT用于获取几个查询结果集的交集,只返回同时存在于几个查询结果集中的记录。同时,返回的最终结果集默认按第一列进行排序。查询50号部门中工资大于6000的员工号、员工名、工资和部门号,语句为:SELECTemployee_id,first_name,last_name,salary,department_idFROMemployeesWHEREdepartment_id=50INTERSECTSELECTemployee_id,first_name,last_name,salary,department_idFROMemployeesWHEREsalary>6000;

8.6.3差集运算MINUS用于获取几个查询结果集的差集,即返回在第一个结果集中存在,而在第二个结果集中不存在的记录。同时,返回的最终结果集默认按第一列进行排序。查询50号部门中工种不是“ST_CLERK”的员工号、员工名和工种名称,语句为:

SELECTemployee_id,first_name,last_name,job_idFROMemployeesWHEREdepartment_id=50MINUSSELECTemployee_id,first_name,last_name,job_idFROMemployeesWHEREjob_id='ST_CLERK';8.7SQL内置函数SQL函数分类数值函数字符函数日期函数转换函数其他函数SQL函数分类根据参数作用行数的不同,可以分为:单行函数多行函数根据参数类型不同,可以分为:数值函数字符函数日期函数转换函数聚集函数8.7.1数值函数函数返回值ABS(n)返回n的绝对值CEIL(n)返回大于或等于n的最小整数EXP(n)返回e的n次幂FLOOR(n)返回小于或等于n的最大整数LN(n)返回以E为底的n的对数LOG(m,n)返回以m为底的n的对数MOD(m,n)返回m除以n的余数POWER(m,n)返回m的n次方ROUND(m[,n])对m进行四舍五入(n大于0时,将m四舍五入到小数点右边n位,n等于零时,表示对m进行取整,n小于0时,则小数点左边的数字位置被圆整。SIGN(n)判断n的正负(n大于0返回,n等于0返回0,n小于0返回-1SQRT(n)返回n的平方根SQUARE(n)返回n的平方TRUNC(m[,n])对m进行截断操作(n截断到小数点后第n位,如果n未给出,则系统默认为0,n也可以为负数,表示小数点左边的数字位置被删除成零。SELECTsalary/22daysal,round(salary/22,1),trunc(salary/22,1),round(salary/22,-1),trunc(salary/22,-1)FROMemployees;SELECTsalary,width_bucket(salary,1000,10000,10)FROMemployeesWHEREdepartment_id=30;

SELECTfloor(3.5),ceil(3.5),mod(5,3),remainder(5,3),mod(4,3),remainder(4,3)FROMdual;FLOOR(3.5)CEIL(3.5)MOD(5,3)REMAINDER(5,3)MOD(4,3)REMAINDER(4,3)-------------------------------------------------------342-1118.7.2字符函数函数返回值ASCII(char)字符串首字符的ASC码值CHR(n)ASC码值为n的字符CONCAT把两个列值拼接起来;“||”操作符更通用INITCAP(char)将字符串中每个单词的首字母大写INSTR(char1,char2,a,b)INSTRB(char1,char2,a,b)返回指定字符的位置LENGTH(char)LENGTHB(char)计算字符串的长度SUBSTR(char,m[,n])求子串。column中从起始位置m开始长度为n的子串Replace(str1,str2,str3)LOWER(char)、UPPER(char)将字符串中所有的大写字母变为小(大)写LPAD(char1,n[,char2])从左侧用字符串char2补齐字符串char1至长度n(右对齐)RPAD(char1,n[,char2])从右侧用char2补齐char1至长度n.LTRIM(char[,SET])把char中最左侧的若干个字符去掉,以使其首字符不在SET中RTRIM(char[,SET])把char中最右侧的若干个字符去掉,以使其尾字符不在SET中TRIM([leading|trailing|both]FROMstring)SELECTlpad('abc',5,'#')leftpad,rpad('abc',5,'#')rightpad,ltrim('abcd','a')lefttrim,rtrim('abcde','e')righttrim,substr('abcd',2,3)substringFROMdual;LEFTPADRIGHTPADLEFTTRIMRIGHTTRIMSUBSTRING--------------------------------------------------------------##abcabc##bcdabcdbcd

SELECTemployee_id,concat(concat(first_name,''),last_name)employee_nameFROMemployeesWHEREemployee_id=108;SELECTinstr('abcde','b')position,replace('oracle9i','9i','10g')newstring,soundex('hello')soundFROMdual;POSITIONNEWSTRINGSOUND---------------------------------------2oracle10gH4008.7.3日期函数日期函数是指对日期进行处理的函数,函数输入为DATE或TIMESTAMP类型的数据,输出为DATE类型的数据(除MONTH_BETWEEN函数返回整数以外)。Oracle数据库中日期的默认格式为DD-MON-YY。可以通过设置NLS_DATE_FORMAT参数设置当前会话的日期格式,通过NLS_LANGUAGE参数设置表示日期的字符集。例如:ALTERSESSIONSETNLS_DATE_FORMAT='YYYY-MM-DDHH24:MI:SS';ALTERSESSIONSETNLS_LANGUAGE='AMERICAN';函数返回值ADD_MONTHS(d,n)返回日期d添加n个月的日期CURRENT_DATE返回系统当前日期和时间CURRENT_TIMESTAMP[(p)]返回系统当前时间戳EXTRACT(departFROMd)返回d中depart对应部分的内容

LAST_DAY(d)返回d所在月份最后一天的日期LOCALTIMESTAMP(P)返回本地时间戳LOCALTIMESTAMP[(p)]返回当前会话时区所对应的日期时间MONTHS_BETWEEN(d1,d2)日期d1和d2之间相隔的月数NEXT_DAY(d,day)d后第一周指定的日期。ROUND(d,format)日期d按format格式进行舍入SYSDATE返回系统当前日期和时间。SYSTIMESTAMP返回系统当前时间戳。TRUNC(d,format)返回截尾到由format指定单位的日期TO_CHAR(d,[,fmt][,'nlsparam'])将日期时间d转换为符合特定格式的字符串TO_TIMESTAMP(char[,fmt][,'nlsparam'])将符合特定日期和时间格式的字符串转换为TIMESTAMP类型值SELECTSYSDATE,add_months(sysdate,2)ADDM,next_day(sysdate,2)NEXTD,Last_day(sysdate)LASTD,round(sysdate,'MONTH')ROUNDM,trunc(sysdate,'MONTH'

)TRUNCMFROMDUAL;SYSDATEADDMNEXTDLASTDROUNDMTRUNCM------------------------------------------------------------2009-03-272009-05-272009-03-302009-03-312009-04-012009-03-01SELECTextract(YEARFROMSYSDATE)YEAR,

温馨提示

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

评论

0/150

提交评论