OracleSQL语法简记.docx
- 文档编号:5995369
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:15
- 大小:21.49KB
OracleSQL语法简记.docx
《OracleSQL语法简记.docx》由会员分享,可在线阅读,更多相关《OracleSQL语法简记.docx(15页珍藏版)》请在冰豆网上搜索。
OracleSQL语法简记
SQL语法简记
一.简单查询语句
1.select*|具体的列别名from表名称;
2.select{distinct}*|具体的列别名from表名称;
3.关于使用Oracle中提供的字符串连接操作的问题,可以使用”||”来表示。
如果要加入一些显示信息的话,所有的其他的固定信息需要使用”‘”但撇号来括起来.例如,我们要显示的雇员的编号,姓名,工作,但是显示的格式是这样的
·编号是:
7369的雇员,姓名是:
SMITH,工作是:
CLERK
则可以使用下面的语句来实现:
Select‘编号是:
’||empno||‘的雇员,姓名是:
’||ename||‘,工作是:
’||jobfromemp;
4.查询中可以使用四则运算,例如:
要求,求出每个雇员的姓名和年薪。
Selectename,sal*12fromemp;
二.限定查询(where子句)(重点)
select{distinct}*|具体的列别名from表名称{where条件(s)};
例子:
select*fromempwheresal>1500;
select*fromempwherecommisnotnull;
select*fromempwherecommisnull;
select*fromempwheresal>1500andcommisnotnull;
select*fromempwheresal>1500orcommisnotnull;
select*fromempwherenot(sal>1500andcommisnotnull);
select*fromempwheresal>1500andsal<3000;
select*fromempwheresalbetween1500and3000;
select*fromempwherehiredatebetween‘1-1月-81’and’31-12月-81’
select*fromempwhereename=‘SMITH’;
select*fromempwhereempnoin(7369,7499,7521);
select*fromempwhereempnonotin(7369,7499,7521);
select*fromempwhereenamein(‘SMITH’,’ALLEN’,’KING’);
select*fromempwhereenamelike‘_M%’;
select*fromempwhereenamelike‘%M%’;
select*fromempwhereempno<>7369;!
=
三,对结果进行排序(orderby子句)(重点);
select{distinct}*|具体的列别名
from表名称
{where条件(s)}
{orderby排序的字段1,排序的字段2asc|desc}
例子如下:
select*fromemporderbysal;
select*fromemporderbysalasc;
select*fromemporderbysaldesc;
select*fromempwheredeptno=10orderbysaldesc,hiredateasc;
四.单行函数。
直接上例子:
selectupper(‘smith’)fromdual;
select*fromempwhereename=upper(‘smith’);
selectupper(‘HELLOWORLD’)fromdual;
SELECTINITCAP('HELLOWORLD')FROMdual;将单词的第一个字母大写
SELECTCONCAT('hello','world')FROMDUAL;字符串可以用concat连接
SELECTename,SUBSTR(ename,LENGTH(ename)-2)FROMemp;截取enamel的后三个字符
SELECTename,SUBSTR(ename,-3,3)FROMemp;同上,只是采用的是倒序来数字符
五.数值函数
例子:
SELECTROUND(789.536)FROMdual;四舍五入取整数
SELECTROUND(789.536,2)FROMdual;四舍五入保留两位小数
SELECTROUND(789.536,-2)FROMdual;四舍五入保留百位
SELECTTRUNC(789.536)FROMDUAL;直接将小数截去,保留整数.
SELECTTRUNC(789.536,2)FROMDUAL;保留两位小数的基础上,截去其他的小数位.
SELECTTRUNC(789.536,-2)FROMDUAL;保留百位数的基础上,其他的直接截去.
SELECTMOD(10,3)FROMDUAL;取余操作,结果为1.
六,日期函数.
例子:
SELECTSYSDATEFROMDUAL;
SELECTempno,ename,ROUND((SYSDATE-hiredate)/7)FROMemp;求出星期数
SELECTempno,ename,MONTHS_BETWEEN(sysdate,hiredate)FROMemp;求出给定日期范围的月数
SELECTADD_MONTHS(SYSDATE,4)FROMDUAL;在指定日期上加上指定的月数,求出之后的日期
SELECTNEXT_DAY(SYSDATE,'')FROMDUAL;下个星期的指定日期数
SELECTLAST_DAY(SYSDATE)FROMDUAL;求出日期的最后一天
七,转换函数.
to_char():
转换成字符串
to_number():
转换成数字
to_date():
转换成日期:
例子如下
SELECTempno,ename,TO_CHAR(hiredate,'yyyy-mm-dd')FROMemp;日期格式化
SELECTempno,ename,TO_CHAR(sal,'99,999')FROMemp;数字显示格式化
SELECTempno,ename,TO_CHAR(sal,'$99,999')FROMemp;货币显示
SELECTTO_NUMBER('123')+TO_NUMBER('123')FROMDUAL;将字符串转换成数字,然后执行加法操作
SELECTTO_DATE('2009-02-16','yyyy-mm-dd')FROMDUAL;将字符串转换成date类型
八.通用函数.
例子:
SELECTempno,ename,NVL(comm,0),(sal+NVL(comm,0))*12incomeFROMemp;
这里注意NVL函数就好,为null就返回另一个指定的值
SELECTempno雇员编号,ename雇员姓名,hiredate雇佣日期,
DECODE(job,’CLERK’,’业务员’,’SALESMAN’,’销售人员’,’MANAGER’,’经理’,
‘ANALYST’,’分析员’,’PRESIDENT’,’总裁’)置位fromemp;
九.多表查询
大体的思路就是构造笛卡尔积,然后根据适当的判断条件对笛卡尔积进行消除操作。
十.左右连接。
SELECTe.empno,e.ename,d.deptno,d.dname,d.loc
FROMempe,deptd
WHEREe.deptno(+)=d.deptno;
十一.组函数以及分组统计
SELECTCOUNT(empno)FROMemp;
SELECTMIN(sal)FROMemp;
SELECTMAX(sal)FROMemp;
SELECTSUM(sal)FROMempWHEREdeptno=20;
SELECTAVG(sal)FROMemp;
十二.分组统计
语法如下:
SELECT{DISTINCT}*|查询列1别名1,查询列2别名2,…..
FROM表名称1别名1,表名称2别名2,……
{WHERE条件(s)}
{GROUPBY分组条件}
{ORDERBY排序字段ASC|DESC,排序字段ASC|DESC,….}
例子如下:
SELECTdeptno,COUNT(empno)
FROMemp
GROUPBYdeptno;
SELECTdeptno,AVG(sal)
FROMemp
GROUPBYdeptno;
SELECTd.dname,COUNT(e.empno)
FROMdeptd,empe
WHEREd.deptno=e.deptno
GROUPBYd.dname;
注意:
分组函数不能在WHERE子句中使用,在分组过程中,假如出现了,需要进行分析的分组函数,那么,我们需要HAVING,来指定分组条件。
在分组过程中存在HAVING子句的时候,语法如下所示
SELECT{DISTINCT}*|查询列1别名1,查询列2别名2,…..
FROM表名称1别名1,表名称2别名2,……
{WHERE条件(s)}
{GROUPBY分组条件{HAVING分组调剂那}}
{ORDERBY排序字段ASC|DESC,排序字段ASC|DESC,…..}
一些例子如下:
SELECTdeptno,AVG(sal)
FROMemp
GROUPBYdeptnoHAVINGAVG(sal)>2000;
SELECTjob,SUM(sal)
FROMemp
WHEREjob<>'SALESMAN'
GROUPBYjob;
SELECTjob,SUM(sal)
FROMemp
WHEREjob<>'SALESMAN'
GROUPBYjobHAVINGSUM(sal)>5000;
SELECTjob,SUM(sal)su
FROMemp
WHEREjob<>'SALESMAN'
GROUPBYjobHAVINGSUM(sal)>5000
ORDERBYsu;
十三.子查询
语法表示如下:
SELECT{DISTINCT}*|查询列1别名1,查询列2别名2,…..
FROM表名称1别名1,表名称2别名2
(
SELECT{DISTINCT}*|查询列1别名1,查询列2别名2,…..
FROM表名称1别名1,表名称2别名2,……
{WHERE条件(s)}
{GROUPBY分组条件{HAVING分组条件}}
{ORDERBY排序字段ASC|DESC,排序字段ASC|DESC,…..}
)
{WHERE条件(s)
(
SELECT{DISTINCT}*|查询列1别名1,查询列2别名2,…..
FROM表名称1别名1,表名称2别名2,……
{WHERE条件(s)}
{GROUPBY分组条件{HAVING分组调剂那}}
{ORDERBY排序字段ASC|DESC,排序字段ASC|DESC,…..}
)
}
{GROUPBY分组条件{HAVING分组调剂那}}
{ORDERBY排序字段ASC|DESC,排序字段ASC|DESC,…..}
注意:
看到这里我突然有一个想法就是,子表应该是可以无限嵌套下去,这个想法是不是正确的呢?
下面是几个例子:
SELECT*FROMemp
WHEREsal>(SELECTsalFROMempWHEREempno=7654);
SELECT*FROMemp
WHEREsal>(SELECTsalFROMempWHEREempno=7654)
ANDjob=(SELECTjobFROMempWHEREempno=7788);
SELECT*FROMempWHEREsal=(SELECTMIN(sal)FROMemp);
SELECTd.dname,ed.c,ed.a
FROMdeptd,(
SELECTdeptno,COUNT(empno)c,AVG(sal)a
FROMemp
GROUPBYdeptno)ed
WHEREd.deptno=ed.deptno;
SELECTd.dname,ed.c,ed.a,e.ename
FROMdeptd,(
SELECTdeptno,COUNT(empno)c,AVG(sal)a,MIN(sal)min
FROMemp
GROUPBYdeptno)ed,empe
WHEREd.deptno=ed.deptnoANDe.sal=ed.min;
SELECT*FROMemp
WHEREsalIN(SELECTMIN(sal)FROMempGROUPBYdeptno);
SELECT*FROMemp
WHEREsal=ANY(SELECTMIN(sal)FROMempGROUPBYdeptno);
SELECT*FROMemp
WHEREsal>ANY(SELECTMIN(sal)FROMempGROUPBYdeptno);
大于里面最小的
SELECT*FROMemp
WHEREsal 分析同上 SELECT*FROMemp WHEREsal>ALL(SELECTMIN(sal)FROMempGROUPBYdeptno); 大于所有的东西 SELECT*FROMemp WHEREsal SELECT*FROMemp WHERE(sal,NVL(comm,-1))IN( SELECTsal,NVL(comm,-1)FROMempWHEREdeptno=20); 十四.数据库更新操作 从示例中分析 CREATETABLEmyempASSELECT*FROMemp;原样复制一个表出来 INSERTINTOmyemp(empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES(7899,’张三’,’清洁工’,7369,’14-2月-1995’,9000,300,40); UPDATEmyempSETcomm=1000;修改所有雇员的佣金为1000 UPDATEmyempSETsal=5000WHEREempno=7899;修改特定雇员 UPDATEmyempSETmgr=nullWHEREempno=7899; UPDATEmyempSETmgr=null,comm=nullWHEREempnoIN(7369,8899,7788); DELETEFROMmyempWHEREempno=7899; DELETEFROMmyempWHEREempnoIN(8899,7889,8889,8888); DELETEFROMmyempWHEREcommISNOTNULL; 十五.事物处理 示例: CREATETABLEemp10ASSELECT*FROMempWHEREdeptno=10; 提交事务commit 回滚事务rollback 十六,创建和管理表 1.创建表的语法如下表示 CREATETABLE表名称( 字段名称1字段类型[DEFAULT默认值], 字段名称2字段类型[DEFAULT默认值], 字段名称3字段类型[DEFAULT默认值], ……. 字段名称n字段类型[DEFAULT默认值], ); 2.表复制的语法可以如下 CREATETABLE表名称AS(子查询); 下面可以看几个范例 CREATETABLEperson( pidVARCHAR2(18), nameVARCHAR2(200), ageNUMBER(3), birthdayDATE, sexVARCHAR2 (2)DEFAULT'男’ ); 下面是一个插入数据的范例 INSERTINTOperson(pid,name,age,birthday,sex)VALUES (‘11111111111111’,’张三’,30,TO_DATE(‘1972-02-13’,’yyyy-mm-dd’),’女’); 如果希望在上面的创建的表中增加一个address字段,那么我们选择的首要的 手段是将表删除,然后重新建立,这样是为了维护数据操作的高效性。 表的删除的语法如下 DROPTABLE表名称; 范例: DROPTABLEperson; 表的修改 具体的修改过程是通过ALTER指令完成的 基本语法如下. 添加字段语法如下 ALTERTABLE表名称ADD(列的名称列的类型DEFAULT默认值,列的名称列的类型DEFAULT默认值,…….) 具体的范例如下: ALTERTABLEpersonADD(addressVARCHAR(200)DEFAULT'暂无地址'); 修改字段的语法如下 ALTERTABLE表名称MODIFY(列的名称列的类型DEFAULT默认值); 具体的范例如下 ALTERTABLEpersonMODIFY(nameVARCHAR2(20)DEFAULT'无名氏'); 表的重命名 RENAME旧的的表名称TO新的表名称 表的截断 十七.表中的约束 主键约束 范例如下: DROPTABLEperson; CREATETABLEperson ( pidVARCHAR2(18)PRIMARYKEY, nameVARCHAR2(200), ageNUMBER(3), birthdayDATE, sexVARCHAR2 (2)DEFAULT'男' ); 为主键约束起名字 DROPTABLEperson; CREATETABLEperson ( PidVARCHAR2(18), nameVARCHAR2(200), ageNUMBER(3), birthdayDATE, sexVARCHAR2 (2)DEFAULT'男', CONSTRAINTperson_pid_pkPRIMARYKEY(pid) ); 非空约束(NOTNULL) DROPTABLEperson; CREATETABLEperson ( pidVARCHAR2(18), nameVARCHAR2(200)NOTNULL, ageNUMBER(3)NOTNULL, birthdayDATE, sexVARCHAR2 (2)DEFAULT'男', CONSTRAINTperson_pid_pkPRIMARYKEY(pid) ); 唯一约束(UNIQUE) DROPTABLEperson; CREATETABLEperson ( pidVARCHAR2(18), nameVARCHAR2(200)UNIQUENOTNULL, ageNUMBER(3)NOTNULL, birthdayDATE, sexVARCHAR2 (2)DEFAULT'男', CONSTRAINTperson_pid_pkPRIMARYKEY(pid) ); 其命名的规则是同主键约束的起名规则的 唯一约束(UNIQUE) DROPTABLEperson; CREATETABLEperson ( pidVARCHAR2(18), nameVARCHAR2(200)NOTNULL, ageNUMBER(3)NOTNULL, birthdayDATE, sexVARCHAR2 (2)DEFAULT'男', CONSTRAINTperson_pid_pkPRIMARYKEY(pid), CONSTRAINTperson_name_ukUNIQUE(name) ); 检查约束(CHECK) DROPTABLEperson; CREATETABLEperson ( pidVARCHAR2(18), nameVARCHAR2(20
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OracleSQL 语法 简记