1、注释语句
--这是注释。
2、查询表中全部数据
SELECT * FROM EMP;
--这里的"*"表示全部数据。
3、查询表中部分数据
SELECT EMPNO,ENAME,JOB FROM EMP;
4、对表中的字段进行运算
SELECT SAL, SAL*12 FROM EMP;
5、对表中的字段进行重命名
SELECT SAL,SAL*12 AS "年薪" FROM EMP;
--这里的AS和双引号可以省略,但是不可以使用单引号。
6、字段拼接
SELECT '编号:'||EMPNO||'姓名:'||ENAME||'职位:'||JOB||'薪资:'||SAL AS INFO FROM EMP;
--可以参考或者模仿Java中字符串的拼接。相当于Java中的"+",但是Oracle中的"+"和"||"不一样。
7、去除重复行
SELECT DISTINCT JOB FROM EMP;
--这里的distinct 是指后面的所有字段的组合。
8、排序
SELECT ENAME,SAL FROM EMP ORDER BY SAL ASC;
SELECT ENAME,SAL FROM EMP ORDER BY SAL DESC;
--ASC是升序(默认),DESE是降序。可以嵌套排序,如:
SELECT ENAME,SAL,JOB FROM EMP ORDER BY SAL,ENAME DESC;
--先对SAL升序排序,在这个基础上再对ENAME进行降序排序。
9、WHERE语句
SELECT * FROM EMP WHERE EMPNO = 7369;
--对查询结果的进一步控制,后面可以接许多语句。
SELECT *FROM EMP WHERE ENAME = 'SMITH';
SELECT * FROM EMP WHERE SAL >= 1600 AND SAL <=2450;
SELECT * FROM EMP WHERE SAL BETWEEN 1600 AND 2450;
SELECT * FROM EMP WHERE HIREDATE = '17-12月-1980';
--注意对日期的查询。
SELECT * FROM WHERE SAL != 800;
--!=也可以用<>替换
SELECT * FROM EMP WHERE ENAME IN('SMITH','JONES');
--ENAME在集合('SMITH','JONES')中的。
SELECT * FROM EMP WHERE ENAME = 'SMITH' OR ENAME'JONES';
--OR关键字,或者的意思。
SELECT * FROM EMP WHERE COMM IS NULL;
SELECT * FROM EMP WHERE COMM IN NOT NULL;
SELECT * FROM EMP WHERE NOT COMM IS NULL;
SELECT * FROM EMP WHERE ENAME LIKE '%S';
--LIKE是模糊查询的关键字,所谓的模糊查询,有点像Java中的正则表达式,但要简单的多。
--%代表任意多个任意字符,_代表一个任意字符
--转义字符可以自己定义,需要使用关键字ESCAPE,如:
SELECT * FROM EMP WHERE ENAME LIKE '%A_%' ESCAPE 'A';
10、字符函数
SELECT ENAME,LOWER(ENAME),UPPER(ENAME),INITCAP(ENAME) FROM EMP;
--LOWER是小写,UPPER是大写,INITCAP是首字母大写。
SELECT ENAME,REPLACE(ENAME,'A','a') FROM EMP;
--REPLACE是替换,将查询到的所有结果中的'A'替换成'a'。
SELECT ENAME,SUBSTR(ENAME,1,3)FROM EMP;
--字符串截取,相当于Java中的substring(),要注意的是Oracle中字符串下标是从1开始的。
SELECT 1+1 FROM DUAL;
--这里的表DUAL是虚拟的表
SELECT INSTR('HELLO','H') FROM DUAL;
--下标,相当于Java中的indexOf()。
SELECT CONCAT('HELLO','ORACLE')FROM DUAL;
--字符串拼接。
SELECT LENGTH('HELLO') FROM DUAL;
--获取字符串的长度。
11、数值函数
SELECT CEIL(3.5),FLOOR(3.5),ROUND(3.5)FROM DUAL;
--CEIL向上取整,FLOOR向下取整,ROUND四舍五入。
SELECT TRUNC(3.5,1) FROM DUAL;
--TRUNC(X,Y);x,y,数字型表达式,如果y不为整数则截取y整数部分,如果y>0则截取到y位小数,如果y小于0则截取到小数点向左第y位,小数前其它数据用0表示。
12、日期函数
SELECT SYSDATE FROM DUAL;
SELECT ADD_MONTHS(SYSDATE,5) FROM DUAL;
SELECT ENAME,ROUND(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12)FROM EMP;
SELECT SYSDATE,LAST_DAY(SYSDATE) FROM DUAL;
13、转换函数
SELECT '12.5' + 30 FROM DUAL;
SELECT TO_CHAR(12345,'L999,999,999.99') FROM DUAL;
SELECT TO_CHAR(12345,'$000,000,000.00') FROM DUAL;
SELECT TO_DATE('2017/3/2 16:39:00','YYYY-MM-DD HH24:MI:SS') FROM DUAL;
SELECT TO_NUMBER('12345') FROM DUAL;
14、通用函数
SELECT ENAME,SAL,COMM,SAL+NVL(COMM,0) INCOME FROM EMP ORDER BY INCOME DESC;
--NVL( 字段名,返回值A); 当字段名为null时,直接返回" 返回值A"
--当字段名不为null时,直接返回字段名对应值。
SELECT ENAME,SAL,COMM,NVL2(COMM,SAL+COMM,SAL) FROM EMP;
--NVL2(字段名,返回值A,返回值B)
--当字段名不为null,返回" 返回值A"
--当字段名为null,返回" 返回值B"
SELECT ENAME,JOB,DECODE(JOB,'CLERK','职员','SALESMAN','销售','MANAGER','经理','ANALYST','分析师','PRESIDENT','总裁') 职位 FROM EMP;
--DECODE( 字段名,值1 ,返回A ,值2 ,返回B ,值3 ,返回C );
--当字段名=值1 返回A,当字段名=值2 返回B