【IT专家】数据库基础sql语句总结(以Oracle为主介绍,并与mysql,sql server做对比)一 下载本文

本文由我司收集整编,推荐下载,如有疑问,请与我司联系

SELECT

LAST_NAME,HIRE_DATE,MONTHS_BETWEEN(SYSDATE,HIRE_DATE) AS 月数 FROM EMPLOYEES;—-ADD_MONTHS():在日期上加上指定的月数

SELECT ADD_MONTHS(SYSDATE,24)FROM EMPLOYEES;—-NEXT_DAY():获 得指定日期下一个星期 X 的日期 SELECT

NEXT_DAY(SYSDATE,3)------这个 3 表示下一个星期二,从周天记为

1.FROM DUAL;SELECT NEXT_DAY(SYSDATE,’星期二’)FROM DUAL;—–类型转 换单行函数 —-自动转换:效率低

SELECT LAST_NAME,SALARYFROM EMPLOYEESWHERE SALARY 10000;—– 手动转换 1.字符串与日期可以相互转换 2.字符串与数字可以相互转换 3.日期与数 字不能相互转换

ORCLE 中日期的格式化(TO_DATE)可参考: cnblogs/ajian/archive/2009/03/25/1421063.html

—-TO_CHAR(D,F):将日期类型 D 根据模板 F 转换为字符类型的值 SELECT

LAST_NAME,TO_CHAR(HIRE_DATE,’YYYY-MM-DD’)FROM

EMPLOYEES;SELECT TO_CHAR(SYSTEM,’YYYY-MM-DD HH24:MI:SS DAY DY’) //24 表示 24 小时制,DAY 表示这个星期的第几天全写, //DY 是这周第几天 简写 FROM DUAL;SELECT TO_CHAR(SYSDATE,’D DD DDD’) // D 表示当周第几 天(周日为 1),DD 表示当月第几天,DDD 表示当年第几天。FROM DUAL;SELECT LAST_NAME,TO_CHAR(HIRE_DATE,’FMYYYY”年”MM”月”DD”日”‘)

//表示

以”XX 年 XX 月 XX 日”形式输出格式,FM 起到点去掉月份前面 0 的作用,如不加 FM,为 08 月,加 FM,为 8 月 FROM EMPLOYEES;—-查询所有星期二入职的员工 的 last_name,hire_date(格式如:1999-1-1 星期二)

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,’FMYYYY-MM-DD DAY’)FROM EMPLOYEESWHERE

TO_CHAR(HIRE_DATE,’DAY’)=‘星期二’;SELECT

DAY’)FROM

LAST_NAME,TO_CHAR(HIRE_DATE,’FMYYYY-MM-DD

本文由我司收集整编,推荐下载,如有疑问,请与我司联系

EMPLOYEESWHERE TO_CHAR(HIRE_DATE,’D’)=‘3’;—–TO_CHAR(N,F):将数据 类型 N 根据模板 F 转换为字符类型的值 SELECT

TO_CHAR(25653.9874,’FM$999,999.00’),

TO_CHAR(25653.9874,’FML999,999.00’) //L 表示显示当地的货币符号,即为 oracle 产地的地方货币符号 FROM DUAL;—–TO_DATE(C,F):根据模板 F 将字符类型 C 转 换为日期类型的值。 SELECT DUAL;SELECT

TO_DATE(‘2017-1-27’,’YYYY-MM-DD’)-SYSDATEFROM TO_DATE(‘2017-1-27’,’YYYY-MM-DD’)FROM

DUAL;—–

TO_NUMBER(C,F):根据模板 F 将字符类型 C 转换为数字类型的值。

SELECT TO_NUMBER(‘$50,000.00’,’$99,999.00’)FROM DUAL;—–通用单行函数 —-NVL():当第一个参数不为 NULL,返回第一个参数。当第一个参数为 NULL,返 回第二个参数。两个参数的类型必须一致。—–SQL SERVER 中用 IFNULL()函数表 示

SELECT LAST_NAME,NVL(TO_CHAR(COMMISSION_PCT,’FM$0.00’),’没有佣 金’)FROM EMPLOYEES;—–关系数据库中,当算术运算中出现 NULL,结果一定为 NULL。 —-查询 employees 表中所有员工的 last_name,salary,commission_pct,年薪,年 收入(年薪+年薪*佣金) SELECT

LAST_NAME,SALARY,COMMISSION_PCT,SALARY*12

AS

薪,(SALARY*12)+(SALARY*12*NVL(COMMISSION_PCT,0)) AS 年收入 FROM

EMPLOYEES;—–分支选择:CASE 表达式,DECODE()函数 —-查询 employees 表 中所有员工的 last_name,job_id,salary,新工资。如果 job_id 是 IT_PROG 时,工资增 加 10%。如果 job_id 是 ST_CLERK 时,工资增加 15%。如果 job_id 是 SA_REP 时,工资增加 20%。其它职位工资不变。

SELECT LAST_NAME,JOB_ID,SALARY,CASEWHEN JOB_ID=‘IT_PROG’ THEN TO_CHAR(SALARY*1.1,’FM$999,999.00’)WHEN TO_CHAR(SALARY*1.15,’FM$999,999.00’)WHEN

JOB_ID=‘ST_CLERK’ JOB_ID=‘SA_REP’

THEN THEN

本文由我司收集整编,推荐下载,如有疑问,请与我司联系

TO_CHAR(SALARY*1.2,’FM$999,999.00’)ELSE ‘工资不变’END AS 新工资 FROM EMPLOYEES;—-只能判断是否相等

SELECT LAST_NAME,JOB_ID,SALARY,CASE JOB_IDWHEN ‘IT_PROG’ THEN TO_CHAR(SALARY*1.1,’FM$999,999.00’)WHEN TO_CHAR(SALARY*1.15,’FM$999,999.00’)WHEN

‘ST_CLERK’ ‘SA_REP’

THEN THEN

TO_CHAR(SALARY*1.2,’FM$999,999.00’)ELSE ‘工资不变’END AS 新工资 FROM EMPLOYEES;—-DECODE()函数:只能判断是否相等。 SELECT

LAST_NAME,JOB_ID,SALARY,DECODE(

‘ST_CLERK’,SALARY*1.15,

JOB_ID,

‘IT_PROG’,SALARY*1.1, SALARY)AS

‘SA_REP’,SALARY*1.2,

新工资 FROM EMPLOYEES;—–查询 employees 表中所有员工的

last_name,hire_date 入职那天是星期几(显示汉字),并按日期升序排序

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,’YYYY-MM-DD’) AS 入职时 间,TO_CHAR(HIRE_DATE,’DAY’) AS

星期 FROM EMPLOYEESORDER BY

TO_CHAR(HIRE_DATE-1,’D’) ASC; //因为星期日是 1,要想按星期一最小来排序, 需要-1SELECT LAST_NAME,TO_CHAR(HIRE_DATE,’YYYY-MM-DD’) AS 入职时 间,TO_CHAR(HIRE_DATE,’DAY’)

AS

星期,TO_CHAR(HIRE_DATE,’D’)

AS

AFROM EMPLOYEESORDER BY CASEWHEN TO_CHAR(HIRE_DATE,’D’)=‘1’ THEN

7WHEN

TO_CHAR(HIRE_DATE,’D’)=‘2’

THEN

1WHEN

TO_CHAR(HIRE_DATE,’D’)=‘3’ THEN 2WHEN TO_CHAR(HIRE_DATE,’D’)=‘4’ THEN

3WHEN

TO_CHAR(HIRE_DATE,’D’)=‘5’

THEN

4WHEN

TO_CHAR(HIRE_DATE,’D’)=‘6’ THEN 5WHEN TO_CHAR(HIRE_DATE,’D’)=‘7’ THEN 6END ASC;—–视图 格式:

CREATE [OR REPLACE] VIEW 视图名 ASSELECT 语句;视图的作用 1.简化查询 2.提高数据库安全性

–视图中没有数据,视图的数据来自于表。 —–序列:产生一个数字。通常用于自动生成主键。

本文由我司收集整编,推荐下载,如有疑问,请与我司联系

CREATE SEQUENCE 序列名[INCREMENT BY integer] --序列每次增加 N/减少 N,默认为 1[START WITH integer] --超始值,默认为 0[ MAXVALUE integer| NOMAXVALUE

]

--最大值为 N/没有最大值(默认)[

MINVALUE

integer

|

NOMINVALUE ] --最小值为 N/没有最小值[ CYCLE | NOCYCLE ] --循环/不循环(默 认)[ CACHE integer | NOCACHE ] --当服务器启动时将序列的后 N 个值存入缓存中 (默认)/当服务器启动时不将序列的值存入缓存中[ ORDER | NOORDER ]注意:序 列的值不能 ROLLBACK —-序列的属性:

1.NEXTVAL:获得序列的下一个值,调用此属性时序列的值一

定发生改变。 2.CURRVAL:获得序列当前值。调用此属性时序列的值不变。 CREATE

SEQUENCE

STU_ID_SEQ;INSERT

INTO

STUDENTS(STU_ID,STU_NAME) VALUES(STU_ID_SEQ.NEXTVAL,’AA’);—–索 引:提高查询效率。降低增删改的效率。 特点: 自动创建:当表中有主键或唯一 约束时,Oracle 会为对应的列添加唯一索引。 手动创建: CREATE INDEX 索引 名 ON 表名(列名[,列名,……]);

CREATE INDEX EMP_NAME_INDEX ON EMPLOYEES(LAST_NAME); tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!