之前上一家公司数据库用的是informix数据库,新公司数据库用的是Oracle数据库,所以还是需要重新学习一下,并做个笔记。
sql查询语句基本语法:
1、别名的使用,别名使用As连接或者省略不写。
SQL> SELECT EMPNO AS "Employee Number",
2 ename name,(500+sal)*12 "Annual Salary"
3 from emp;
结果:
Employee Number NAME Annual Salary
--------------- ---------- -------------
7369 SMITH 15600
7499 ALLEN 25200
7521 WARD 21000
7566 JONES 41700
7654 MARTIN 21000
7698 BLAKE 40200
7782 CLARK 35400
7788 SCOTT 42000
7839 KING 66000
7844 TURNER 24000
7876 ADAMS 19200
注意:当别名没有被双引号括起来时,别名的显示结果为大写;如果别名中包含了特殊字符,或者想让别名原样显示,就要使用双引号把别名括起来。
2、字符串连接运算符 ||
SQL> SELECT ename ||' annual salary is '||(500+sal)*12 "Employee's Salary"
2 FROM emp;
结果:
Employee's Salary
--------------------------------------------------------------------
SMITH annual salary is 15600
ALLEN annual salary is 25200
WARD annual salary is 21000
JONES annual salary is 41700
MARTIN annual salary is 21000
BLAKE annual salary is 40200
CLARK annual salary is 35400
3、在sql语句中使用算数表达式+,-,*,/
SQL> SELECT empno,ename,(500+sal)*12
2 FROM EMP;
结果:
EMPNO ENAME (500+SAL)*12
---------- -------- ------------
7369 SMITH 15600
7499 ALLEN 25200
7521 WARD 21000
7566 JONES 41700
7654 MARTIN 21000
7698 BLAKE 40200
7782 CLARK 35400
7788 SCOTT 42000
7839 KING 66000
7844 TURNER 24000
7876 ADAMS 19200
4、使用DISTINCT查询是去掉重复的行
SQL> SELECT DISTINCT deptno
2 FROM emp;
结果:
DEPTNO
----------
30
20
10
注意:DISTINCT可用于多列,此时的显示结果为每一种列组合只显示一行。如:
SQL> SELECT DISTINCT deptno,job
2 FROM EMP;
结果:
DEPTNO JOB
---------- ---------
20 CLERK
30 SALESMAN
20 MANAGER
30 CLERK
10 PRESIDENT
30 MANAGER
10 CLERK
10 MANAGER
20 ANALYST
5、查询是使用where限制性条件。
SQL> SELECT empno,ename,sal
2 FROM emp
3 WHERE SAL>=1500;
结果:
EMPNO ENAME SAL
---------- -------- ----------
7499 ALLEN 1600
7566 JONES 2975
7698 BLAKE 2850
7782 CLARK 2450
7788 SCOTT 3000
7839 KING 5000
7844 TURNER 1500
7902 FORD 3000
备注:6个常用的比较运算符
>(大于),<(小于),=(等于),<=(小于等于),>=(大于等于),!=或<>(不等于)
6、使用between 下限 and 上限,判断数字型数据、字符串或者日期型数据在下限和上限之间,包含下限和上限。字符串和日期型数据需要用单引号括起来。
SQL> SELECT empno,ename,sal
2 FROM emp
3 WHERE sal BETWEEN 1500 AND 2900;
EMPNO ENAME SAL
---------- -------- ----------
7499 ALLEN 1600
7698 BLAKE 2850
7782 CLARK 2450
7844 TURNER 1500
SQL> SELECT empno,ename,sal,hiredate
2 FROM emp
3 WHERE hiredate BETWEEN '01-JAN-81' AND '31-MAY-82';
EMPNO ENAME SAL HIREDATE
---------- -------- ---------- ---------------
7499 ALLEN 1600 20-FEB-81
7521 WARD 1250 22-FEB-81
7566 JONES 2975 02-APR-81
7654 MARTIN 1250 28-SEP-81
7698 BLAKE 2850 01-MAY-81
7782 CLARK 2450 09-JUN-81
7839 KING 5000 17-NOV-81
7844 TURNER 1500 08-SEP-81
7900 JAMES 950 03-DEC-81
7902 FORD 3000 03-DEC-81
7934 MILLER 1300 23-JAN-82
备注:可以在 用not betbeen ... and ...之间,用来判断数字型数据、字符串或者日期型数据没有在下限和上限之间。
7、like模糊匹配,两个通配符%,_
%:“%”代表零个或者多个字符
_:"_"代表一个且只能是一个字符
SQL> SELECT empno,ename,sal,job
2 FROM emp
3 WHERE job LIKE 'S_L_S%';
EMPNO ENAME SAL JOB
---------- ---------- ---------- ---------
7499 ALLEN 1600 SALESMAN
7521 WARD 1250 SALESMAN
7654 MARTIN 1250 SALESMAN
7844 TURNER 1500 SALESMAN
SQL> SELECT empno,ename,sal,hiredate
2 FROM emp
3 WHERE hiredate LIKE '%81';
EMPNO ENAME SAL HIREDATE
---------- ---------- ---------- ------------
7499 ALLEN 1600 20-FEB-81
7521 WARD 1250 22-FEB-81
7566 JONES 2975 02-APR-81
7654 MARTIN 1250 28-SEP-81
7698 BLAKE 2850 01-MAY-81
7782 CLARK 2450 09-JUN-81
7839 KING 5000 17-NOV-81
7844 TURNER 1500 08-SEP-81
7900 JAMES 950 03-DEC-81
7902 FORD 3000 03-DEC-81
8、使用转义字符
先新建一个临时表
SQL> CREATE table dept_temp
2 AS
3 SELECT *
4 FROM dept;
插入一条数据:
SQL> INSERT INTO ddept_temp
2 VALUES(88,'IT_RESEARCH','BEIJING');
转移查询:
SQL> SELECT *
2 FROM dept_temp
3 WHERE dname LIKE 'IT\_%' escape '\';
DEPTNO DNAME LOC
---------- -------------- -------------
88 IT_RESEARCH BEIJING
备注:定义'\'为转义符,即'_'字符不是通配符,而是它本来的含义。可以定义其它字符为转义字符。
SQL> SELECT *
2 FROM dept_temp
3 WHERE dname LIKE 'IT~_%' escape '~';
DEPTNO DNAME LOC
---------- -------------- -------------
88 IT_RESEARCH BEIJING