第二天20160727

--查询employees表中last_name不包含a的员工的last_name
SELECT LAST_NAME
FROM EMPLOYEES
WHERE LAST_NAME NOT LIKE '%a%';

--排序:ORDER BY子句
SELECT 3
FROM 1
[WHERE] 2
[ORDER BY 列] 4--通常ORDER BY子句会出现在SELECT语句的最后

/*
1.升序:使用ASC关键字。默认为升序排序。
2.降序:使用DESC关键字。
*/

SELECT LAST_NAME,SALARY
FROM EMPLOYEES
ORDER BY SALARY ASC;

SELECT LAST_NAME,SALARY
FROM EMPLOYEES
ORDER BY SALARY DESC;

SELECT LAST_NAME,HIRE_DATE
FROM EMPLOYEES
ORDER BY HIRE_DATE ASC;

SELECT LAST_NAME
FROM EMPLOYEES
ORDER BY LAST_NAME ASC;

/*
1.ORDER BY子句中可以出现列名。
2.ORDER BY子句中可以出现表达式与函数。
3.ORDER BY子句中可以出现列别名(注意大小写)。
4.ORDER BY子句中可以出现结果中列的序号。
*/

--查询employees表中年薪大于100000的员工的last_name,年薪,结果根据年薪降序排序
SELECT LAST_NAME,SALARY*12 AS 年薪
FROM EMPLOYEES
WHERE SALARY*12>100000
ORDER BY 2 DESC;

--WHERE子句中不能使用列的别名。

--先对第一列进行排序,当第一列中有相同数据时,对这些相同的数据进行第二列的排序。
--查询employees表中所有员工的last_name,job_id,department_id,salary,结果根据department_id升序,salary降序排序。
SELECT LAST_NAME,JOB_ID,DEPARTMENT_ID,SALARY
FROM EMPLOYEES
ORDER BY DEPARTMENT_ID ASC NULLS FIRST,SALARY DESC;

--Oracle认为NULL是最大的。
--SQL Server认为NULL是最小的。

--NULLS FIRST/NULLS LAST:在不影响排序规则的前提下,将NULL放在结果的最前/后面。

--单行函数
--字符相关的单行函数
SELECT LAST_NAME,UPPER(LAST_NAME)--大写
FROM EMPLOYEES;

SELECT LAST_NAME,LOWER(LAST_NAME)--小写
FROM EMPLOYEES;

--查询employees表中last_name包含a(不区分大小写)的员工的last_name
SELECT LAST_NAME
FROM EMPLOYEES
WHERE LAST_NAME LIKE '%A%' OR LAST_NAME LIKE '%a%';

SELECT LAST_NAME
FROM EMPLOYEES
WHERE UPPER(LAST_NAME) LIKE '%A%';

--从指定的位置开始截取字符串,直到字符串的最后
SELECT LAST_NAME,SUBSTR(LAST_NAME,3)
FROM EMPLOYEES;

--从指定的位置截取指定长度的字符串
SELECT LAST_NAME,SUBSTR(LAST_NAME,3,2)
FROM EMPLOYEES;

--从倒数第N位开始截取字符串,直到字符串的最后
SELECT LAST_NAME,SUBSTR(LAST_NAME,-3)
FROM EMPLOYEES;

--从倒数第N位截取指定长度的字符串
SELECT LAST_NAME,SUBSTR(LAST_NAME,-3,2)
FROM EMPLOYEES;

SELECT LAST_NAME,LENGTH(LAST_NAME)
FROM EMPLOYEES;

SELECT LENGTH('中国')--返回字符数
FROM DUAL;

SELECT LENGTHB('中国')--返回字节数
FROM DUAL;

LPAD()/RPAD():显示第一个参数的值,使用第二参数设置第一个参数显示的位数。如果第一个参数长度不足,使用第三个参数在第一个参数的左/右面补齐长度。
SELECT LPAD(EMPLOYEE_ID,6,0),LAST_NAME
FROM EMPLOYEES;

--INSTR():在第一个参数中查找第二个参数首次出现的位置,没找到返回0
SELECT LAST_NAME,INSTR(LAST_NAME,'a')
FROM EMPLOYEES;

--查询employees表中last_name包含a的员工的last_name(不允许使用LIKE)
SELECT LAST_NAME
FROM EMPLOYEES
WHERE INSTR(LAST_NAME,'a')!=0;

SELECT REPLACE('www.dhee.com','w','m')--将第一个参数中出现的第二个参数,使用第三个参数替换。
FROM DUAL;

--TRIM():去掉字符串两端的空格
SELECT TRIM(' ABC ABC ') AS A
FROM DUAL;

SELECT TRIM('A' FROM 'AAAABADAAAA')
FROM DUAL;

--与数字相关的单行函数
--四舍五入
SELECT ROUND(256.987),ROUND(256.987,2),ROUND(256.987,0),ROUND(256.987,-1)
FROM DUAL;

--截断数字
SELECT TRUNC(256.987),TRUNC(256.987,2),TRUNC(256.987,0),TRUNC(256.987,-1)
FROM DUAL;

--取余数
SELECT MOD(15,2)
FROM DUAL;

--与日期相关的单行函数
--SYSDATE:获得数据库服务器的当前日期+时间
SELECT SYSDATE
FROM DUAL;

SELECT SYSDATE+1000
FROM DUAL;

SELECT SYSDATE-1000
FROM DUAL;

--查询employees表中所有员工的last_name,hire_date,入职的天数
SELECT LAST_NAME,HIRE_DATE,TRUNC(SYSDATE-HIRE_DATE) AS 入职天数
FROM EMPLOYEES;

/*
1.日期+天数=日期
2.日期-天数=日期
3.日期-日期=天数
4.日期不能加日期
*/

--MONTHS_BETWEEN():返回两个日期相关的月数
SELECT LAST_NAME,HIRE_DATE,TRUNC(MONTHS_BETWEEN(SYSDATE,HIRE_DATE)) AS 入职月数
FROM EMPLOYEES;

--ADD_MONTHS():返回指定日期之后的N个月的日期
SELECT ADD_MONTHS(SYSDATE,-100)
FROM DUAL;

--NEXT_DAY():获得指定日期的下一个星期N的日期
SELECT NEXT_DAY(SYSDATE,2)
FROM DUAL;

SELECT NEXT_DAY(SYSDATE,'星期二')
FROM DUAL;

--与类型转换相关的单行函数
/*
1.字符串可以与日期进行相互的转换
2.字符串可以与数字进行相互的转换
3.Oracle中日期与数字不能相互转换
*/

--TO_CHAR(D,F):根据模板F将日期类型D转换为字符串类型的值。
SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'YYYY-MM-DD')
FROM EMPLOYEES;

SELECT TO_CHAR(SYSDATE,'D DD DDD')
FROM DUAL;

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'FMYYYY"年"MM"月"DD"日" DAY')
FROM EMPLOYEES;

--查询employees表中所有星期三入职员工的last_name,hire_date(格式:1999-1-1)
SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'FMYYYY-MM-DD')
FROM EMPLOYEES
WHERE TO_CHAR(HIRE_DATE,'DAY')='星期三';

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'FMYYYY-MM-DD')
FROM EMPLOYEES
WHERE TO_CHAR(HIRE_DATE,'D')='4';

--查询employees所有员工的last_name,hire_date(格式为:YYYY-MM-DD),入职的星期
SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'YYYY-MM-DD') AS 入职时间,TO_CHAR(HIRE_DATE,'DAY') AS 星期
FROM EMPLOYEES
ORDER BY TO_CHAR(HIRE_DATE-1,'D') ASC;

原文地址:https://www.cnblogs.com/yzyqqhr/p/5712760.html