Orecle 单行函数
oracle11g的基本SQL语句和函数
![oracle11g的基本SQL语句和函数](https://img.taocdn.com/s3/m/bd37e60dbed5b9f3f90f1c3f.png)
GROUP BY
首先创建表
create table 成绩(sno number, km varchar2(13), score number); Insert into 成绩 values(1,‟语文’,60); Insert into 成绩 values(1,‟数学’,60); Insert into 成绩 values(1,‟英语’,60); Insert into 成绩 values(2,‟语文’,70); Insert into 成绩 values(2,‟数学’,70); Insert into 成绩 values(3,‟英语’,89); commit;
插入空值
Insert into student values(3,null, to_date(„19980311‟,‟yyyy-MMdd‟)); hh mm ss
insert into student(sno,birthday) values( 4,to_date('19880601','yyyy-MM-dd'));
月、日,小时、分钟、秒 数值数据类型的声明语法: 主要的日期时间类型有:
NUMBER [( p[, s])] DATE - 存储日期和时间部分,精确到整个的秒 P表示精度,S表示小数点的位数 TIMESTAMP - 存储日期、时间和时区信息,秒值精 确到小数点后6位 Select sysdate from dual; Select to_char(sysdate,‟yyyymmdd hh24:mi:ss‟) from dual; Select to_char(sysytimestamp,‟yyyymmdd hh24:mi:ssxff6‟) from dual;
oracle函数
![oracle函数](https://img.taocdn.com/s3/m/fbcc10fc0066f5335a8121ed.png)
SQL> SELECT empno, ename, deptno
2 FROM
emp
3 WHERE ename = 'blake';
no rows selected
SQL> SELECT 2 FROM 3 WHERE
empno, ename, deptno emp ename = UPPER('blake');
学习改变命运,知 识创造未来
oracle函数
数值型函数
使用ceil函数: SELECT ceil(2.35) FROM dual; 执行结果: CEIL(2.35) ------------3 说明:该函数求得大于等于2.35的最小整数,结果
为3。
学习改变命运,知 识创造未来
oracle函数
数值型函数
--------------- -------------- -----------------
45.92
46
50
学习改变命运,知 识创造未来
oracle函数
使用 TRUNC函数
SQL> SELECT TRUNC(45.923,2), TRUNC(45.923),
2
TRUNC(45.923,-1)
45.92
ØMOD: 取余数 MOD(1600, 300) 100
学习改变命运,知 识创造未来
oracle函数
使用 ROUND 函数
SQL> SELECT ROUND(45.923,2), ROUND(45.923,0),
2
ROUND(45.923,-1)
3 FROM DUAL;
oracle函数用法
![oracle函数用法](https://img.taocdn.com/s3/m/3d71d81ab7360b4c2e3f648c.png)
Oracle函数用法1.sql函数包括单行函数和多行函数,其中单行函数是指输入一行输出也是一行的函数;多行函数也被称为分组函数,它会根据输入的多行数据输出一个结果。
一数字函数1.CEIL(n):该函数用于返回大于等于数字n的最小整数,示例如下:2.FLOOR(n):该函数用于返回小于等于数字n的最大整数,示例如下:3.MOD(m,n):该函数用于取得两个数字相除后的余数,如果数字n 为0,则返回结果为m,示例如下:4.ROUND(n,[m]):该函数用于执行四舍五入运算,示例如下:如果省略m,则四舍五入至整数位:如果m是负数,则四舍五入到小数点前m位:如果m是正数,则四舍五入至小数点后m位:5.TRUNC(n,[m]):该函数用于截取数字,如果省略数字m,则将数字n的小数部分截去:如果数字m是正数,则将数字n截取至小数点后的第m位:如果数字m是负数,则将数字n截取至小数点的前m位:6.SIGN(n):该函数用于检测数字的正负,如果数字n小于0,则函数的返回值为-1;如果数字n等于0,则函数的返回值为0;如果数字n大于0,则函数的返回值为17.ABS(n):该函数用于返回数字n的绝对值,请看示例:8.SIN(n):该函数用于返回数字n(以弧度表示的角)的正弦值,示例如下:9.COS(n):该函数用于返回数字n(以弧度表示的角度值)的余弦值。
10.ASIN(n):该函数用于返回数字n的反正弦值,输入值的范围是-1~1,输出值的单位为弧度,示例如下:11.ACOS(n):该函数用于返回数字n的反余弦值,输入值的范围是-1~1,输出值的单位为弧度,示例如下:12.SINH(n):该函数用于返回数字n的双曲正弦值,示例如下:13.COSH(n):该函数用于返回数字n的双曲余弦值,示例如下:14.TAN(n):该函数用于返回数字n(以弧度表示的角)的正切值,示例如下:15.A TAN(n):该函数用于返回数字n的反正切值,输入值可以是任何数字,输出值的单位为弧度,示例如下:16.A TAN2(n,m):该函数用于返回数字n除以数字m的反正切值。
单行函数——精选推荐
![单行函数——精选推荐](https://img.taocdn.com/s3/m/e5ec7bdd77eeaeaad1f34693daef5ef7ba0d124e.png)
单⾏函数所谓的单⾏函数指的就是完成某⼀具体功能的操作函数,例如:转⼤⼩写等。
⼀般⽽⾔,单⾏函数的格式:返回值函数名称(参数)。
单⾏函数分为以下⼏种:字符串函数、数值函数、⽇期函数、转换函数、通⽤函数。
1.字符串函数字符串函数是处理字符串数据的(对于字符串的数据有可能是从列上找到的,或者是直接设置的字符串常量)。
包含的函数有如下⼏种:No函数名称返回类型描述1 UPPER(列|字符串)字符串将传⼊的字符串变成⼤写形式2 LOWER(列|字符串)字符串将传⼊的字符串变成⼩写形式3 INITCAP(列|字符串)字符串开头⾸字母⼤写,其他的字母变为⼩写4 LENGTH(列|字符串)数字取得指定字符串的长度5SUBSTR(列|字符串,开始索引,[长度])字符串进⾏字符串的截取,如果没有设置长度,表⽰从截取全部6REPLACE(列|字符串,旧内容,新内容)字符串将指定的字符串数据以新数据替换旧数据范例:在Oracle⾥⾯,所有的函数如果要想进⾏验证,也必须编写SQL语句。
为了⽅便⽤户进⾏⼀些验证或者是⼀些不需要查询表的查询操作,专门提供了⼀个dual的虚拟表。
1.转⼤写⼩写操作 1)转⼤写SELECT UPPER('hello') FROM dual; 2).将所有姓名转⼩写SELECT LOWER(ename) FROM emp;⼀般在⼀些不区分数据⼤⼩写的情况都会同意的将所有的内容转成⼤写或⼩写的形式处理。
2.⾸字母⼤写其他字母⼩写 1)将所有的雇员姓名以⾸字母⼤写的形式保存SELECT INITCAP(ename) FROM emp;3.取得字符串的长度 1)基础操作SELECT LENGTH('ddffgg') FROM dual; 2)查询雇员姓名长度为5的全部雇员信息SELECT * FROM emp WHERE LENGTH(ename)=5;4.字符串截取 1)验证函数SQL> SELECT SUBSTR('helloworld',6) FROM dual;SUBSTR('HE----------worldSQL> SELECT SUBSTR('helloworld',0,5) FROM dual;SUBSTR('HE----------hello 在程序之中所有的字符串的⾸字母的索引都是0,但是在Oracle⾥⾯,所有的字符串的⾸字母索引都是1,如果设置的是0 ,那么它也会按照1的⽅式进⾏处理。
oracle常用函数使用大全_最新整理
![oracle常用函数使用大全_最新整理](https://img.taocdn.com/s3/m/d1d29436376baf1ffc4fad29.png)
单值函 数在查询 中返回单 个值,可 被应用到 select, where子 句,start with以及 connect by 子句 和having 子句。 (一).数值 型函数 (Number Functions ) 数值型函 数输入数 字型参数 并返回数 值型的值 。多数该 类函数的 返回值支 持38位小 数点,诸 如:COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN, and TANH 支 持36位小 数点。 ACOS, ASIN, ATAN, and ATAN2支 持30位小
n1<0,则 oracle从 右向左数 确认起始 位置 例如: SELECT SUBSTR( 'What is this',-5,3) FROM DUAL;
n1>c1.len gth则返 回空 例如: SELECT SUBSTR( 'What is this',50,3) FROM DUAL; 然后再请 你猜猜, 如果 n2<1,会 如何返回 值呢
3、 TRUNC(n 1[,n2] 返 回截尾到 n2位小数 的n1的 值,n2缺 省设置为 0,当n2为 缺省设置 时会将n1 截尾为整 数,如果 n2为负 值,就截 尾在小数 点左边相 应的位上 。 例如: SELECT TRUNC(2 3.56),TRU NC(23.56, 1),TRUNC (23.56,-1) FROM DUAL;
例如: SELECT REPLAC E('WWhhh hhaT is tHis w W','W','-') FROM
9、 SOUNDE X(c) 神奇 的函数 啊,该函 数返回字 符串参数 的语音表 示形式, 对于比较 一些读音 相同,但 是拼写不 同的单词 非常有用 。计算语 音的算法 如下:
(完整版)ORACLE函数大全
![(完整版)ORACLE函数大全](https://img.taocdn.com/s3/m/aefbd5f5bed5b9f3f80f1cd3.png)
ORACLE函数大全SQL中的单记录函数1.ASCII返回与指定的字符对应的十进制数;SQL〉 select ascii('A')A,ascii(’a') a,ascii('0’) zero,ascii(' ') space from dual;A A ZERO SPACE————-——-— -—---———- ---—----- ---————-—65 97 48 322.CHR给出整数,返回对应的字符;SQL〉 select chr(54740) zhao,chr(65) chr65 from dual;ZH C—— -赵 A3.CONCAT连接两个字符串;SQL> select concat('010—’,'88888888')||'转23’高乾竞电话 from dual;高乾竞电话—-——-———-—--——-—010—88888888转234.INITCAP返回字符串并将字符串的第一个字母变为大写;SQL〉 select initcap('smith’) upp from dual;UPP—————Smith5.INSTR(C1,C2,I,J)在一个字符串中搜索指定的字符,返回发现指定的字符的位置;C1 被搜索的字符串C2 希望搜索的字符串I 搜索的开始位置,默认为1J 出现的位置,默认为1SQL> select instr(’oracle traning’,’ra',1,2) instring from dual;INSTRING—-—------96.LENGTH返回字符串的长度;SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst;NAME LENGTH(NAME) ADDR LENGTH(ADDR) SALLENGTH(TO_CHAR(SAL))————-———---————-—- —--——---——----—- -———--—-—-—— ----———-————----—-——--—--—---高乾竞 3 北京市海锭区 6 9999.99 77。
ORACLE常用函数功能演示
![ORACLE常用函数功能演示](https://img.taocdn.com/s3/m/6eeff7c75fbfc77da269b104.png)
ORACLE常用函数功能演示文档撰写:孟祥新写在前面:ORACLE内置函数,相当于C语言中的库函数,提供了常规数据库编程中所需的绝大多数基本功能,并且通过函数的组合或嵌套使用,可以发挥其强大的功能。
由于这些内置函数都是由ORACLE公司的编程大家所写,而且其执行代码是内嵌在ORACLE数据库系统中的,因此其执行效率极高。
在数据库编程中能广泛使用ORACLE所提供的内置函数,将大大提高程序代码的执行效率。
“站在高人的肩膀上,将使你变得更高”。
演示之前的环境设置:为了在SQL*PLUS中直观地显示函数返回的结果,我将“头”信息先屏蔽掉。
操作如下:一、单行函数1.数值函数(1)三角函数①SIN、ASIN、SINH(正弦、反正弦、双曲正弦)②COS、ACOS、COSH(余弦、反余弦、双曲余弦)③TAN、ATAN、TANH(正切、反正切,双曲正切)(2)幂、方根及对数运算函数①POWER(m, n)(取m的n次幂)②SQRT(n)(取n的平方根)③EXP(n)(取自然对数底e的n次方根)④LN(n)(取n的自然对数)⑤LOG(m, n)(取以m为底n的对数)以上函数功能演示如下:(3)数值处理函数①ABS(n)(取绝对值)②SIGN(n)(符号函数)③CEIL(n)(取不小于n的最小整数)④FLOOR(n)(取不大于n的最大整数)⑤ROUND(n, [m])(按m精度对n进行4舍5入)⑥TRUNC(n, [m])(按m精度对n进行截取)⑦MOD(m, n)(取m除以n的余数)以上函数功能演示如下:2.字符处理函数(1)对字符串的大小写处理的函数①INITCAP(功能:将字符串中每个单词的首字母,变换为大写。
)②UPPER(功能:将字符串中的所有字母,转换为大写。
)③LOWER(功能:将字符串中的所有字母,转换为小写。
)以上函数功能演示如下:(2)对字符串进行处理的函数①CONCAT(字符串连接函数,也可用|| 替代)功能演示如下:②ASCII(取字符的编码)③CHR(将编码转换为对应的字符)以上函数功能演示如下:④LTRIM(去除左侧空格/指定字符)⑤RTRIM(去除右侧空格/指定字符)⑥TRIM(去除两侧的空格/去除指定字符)以上函数去除空格功能演示如下:以上函数去除指定字符功能演示如下:请注意:在用TRIM去除字符串中指定字符(非空格)时的特殊用法。
PLSQL单行函数和组函数详解
![PLSQL单行函数和组函数详解](https://img.taocdn.com/s3/m/9eafb006cc17552707220856.png)
PLSQL单行函数和组函数详解函数是一种有零个或多个参数并且有一个返回值的程序。
在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类:单行函数、组函数。
1、SQL中的单行函数SQL和PL/SQL中自带很多类型的函数,有字符、数字、日期、转换、和混合型等多种函数用于处理单行数据,因此这些都可被统称为单行函数。
这些函数均可用于SELECT,WHERE、ORDER BY 等子句中,例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX等单行函数。
SELECT ename,TO_CHAR(hiredate,'day,DD-Mon-YYYY')FROM emp Where UPPER(ename) Like'AL%'ORDER BY SOUNDEX(ename)单行函数也可以在其他语句中使用,如update的SET子句,INSERT的VALUES子句,DELET的WHERE子句,认证考试特别注意在SELECT语句中使用这些函数,所以我们的注意力也集中在SELECT 语句中。
NULL和单行函数在如何理解NULL上开始是很困难的,就算是一个很有经验的人依然对此感到困惑。
NULL值表示一个未知数据或者一个空值,算术操作符的任何一个操作数为NULL值,结果均为提个NULL值,这个规则也适合很多函数,只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了NULL参数时能够返回非NULL值。
在这些中NVL函数时最重要的,因为他能直接处理NULL值,NVL有两个参数:NVL(x1,x2),x1和x2都是表达式,当x1为null时返回X2,否则返回x1。
下面我们看看emp数据表它包含了薪水、奖金两项,需要计算总的补偿column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2不是简单的将薪水和奖金加起来就可以了,如果某一行是null值那么结果就将是null,比如下面的例子:update emp set salary=(salary+bonus)*1.1这个语句中,雇员的工资和奖金都将更新为一个新的值,但是如果没有奖金,即 salary + null,那么就会得出错误的结论,这个时候就要使用nvl函数来排除null值的影响。
oracle常用关键字和函数
![oracle常用关键字和函数](https://img.taocdn.com/s3/m/1e452b014531b90d6c85ec3a87c24028915f8521.png)
oracle常⽤关键字和函数数据库的增删改查:增:insert into ... values();例:insert into p_emp values(sq_emp.nextval,'⼩⽩','保洁',7902,sysdate,600,null,30,0);commit;注意,表⾥边有多少列,values()⾥边的内容就有多少,⼀⼀对应关系。
后边加分号结束语句,然后commit;提交。
⾃增长序列:右击Sequences,new⼀个新的⾃增序列,起⼀个name,然后有⼀个nextval属性,实现⾃增长。
查:select ... from ...例:select t.*,t.rowid from p_emp t(⽤t代表p_emp),加上t.rowid,可以直接在表⾥进⾏修改。
单⾏语句可以不加分号!删除:delete ... where ...例:delete p_emp e where e.empon = 1;commit;从⼀个表⾥边删除某-⾏,地址是当empon = 1的那⼀⾏。
改:update 表 set 表.属性 = ... where 表.属性 = ...;update p_emp e set e.ename = '李华' where e.empon = 1;commit;数据库的常⽤关键字:1.in---:在某个范围内例⼦:select * from p_emp e where e.sal in(400,300,5000);查表p_emp的⼯资分别为400,300,5000,的那⼀⾏。
2.like---:模糊查询 %表⽰任意字符,_表⽰单个字符。
例⼦:select * from p_emp e where e.ename like 'T%';查询名字以t开头的,注意like后⾯必须加 ‘ ’,查询的为字符串的话,开头要⼤写。
极好的 sql oracle 培训资料03
![极好的 sql oracle 培训资料03](https://img.taocdn.com/s3/m/855d86087cd184254b353554.png)
下转换:
从 VARCHAR2 or CHAR 到 NUMBER
VARCHAR2 or CHAR
DATE
显式转换
TO_NUMBER TO_DATE
NUMBER
CHARACTER
DATE
TO_CHAR
TO_CHAR
TO_CHAR 用于日期型
TO_CHAR(date, 'fmt')
日期格式模型: − 必须用单引号引起来并且是大小写敏感的 − 可以包含任何有效的日期元素 − 可以用fm来消除前导空格或零 − 使用逗号与日期型数据分隔开
RR 日期格式
当前年份 1995 1995 2001 2001 指定的日期 27-OCT-95 27-OCT-17 27-OCT-17 27-OCT-95 RR 格式 1995 2017 2017 1995 YY 格式 1995 1917 2017 2095
如果指定两位数年份是: 0–49 如果当前年 份的两位数 是: 0–49 返回的日期是当前世 纪的日期 返回的日期是下一个 世纪的日期 50–99 返回的日期是上一个 世纪的日期 返回的日期是当前世 纪的日期
EMPNO ENAME DEPTNO --------- ---------- --------7698 BLAKE 30
字符处理函数
字符处理函数
函数 CONCAT('Good', 'String') SUBSTR('String',1,3) LENGTH('String') INSTR('String', 'r') 结果 GoodString Str 6 3
Single-Row Functions 单行函数
数据库操作语言
![数据库操作语言](https://img.taocdn.com/s3/m/25fbe368f4335a8102d276a20029bd64783e62b2.png)
数据库操作语⾔⼀、基本知识 1、Oracle服务器由两⼤部分组成:Oracle数据库和Oracle实例 Oracle数据库:位于硬盘上实际存放数据的⽂件,以.DBF结束的⽂件 Oracle实例:位于物理内存⾥的数据结构 2、数据库中的语⾔: DML:数据库操作语⾔(select、insert、update、delete) DDL:数据库定义语⾔(create table、alter table、drop table、create view) DCL:数据库控制语⾔(commit、rollback、grant、revoke)⼆、:数据库操作语⾔-select 1、简单的查询: select * from 表名; --查询表的所有信息 select 列名1,列名2,列名3... from 表名; --查询表的部分信息 select e.ename 姓名, e.sexl 性别, e.age 年龄 from emp e; --查询语句中别名的使⽤ 2、条件查询where select * from emp where deptno = 10; select * from emp where hiredate='09-6⽉ -81'; --正确,'09-6⽉ -81'为⽇期默认格式 DD-MON-RR 对于⽇期有两种修改⽅式: a)修改系统默认⽇期格式:alter session set NLS_DATE_FORMAT='yyyy-mm-dd'; b)使⽤to_date:select * from emp where hiredate = to_date('1981-6-9', 'yyyy-mm-dd'); to_date(要转换的内容, 格式) 3、⽐较运算符 a)、between ... and ... 在两个值之间(包含边界值),⼩值在前⼤值在后,可以作⽤于数字、⽇期 select * from emp where sal between 1000 and 2000; --查询薪⽔1000-2000的员⼯: b)、[not] in(set) select * from emp where deptno in (10, 20); --查询10号和20号部门的员⼯: 如果使⽤not in,那么括号⾥不能有null值 c)、like 模糊查询% 代表零个或多个字符 _ 代表⼀个字符 select * from emp where ename like 'S%'; --查询以S开头的员⼯: select * from emp where ename like '____'; --查询名字是4个字的员⼯ select e.ename from emp e where e.ename not like '%R%' order by e.ename; --显⽰不带有"R"的员⼯的姓名 4、逻辑运算 and:逻辑并 or:逻辑或 not:逻辑⾮ 5、排序 --order by:排序(升序asc(默认);降序desc) order by 后⾯可以跟:列名、表达式、别名、序号 如果后⾯的多列都按降序排,那么每列后⾯跟desc select e.ename,e.sal,e.hiredate from emp e order by e.ename; ----(1)查询EMP表显⽰所有雇员名、⼯资、雇佣⽇期,并以雇员名的升序进⾏排序。
oracle(数据类型函数)
![oracle(数据类型函数)](https://img.taocdn.com/s3/m/93dde535eefdc8d376ee32fd.png)
select lpad(ename,'10','*') from emp;
rpad //右侧填充 smith***** 10填充长度
select rpad(ename,'10','*') from emp;
trim //清除空格
round(314.1415,-2)结果 300
trunc()//截断
Select trunc(100.256,2) from dual; //结果 100.25
trunc(3.1415,3) 截断 3.141
ceil //向上取整
ceil(3.14)//结果 4 注意:ceilபைடு நூலகம்3.0)结果为3 返回不比3.14小的数据
//输出日期字段对应日后的第一个星期二
ROUND(x,y) //将日期x四舍五入到y指定日期单位(月或年)的第一天
select ename,hiredate,round(hiredate,'month') from emp;
//输出hiredate指定的月四舍五入的数据(如3月16就往前加一月等于4月1日,如3月15就不变还是3月1日)
//格式化输出数字(9代表一位数字,没有就不显示,但对于小数点后的强制显示)
2)select to_char(sal, '$00,000.0000') from emp;
//0代表一位数字,没有显示为0
3)select to_char(sal, 'L99,999.9999') from emp; //L代表本地货币
oracle数据库常用语句
![oracle数据库常用语句](https://img.taocdn.com/s3/m/9683a51cc5da50e2524d7fdd.png)
数据类型:字符类型:char(标准通用拉丁字符),nchar(汉字等其他字符),varchar2(长度可变字符),nvarchar2,long;数字类型:number(通用),integer,float日期和时间:date,timestamps(分秒,时区)行:rowid(逻辑地址),urowid(逻辑地址,内存地址);二进制:raw(size)(原始二进制数据),long raw,blob(二进制大型对象;最大4G字节),clob(字符大型对象),nclob,bfile;2.oracle WEB管理页面:localhost:5560/isqlplus; localhost:5500/em设置远程测试:tnsping datebasename;远程连接:sqlplusname/password@datebasename;4.创建表空间:create tablespace testdatafile 'test.dbf' size 10m autoextend on next 2mmaxsize unlimitedloggingpermanentextent management local autoallocateblocksize 8ksegment space management manuaL;//段空间5.创建用户并连接: create user "TEST" identified by "TEST"default tablespace TESTtemporary tablespace TEMPquota unlimited on TESTquota unlimited on TEMPgrant "connect" to test//分配基本权限。
conn test/test;6.重设用户密码:scott/tiger为默认用户,alter user scott identified by tiger;解锁:alter user scott account unlock;7.sql脚本的执行:@路径/filename.sql;8.创建表:create table t1(c1 type 约束,c2 type 约束(not null,unique,check,primary key))9.查询:select distinct c1 from t1 where 条件group by c1 having by 子条件order by c1;10.连接字符串:select c1 (as可省) 列1 ||c2 from t1;11.单行函数:select lower(c1) from t1;upper全大写,initcap第一个字母大写,length;12.Select Sysdate from dual(系统默认的空表)显示系统时间,months_between(date,date);13.round(数据,5位数),to_date(1997-10-11,’yyyy-mm-dd’),to_char()函数使用要转换。
Oracle聚合函数分析
![Oracle聚合函数分析](https://img.taocdn.com/s3/m/93a4be16f12d2af90242e676.png)
COVAR_POP,返回一对表达式的总体协方差。
COVAR_SAMP,返回一对表达式的样本协方差。
COUNT,对组内发生的事情进行累计。如果指定*或一些非空常数,count将对所有行计数,如果指定一个表达式,count返回表达式非空赋值的计数,当有相同值出现时,这些相等的值都会被纳入被计算的值;可以使用DISTINCT来记录去掉一组中完全相同的数据后出现的行数。
RATIO_TO_REPORT,该函数计算expression/(sum(expression))的值,它给出相对于总数的百分比,即当前行对sum(expression)的贡献。
REGR_ (Linear Regression) Functions
功能描述:这些线性回归函数适合最小二乘法回归线,有9个不同的回归函数可使用。
FIRST,从DENSE_RANK返回的集合中取出排在最前面的一个值的行(可能多行,因为值可能相等),因此完整的语法需要在开始处加上一个集合函数以从中取出记录。
FIRST_VALUE,返回组中数据窗口的第一个值。
LAG,可以访问结果集中的其它行而不用进行自连接。它允许去处理游标,就好像游标是一个数组一样。在给定组中可参考当前行之前的 行,这样就可以从组中与当前行一起选择以前的行。Offset是一个正整数,其默认值为1,若索引超出窗口的范围,就返回默认值(默认返回的是组中第一 行),其相反的函数是LEAD
REGR_SLOPE:返回斜率,等于COVAR_POP(expr1, expr2) / VAR_POP(expr2)
REGR_INTERCEPT:返回回归线的y截距,等于
AVG(expr1) - REGR_SLOPE(expr1, expr2) * AVG(expr2)
Oracle中文使用手册
![Oracle中文使用手册](https://img.taocdn.com/s3/m/d932770776c66137ee0619cc.png)
1.Oracle的使用1.1. SQLPLUS的命令初始化表的位置:set NLS_LANG=american_7ascii (设置编码才可以使用下面脚本)cd $ORACLE_HOME/rdbms cd demo summit2.sql*********************************我们目前使用的是oralce 9i 9201 版本select * from v$version;恢复练习表命令:sqlplus **/** @summit2.sql //shell要在这个文件的位置。
登陆oracle的命令:sqlplus 用户名/密码show user 显示当前登陆的身份.set pause onset pause off 分页显示.oracle中默认日期和字符是左对齐,数字是右对齐table or view does not exist ; 表或示图不存在edit 命令用于自动打开vi修改刚修执行过的sql的命令。
修改方法二:l 3 先定位到行 c /旧串/新串执行出错时,利用错误号来查错误:!oerr ora 942 (装完系统后会装一个oerr工具,用于通过错误号来查看错误的具体信息)想在sql中执行unix命令时,把所有的命令前加一个!就可以,或者host( 用于从sql从切换至unix环境中去)/*** 初次使用时注意 ****运行角本时的命令:先切换到unix环境下,cd $oracle_home cd sqlplus cd demo 下面有两个角本建表语句。
@demobld.sqlsqlplus nanjing/nanjing @demobid.sql 直接运行角本,后面跟当前目录或者是绝对路径保存刚才的sql语句:save 命令第二次保存时要替换之前的角本 save 文件名 replace把刚才保的sql重新放入 buffer中spool on 开启记录spool off 关闭记录spool 文件名此命令会把所有的操作存在某个文件中去常见缩写:nls national language support 国家语言支持1.2. SQL的结构|DDL 数据库定义|DML 数据库管理SQL――Commit rollback|DCL 数据库控制|grant+revoke 权限管理表分为:系统表(数据字典),用户表注:知道数据字典可以更便于使用数据库。
Oracle数据库培训-SQL基础篇
![Oracle数据库培训-SQL基础篇](https://img.taocdn.com/s3/m/5178fbba50e79b89680203d8ce2f0066f5336460.png)
连字运算符
连字运算符: •连接列或者字符串到其它的列 •用两个竖线表示(||) •构造一个字符表达式的合成列 SELECT first_name||last_name AS Employees FROM employees;
文字字符串
•文字字符串是包含在SELECT列表中的一个字符 串,一个数字或者一个日期 •日期和字符的文字字符串值必须用单引号括起来 •每个文字字符串在每行输出一次 SELECT last_name||' is a '||job_id
空值
•null 是一个未分配的、未知的,或不适用的值 •null不是0,也不是空格 •包含空值的算术表达式计算结果为空 SELECT last_name, job_id, salary,
commission_pct FROM employees;
定义列别名
列别名: •改变列标题的名字 •可用于计算结果 •紧跟在列名后面–在列名和别名之间可以有选项 AS 关键字 •如果别名中包含有空格、或者特殊字符、或者大 小写敏感,要求用双引号 SELECT last_name AS name, commission_pct comm FROM employees;
SQL 函数
• 函数是SQL的一个非常强有力的特性,函数能够 用于下面的目的:
– 执行数据计算 – 修改单个数据项 – 操纵输出进行行分组 – 格式化显示的日期和数字 – 转换列数据类型
• SQL函数有输入参数,并且总有一个返回值。 注:在本课中讲述的大多数函数是针对SQL的 Oracle版的。
SQL 函数 (续)
AS "Employee Details” FROM employees;
约束和排序数据
ORACLE-SQL语句学习教程
![ORACLE-SQL语句学习教程](https://img.taocdn.com/s3/m/91247686d0d233d4b14e69ba.png)
目录概述 (2)第一章SQL*PLUS 工具软件的使用 (5)第二章基本查询 (9)第三章条件查询 (13)第四章单行函数 (16)第五章多表查询 (20)第六章组函数 (23)第七章子查询 (25)第八章运行期间指定变量 (29)第九章创建基表 (31)第十章ORACLE数据字典 (36)第十一章操纵数据 (38)第十二章修改基表及其约束 (42)第十三章创建序列 (45)第十四章创建视图 (47)第十五章创建索引 (50)概述20世纪70年代初,E.F.Codd 在计算机学会(Association of Computer Machinery, 简写为ACM)期刊Communications of the ACM(ACM 通讯)发表了题为”A Relational Model of Data for Large Shared Data Banks”(大型共享数据库的数据关系模型)的论文,该论文提出的关系数据库模型成为今天最为权威的关系型数据库管理模型。
IBM公司首先使用该模型开发出了结构化英语查询语言SEQUEL(Structured English Query Language),作为其关系数据库原型System R的操作语言,实现对关系数据库的信息检索。
SEQUEL后来简写为SQL,即Structured Query Language(结构化查询语言)的缩写。
ORACLE公司于1997年推出了第一个商业应用的SQL软件。
20世纪80年代初,美国国家标准化组织(ANSI)开始着手制订SQL标准,最早的ANSI标准于1986年颁布,它也被称为SQL-86。
标准的出台使SQL作为标准的关系数据库语言的地位得到加强。
SQL标准几经修改和完善,目前SQL语言方面新的ANSI标准是1992年制定的ANSI X3.135-1992,“Database Language SQL”。
此标准也被国际电工委员会(International Electro technical Commission, 即IEC)所属的国际标准化组织(International Standards Organization, 即ISO)所接受,并将它命名为ISO/IEC9075:1992, “Database Language SQL”。
经典_Oracle的sql语句百例训练
![经典_Oracle的sql语句百例训练](https://img.taocdn.com/s3/m/a83214d3db38376baf1ffc4ffe4733687e21fc23.png)
经典_Oracle的sql语句百例训练oracle系列《一》:简单sql与单行函数使用scott/tiger用户下的emp表和dept表中顺利完成以下练,表的结构表明如下dept部门表(deptno部门编号/dname部门名称/loc地点)工资=薪金+佣金登入oracle数据库1、sqlplusscott/tiger2、sqlplus/nologsql>connscott/tiger若是使用sys的账号进行登录的话,则使用以下语句sql>conn/assysdba【1】emp表中内容查阅sql>select*fromemp;失效,原因就是没找出该表中,因为该表时scott用户的表中,所以查阅时必须加之scott.emp就可以了【2】显示当前用户sql>showuser【3】查看当前用户的所有表sql>select*fromtab;【4】若想重复继续执行上一条sql语句,则在sqlplus命令行下输出\即可【5】查询一张表的结构,例如dept表sql>descdept【6】在雇员表查阅雇员的编号、姓名、工作sql>selectempno,ename,jobfromemp;【7】可以为列名取别名,在linux下oracle如果英文别名不加上双引号则会变成大写sql>selectempno编号,ename姓名,job工作fromemp;【8】查询所有的工作sql>selectdistinctjobfromemp;工作可能会重复,加之distinct关键字【9】若要求按照以下的格式进行结果输出,如no:7469,name:smith,job:clerksql>select'no:'||empno||',name:'||ename||',job:'||jobfromemp;【10】建议列举每个雇员的姓名及年薪【11】查看每月可以得到奖金的雇员信息【12】建议基本工资大于1500,同时可以申领奖金的雇员信息【13】查询基本工资不大于1500,同时不可以领取奖金的雇员信息【14】查阅在1981年雇用的全部雇员信息,between..and涵盖等同于的情况sql>select*fromempwherehiredatebetween'01-jan-81'and'31-dec-81';【15】oracle对大小敏感,所以查询时名字要区分大小写【16】建议查阅出来雇员编号不是7369、7499的雇员信息sql>select*fromempwhereempnonotin(7369,7499);【17】sql中like语句必须特别注意通配符%和_sql>select*fromempwherehiredatelike'?%';【18】查阅雇员编号不是7369的雇员信息,采用<>或!=sql>select*fromempwhereempno<>7369;【19】要求对雇员的工资由低到高进行排序,升序为默认(asc),降序(desc)sql>select*fromempgroupbysal;【20】查阅出来部门号为10的雇员信息,查阅的信息按照工资从低至高,若工资成正比则按雇佣日期从早到晚排序sql>select*fromempwheredeptno=10groupbysaldesc,hiredateasc;数据库系统中,每个数据库之间区别最小的就是在函数的积极支持上,单行函数就是最简单的函数,单行函数分成1、字符函数:接受字符输入并且返回字符或数值2、数值函数:接受数值输入并返回数值3、日期函数:对日期型数据进行操作4、切换函数:将一种数据初始化为另一种数据类型5、通用型函数:nvl、decode函数字符函数:【1】大小写切换upper和lowersql>selectupper('smith')fromdual;【2】将雇员姓名变为开头字母大写,initcapsql>selectinitcap(ename)fromemp;字符函数中存有相连接函数concat,但不如||不好用,除了字符串处置的一些函数字符串撷取:substr()字符串长度:length()内容替代:replace()sql>selectsubstr('hello',1,3),length('hello'),replace('hello','l','x')fromdual;这里注意的是oracle中字符串截取从0和从1开始都是一样的,谨防面试提问【3】建议表明所有雇员的姓名及姓名的后3个字符sql>selectename,substr(ename,length(ename)-2)fromemp;以上操作显得较为麻烦,substr()函数是可以倒着截取sql>selectename,substr(ename,-3,3)fromemp;数值函数:1、四舍五入:round()2、截断小数位:trunc()3、取余(取模):modsql>selectround(789.536)fromdual;【1】保留2位小数,(如果是-2则对整数进行四舍五入,变为800了)sql>selectround(783.56,2)fromdual;【2】使用mod()函数进行取余操作sql>selectmod(10,3)fromdual;日期函数:1、日期-数字=日期2、日期+数字=日期3、日期-日期=数字(天数)【1】求出当前日期sql>selectsysdatefromdual;oracle提供了以下的日期函数支持:months_between():谋出来给定日期范围的月数add_months():在指定日期上加上指定的月数,求出之后的日期next_day():下一个的今天的日期last_day():谋出来给定日期的最后一天日期【2】求出从雇用日期到今天所有雇员的雇员编号、姓名和月数sql>selectempno,ename,round(months_between(sysdate,hiredate))fromemp;。
oracle单行函数(Oraclesinglefunction)
![oracle单行函数(Oraclesinglefunction)](https://img.taocdn.com/s3/m/94acbc8e50e79b89680203d8ce2f0066f53364a0.png)
oracle单行函数(Oracle single function)0。
备份EMP表创建表myemp为SELECT * FROM emp=========================================================== ============================================================================================字符型函数=====================================================1。
低(C):将字符串全部转为小写史葛查询EMP表工作为的记录“职员”。
SELECT * FROM EMP在较低的(工作)= 'clerk”2。
上(C):将字符串全部转为大写选择上(ABC”)从双三.initcap(C):首字母大写选择initcap(ABC”)从双4。
concat(C1,C2):、连接C1 C2选择concat('我的名字','胡泽旺”)从双选择concat(':',员工编号empno)从EMP选择“员工编号:“| | EMPNO从EMP5。
substr(C1,N1,N2 [,]):取子串:从C1字符串中取从N1(N1从1开始)开始的N2个子串,如果没有N2、N1 N1的末尾开始到则表示从选择concat('http:/ /邮件”,substr('**************”,8))”邮箱地址”双6。
长度(C):去字符串C的长度选择长度('name胡泽旺”)从双7。
(C1、C2等[我],[,]):在C1 C2字符串里搜索子串从我位置开始第J次出现的位置(I,J默认为1)选择工具('**************”、“@”)从双选择工具(“上海自来水来自海上','自来,1,1)POS双选择工具(“上海自来水来自海上','自来,1,2)POS双选择工具(“上海自来水来自海上','自,1,1)POS双选择工具(“上海自来水来自海上','自,1,2)POS双选择工具(“上海自来水来自海上','自,4,2)POS双选择concat('http:/ /邮件”,substr('**************”,仪器('zwhcom @ 163 .com”、“@”)+ 1))”邮箱地址”双8。
oracle语法大全
![oracle语法大全](https://img.taocdn.com/s3/m/1551e68e3c1ec5da51e27031.png)
oracle语法大全SQL>desc s_emp脚本sql.txt sql.sql1.上传脚本2.运行脚本@绝对路径/文件名@文件名(存眷说话情形)select userenv('lang') from dual;USERENV('LANG')----------------USUSERENV('LANG')----------------ZHSdesc 一张表Name Null? Type----------------------------------------- -------- -----------------ID 职员id NOT NULL NUMBER(7)LAST_NAME 姓NOT NULL VARCHAR2(25) FIRST_NAME 名V ARCHAR2(25) USERID 职员描述V ARCHAR2(8) START_DATE 入职日期DA TECOM MENTS 备注V ARCHAR2(255) MANAGER_ID 引导的职员id NUMBER(7) TITLE 职位V ARCHAR2(25)DEPT_ID 部分id NUMBER(7) SALARY 月薪NUMBER(11,2) COMMISSION_PCT 提成NUMBER(4,2)sql语句的分类:数据检索select数据操作insert delete update数据定义create drop alter事务操纵commit rollback savepoint数据操纵grant revoke选择投影连接查询语句:A from 子句1.查询出随便率性一个字段select 字段名from 表名;select salary from s_emp;2.查询多个字段(用逗号瓜分)select first_name,salary from s_emp;3.* 号能够替代所有的字段select * from s_emp;4.表头的原样显示----应用双引号select first_name,salary sal from s_emp;select first_name,salary "sal" from s_emp;能够让别号中包含空格select first_name,salary "emP sal" from s_emp;5.字段的数学运算求每小我的年薪select salary*12 yearsal from s_emp;换一种年薪运算方法推敲提成select salary*12*(1+commission_pct/100) yearsal from s_emp;select salary*12*(1+commission_pct/100) yearsal from s_emp;nvl 空值处理函数nvl(值/字段,假如是空要获得的值)第一个参数是NULL 就返回第二个参数假如第一个参数不是NULL 返回第一个参数select nvl(salary*12*(1+commission_pct/100),0)yearsal from s_emp;//logic error空值要尽早处理空值和任何值做运算差不多上NULLselect salary*12*(1+nvl(commission_pct,0)/100)yearsal from s_emp;6.想把姓名显示出来select first_name,last_name from s_emp;字符串连接||select first_name||last_name from s_emp;字符串的表达'hello' '_' ' ' ''select first_name||'_'||last_name from s_emp;this'sselect first_name||''''||last_name from s_emp;7.排重显示---distinctselect salary from s_emp;select distinct salary from s_emp;补偿:结合排重select distinct salary,id from s_emp;clear screen!clearB 前提子句wherewhere 字段表达式表达式找出工资大年夜于1400的first_name,salaryselect first_name,salary from s_emp where 1=1;//全部显示select first_name,salary from s_emp where 1=2;//无显示select first_name,salary from s_emp where salary>1400;where 前提限制行的返回相符前提返回不相符过滤掉落字段表达式中能够应用的比较运算符= 一个等号确信相等找出first_name ,manager_id 是Carmen 的工资select first_name,salary,manager_id from s_emp wherefirst_name='Carmen';数字类型能够直截了当用等号确信相等字符串不要不记得单引号oracle sql 大年夜小写不敏锐单字符串的值大年夜小写敏锐><<=>=!= <> ^=between and not between andin not inlike not likeis null is not nulloracle(sql) 也供给了一些运算符字段between a and b 表达一个闭区间[a,b]工资salary 在[800,1400]select first_name,salary from s_emp where salarybetween 800 and 1400;字段in (list) list用逗号隔开的一组值查询一下部分号在41 42 50 人first_name,salary select first_name,salary,dept_id from s_emp where dept_id in (41,42,50);次序对最终成果没有阻碍但对效力可能产生阻碍字段is null 确信一个字段是不是NULLid 是1的人manager_id 是不是NULLselect id,first_name from s_emp wheremanager_id is null;like -----模糊查询成龙配套成龙李小龙龙飞凤舞first_name 中带a字符的统配符:% 代表n个随便率性字符_ 一个随便率性字符'%a%''%a''a%''_a%''%a_'select first_name from s_emp wherefirst_name like '%a%';找出第二个字符是aselect first_name from s_emp wherefirst_name like '_a%';user_tables----数据字典表,储备了数据库中所有表的信息desc user_tablesTABLE_NAME 表名select table_name from user_tables;s_emp s_dept s找出所有s_开首的表名select table_name from user_tables where table_namelike 's_%';user_tables 数据字典表----默认处理成大年夜写select table_name from user_tables where table_namelike 'S_%';select table_name from user_tables where table_namelike 'S__%';//logic error转义select table_name from user_tables where table_namelike 'S\_%' escape '\';select table_name from user_tables where table_namelike 'S'||'_'||'%';//logic逻辑连接符号andor!工资salary 在[800,1400]select first_name,salary from s_emp where salarybetween 800 and 1400 ;select first_name,salary from s_emp where salary>=800and salary<=1400;工资salary 在(800,1400)select first_name,salary from s_emp where salary>800and salary<1400;字段in (list) list用逗号隔开的一组值查询一下部分号在41 42 50 人first_name,salary select first_name,salary,dept_id from s_emp where dept_id in (41,42,50);select first_name,salary,dept_id from s_empwhere dept_id=41 or dept_id=42 or dept_id=50;非关系> <=< >== != <> ^=between and not between andin not inlike not likeis null is not nullmanager_id 不是NULL的first_name ,salary,manager_id select first_name ,salary,manager_id from s_empwhere manager_id is not null;xml ----dom sax ui前提能够用小括号改变优先级别select first_name from s_emp where dept_id=41 or dept_id=42 and salary>1000;select first_name from s_emp where (dept_id=41 ordept_id=42) and salary>1000;假如不确信你的逻辑能够经由过程小括号改变逻辑优先select salary*12+100 from s_emp;select (salary+100)*12 from s_emp;C 排序排序的种类:升序字典次序天然次序asc 默认次序降序desc按照工资排序显示first_name,salaryorder by 排序字段必定涌现在sql语句最后select first_name,salary from s_emp order by salary;select first_name,salary from s_emporder by salary asc;降序select first_name,salary from s_emporder by salary desc;补偿:第一排序字段第二排序排序按照工资排序显示first_name,salary 工资雷同按first_name 降序select first_name,salary from s_emp where 1=1order by salary desc,first_name desc;D 单行函数单行函数:对一行操作之后获得一个成果组函数:对一组数据数据处理之后获得一个成果upperselect first_name,upper(first_name) from s_emp;countselect count(id) from s_emp;s_emp 表中数据专门多对单行函数的测试不是专门便利测试表dual 单行单列desc dualselect * from dual;测试字符串的函数upperlower select lower('ONE DREAM ONE WORLD') from dual;initcap select initcap('ONE DREAM ONE WORLD') from dual;length select length('ONE') from dual;edit -----进入vi 编辑界面x 删除字符dd 删除一行a i o敕令下ZZ 储存退出nvl()select nvl(NULL,'is null') from dual;select nvl('','is null') from dual;select nvl(' ','is null') from dual;nvl 要求能够处理任何类型但两个参数的类型必须一致substr(字段/值,开端的地位,截取多长)留意开端的地位是从1开端也能够负数负数从后往前编号从-1开端编号select substr('hello',1,3) from dual;select substr('hello',0,3) from dual;select substr('hello',2,4) from dual;从后编号select substr('hello',-2,2) from dual;把s_emp中first_name 的后三个字符截取下来select first_name,substr(first_name,-3,3) from s_emp;要求早年往后编号hello12345select first_name,substr(first_name,length(first_name)-2,3)from s_emp;数字select first_name from s_emp where id=1;select first_name from s_emp where id='1';//隐式类型转换select first_name from s_emp where id=to_number('1');to_number('abc') //logic errorselect initcap('one world one world') from s_emp;round(字段/值) 四舍五入取整select round(99.99) from dual;//100select round(99.94,1) from dual;//99.9select round(99.96,1) from dual;//100select round(94.96,-1) from dual;//90trunc(字段/值) 截取取整select trunc(99.99) from dual;//99select trunc(99.94,1) from dual;//99.9select trunc(99.96,1) from dual;//99.9select trunc(94.96,-1) from dual;//90select round(99.96,-2) from dual;//100to_char() 字符转换函数to_char(字段) 把那个字段变成字符串按照格局显示数字to_char(字段/值,'格局')fm 格局说明$ 美元符号L 本地泉币符号¥RMB9 随便率性数字0 强迫显示0 100 000,100.00, 国际泉币瓜分符. 小数点select salary ,to_char(salary,'fmL099,999.00')from s_emp;select salary ,to_char(salary,'fmL099,999.99')from s_emp;select userenv('lang') from dual;select to_char(9999.97,'fmL099,999.00') from dual;select to_char(9999.97,'fmL099,999.99') from dual;切换说话情形对显示的本地泉币符号的阻碍对日期格局产生了阻碍select sysdate from dual;SYSDA TE-----------26-APR-12现在切换成中文NLS_LANGbash修改.bash_profileexport NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'source .bash_profile从新进入sqlplusselect userenv('lang') from dual;ZHSselect sysdate from dual;select salary ,to_char(salary,'fmL099,999.00')from s_emp;演习:select first_name, salary,nvl(to_char(manager_id),'''boss''')from s_emp where salary>1000 order by salary desc;把first_name,salary,manager_id 显示出来要求工资大年夜于1000 同时按照工资降序manager_id 假如是NULL则显示manager_id 为'boss'select first_name,salary,nvl(manager_id,'boss')from s_emp where salary>1000order by salary desc;select first_name,salary,nvl(to_char(manager_id),'boss')from s_emp where salary>1000order by salary desc;select first_name,salary,nvl(to_char(manager_id),'''boss''')from s_emp where salary>1000order by salary desc;E 多表查询我们须要的数据不储备在一张表中把每个职员的first_name,dept_id 查询出来select first_name,dept_id from s_emp;部分表s_dept名称是否为空? 类型----------------------------------------- -------- -------------ID 部分id NOT NULL NUMBER(7) NAME 部分名称NOT NULL VARCHAR2(25) REGION_ID 地区id NUMBER(7)地区表s_region名称是否为空? 类型----------------------------------------- -------- --------------ID 地区id NOT NULL NUMBER(7) NAME 地区名称NOT NULL VARCHAR2(50)select * from s_region;select first_name,dept_id,name from s_emp,s_dept;笛卡尔集select first_name,dept_id,name from s_emp,s_deptwhere dept_id=s_dept.id;解决两个表直截了当的关系表的连接:内连接:相符连接前提就放入成果集不相符就过滤掉落等值连接:用等号做两个表的连接select first_name,dept_id,name from s_emp,s_deptwhere dept_id=s_dept.id;把每个部分的名字和地点的地区名称列出来select s_ ,s_from s_dept,s_regionwhere region_id=s_region.id;表的别号select ,from s_dept d,s_region rwhere d.region_id=r.id;非等值连接:不消等号做表的连接desc salgrade 工资级别表名称-------------------GRADE 工资级别LOSAL 低工资HISAL 高工资把s_emp 表中first_name,salary,grade 列一个清单select first_name,salary,gradefrom s_emp e,salgrade gwhere salary between losal and hisal;自连接:须要把一张表算作两张表谁是引导?把s_emp 逻辑上算作两张表然后找出这两张表的关系select distinct m.first_name,m.idfrom s_emp e,s_emp mwhere e.manager_id=m.id;select first_name,idfrom s_emp where manager_id=id;select id,manager_id from s_emp;谁不是引导?select distinct m.first_name,m.id,from s_emp e,s_emp mwhere e.manager_id!=m.id;外连接:外连接的成果集等于内连接的成果集+匹配不上的记录(和直截了当选择出是不合的)<<<----m中没匹配上的对应于e中的Manager_id=NULL>>>>>>>>.一个也不克不及少自连接select distinct m.first_name,m.idfrom s_emp e,s_emp mwhere e.manager_id(+)=m.idand e.manager_id is null;//哪些不是引导select distinct m.first_name,m.idfrom s_emp e,s_emp mwhere e.manager_id(+)=m.idand e.manager_id is not null;scotttigerselect * from s_dept;insert into s_dept values(100,'mytest1',1);commit;s_emp2 中没人在我新增长的部分中把每个职员地点部分名列出来(内连接)select first_name,namefrom s_emp,s_deptwhere dept_id(+)=s_dept.id;依照上面的提示找出没有职员的部分(外连接)select first_name,namefrom s_emp,s_deptwhere dept_id(+)=s_dept.id and dept_id is null;(+) 对面的表的数据全部匹配出来等值连接非等值连接找出每个职员的工资级别first_name,salary,gradeselect first_name,salary,gradefrom s_emp,salgradewhere salary between losal and hisal;update s_emp set salary=12500 where id=1;commit;更新之后老总不相符内连接的连接前提把老总的工资级别显示成10select first_name,salary,nvl(grade,10)from s_emp,salgradewhere salary between losal(+) and hisal(+);外连接的标准实现:sql99left outer join onright outer join onfull outer join on找出那些部分中还没有职员select first_name,namefrom s_emp,s_deptwhere dept_id(+)=s_dept.idand dept_id is null; 《《《精确显示mytest1行》》》》》》那张表提议连接那张表中的数据就被全部匹配出来select first_name,namefrom s_dept left outer join s_emp 《《表示s_dept提议连接,其数据全部显示出来》》》》》on s_dept.id=s_emp.dept_idwhere dept_id is null;《《《精确显示mytest1行》》》》》》select first_name,namefrom s_emp left outer join s_depton s_dept.id=s_emp.dept_idwhere dept_id is null;<<<<<无显示》》》*******************把上面的查询改成右外连接select first_name,namefrom s_emp right outer join s_depton s_dept.id=s_emp.dept_idwhere dept_id is null;《《《精确显示mytest1行》》》》》》full outer join on:全外连接的成果集等于右外连接的成果集+ 左外连接的成果集然后清除反复的记录oracle 不支撑两边都加括号加union 归并两个成果集然后清除反复union all 归并两个成果集select id from s_emp union select id from s_emp;select id from s_emp union all select id from s_emp;sql99 的内连接select first_name,dept_id,name from s_emp,s_deptwhere dept_id=s_dept.id;select first_name,dept_id,name from s_emp inner joins_dept on dept_id=s_dept.id;select first_name,dept_id,name from s_emp joins_dept on dept_id=s_dept.id;内连接把每个职员的first_name,salary,部分名,地区名列出来select first_name,salary,,from s_emp e,s_dept d,s_region rwhere e.dept_id=d.id and d.region_id=r.id;col name for a20select first_name,salary,,from s_emp e join s_dept d on e.dept_id=d.idjoin s_region r on d.region_id=r.id;select first_name,salary,,from s_emp e inner join s_dept d on e.dept_id=d.idinner join s_region r on d.region_id=r.id;update s_emp set dept_id=NULL where id=1;commit;那个老总就不在所有的部分信息中要把所有的职员信息列出来包含老总的话就须要外连接F 组函数和分组组函数能把一组数据处理之后获得一个成果count() 统计个数sum() 乞降avg() 求平均值max() 求最大年夜值min 求最小值group by 分组标准select dept_id,count(id)from s_emp group by dept_id;select count(id) from s_emp where dept_id=44;组函数用在select 后是分组后处理的组函数还能够涌现在having 后边where 对行数据的过滤having 是对组数据的过滤那个部分的人数大年夜于1select dept_id,count(id)from s_emp group by dept_idhaving count(id)>1;按照部分号分组统计每个部分的平均工资select dept_id,avg(salary)from s_emp group by dept_id;按照部分号分组统计每个部分的平均工资找出平均工资大年夜于1200的组select dept_id,avg(salary)from s_emp group by dept_idhaving avg(salary)>1200;select dept_id,avg(salary) asalfrom s_emp group by dept_idhaving avg(salary)>1200order by asal;按照部分号分组统计每个部分的平均工资找出平均工资大年夜于1200的组显示部分名称select dept_id,name,avg(salary) asalfrom s_emp,s_deptwhere dept_id=s_dept.idgroup by dept_idhaving avg(salary)>1200order by asal;因为部分号可不能反复所有在那个分组的标准再追加额外的标准没有阻碍select dept_id,name,avg(salary) asalfrom s_emp,s_deptwhere dept_id=s_dept.idgroup by dept_id,name --》》第一行有name,分组标准里必须有namehaving avg(salary)>1200order by asal;select dept_id,max(name),avg(salary) asalfrom s_emp,s_deptwhere dept_id=s_dept.idgroup by dept_idhaving avg(salary)>1200order by asal;-->> 第一行不max(name) 换成name 会掉足max()感化有时和distinct(去重)类似。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• • • •
求出本月的最后一天的日期 求出下一个周一 求出你们的毕业时间 求出每个雇员到今天为止的雇佣月份
转换函数
• • • • 主要完成数字、字符串、日期间的转换 to_char to_date to_number
to_char
• 默认显示是日月年,可以使用to_char转换成正常 方式
• 如果想把0去掉,'fmYYYY-MM-DD' • 'YYYY-MM-DD hh:mi:ss' • 'YYYY-MM-DD hh24:mi:ss'
• 格式化数字
• (9358943579243,'999,999,999,999,999') • (9358943579243,'L999,999,9ห้องสมุดไป่ตู้9,999,999') • L表示当前语言环境下的货币符号
to_date
• 一般用于更新数据 • to_date('1989-09-12','YYYY-MM-DD')
to_number
• 一般没用 • select to_number('1')+to_number('2')
通用函数
• nvl:处理空值 • decode:多数值判断 • decode(列,原值1,替换值1,……,原值n, 替换值n) • 显示全部职位,但是显示为中文 • Select ename,decode(job,’CLERK’,’办事员 ’,’SALESMAN’,’销售员’,’ MANAGER’,’经理’,’ ANALYST’,’分析师’,’ PRESIDENT’,’总裁’) from emp;
• 范例:查询出姓名长度正好是5的雇员信息 • 范例:使用‘_’替换掉姓名中的所有字母 ‘A’ • 范例:字符串截取
数字函数
• round • trunc • mod
日期函数
• • • • • • • • • sysdate 对日期进行若干计算 日期+数字=日期,表示若干天之后的日期 日期-数字=日期,表示若干天之前的日期 日期-日期=数字,表示两个日期间的天数 last_day next_day add_months months_between
单行函数
字符函数 数字函数 日期函数 转换函数 通用函数
字符函数
• • • • • • upper lower initcap length replace substr
• 范例:观察转大写 • select * from emp where ename='&str' • 范例:将所有的雇员的名字按照小写字母返回 • 范例:将每一个雇员姓名的开头首字母大写 • 范例:查询每个雇员名字的长度