1.限定被选择的数据行
SELECT *|{[DISTINCT] column [alias], ...}
FROM table
WHERE condition(s)];
例:
SELECT ename,job,deptno
FROM emp
WHERE job='CLERK';
结果:
ENAME JOB DEPTNO
SMITH CLERK 20
ADAMS CLERK 20
JAMES CLERK 30
MILLER CLERK 10
注:
字符串和日期型数值都要用单引号引起来
字符型数值是区分大小写的
日期型数值是区分日期表达形式的
默认的日期形式是DD-MON-RR
2.比较操作符
= 等于
> 大于
>= 大于等于
< 小于
<= 小于等于
<>或!= 不等于
BETWEEN...AND... 两个值之间(包含)
IN(list) 和多个值中任何一个匹配
LIKE 字形匹配
IS NULL 是空值
1)使用比较操作符:
例1:
SELECT ename,sal,comm
FROM emp
WHERE sal<=comm;
结果:
ENAME SAL COMM
MARTIN 1250 1400
例2:
SELECT ename,sal,hiredate
FROM emp
WHERE hiredate>'10-9月-07'
AND sal>1000;
2)使用BETWEEN运算符
例:
SELECT ename,sal
FROM emp
WHERE sal BETWEEN 1000 AND 1500;
结果:
ENAME SAL
WARD 1250
MARTIN 1250
TURNER 1500
ADAMS 1100
MILLER 1300
...
3)使用IN运算符
例:
SELECT empno,ename,sal,mgr
FROM emp
WHERE mgr IN (7902,7566,7788);
结果:
EMPNO ENAME SAL MGR
7369 SMITH 2000 7902
7788 SCOTT 3000 7566
7876 ADAMS 1100 7788
7902 FORD 3000 7566
...
4)使用LIKE运算符:
例1:
SELECT ename,sal
FROM emp
WHERE ename LIKE 'S%';
结果:
ENAME SAL
SMITH 2000
SCOTT 3000
...
例2:
SELECT ename,sal
FROM emp
WHERE ename LIKE '_A%';
结果:
ENAME SAL
WARD 1250
MARTIN 1250
JAMES 950
...
注:
“%”表示零个或任意更多的字符
“_”表示一个字符
可以使用ESCAPE标识符实现对“%”和“_”的查找
例3:
SELECT ename
FROM emp
WHERE ename LIKE '%A/_B%' ESCAPE '/';
5)使用空值运算符
例7:
SELECT ename,mgr
FROM emp
WHERE mgr IS NULL;
结果:
ENAME MGR
KING
3.逻辑运算符
AND 如果两部分条件都为真则返回真值
OR 两部分条件中的任何一个为真则返回真值
NOT 如果条件为假则返回真值
例1:
SELECT empno,ename,job,sal
FROM emp
WHERE sal>=1100
AND job='CLERK';
例2:
SELECT empno,ename,job,sal
FROM emp
WHERE sal>=1100
OR job='CLERK';
例3:
SELECT ename,job
FROM emp
WHERE job NOT IN('CLERK','MANAGER','ANALYST');
4.运算符优先级
计算顺序 运算符
1 所有比较运算符
2 NOT
3 AND
4 OR
注:使用括号可以改变运算符的优先级
例1:
SELECT empno,ename,job,sal
FROM emp
WHERE job='SALESMAN'
OR job='PRESIDENT'
AND sal>1500;
//先运算AND再运算OR
例2:
SELECT empno,ename,job,sal
FROM emp
WHERE (job='SALESMAN'
OR job='PRESIDENT')
AND sal>1500;
//使用了括号,先运算OR再运算AND
5.排序
使用ORDER BY子句对行排序
-ASC:升序,默认值
-DESC:降序
ORDER BY子句出现在SELECT语句的最后
例1:
SELECT ename,job,deptno,hiredate
FROM emp
ORDER BY hiredate;
例2:
SELECT ename,job,deptno,hiredate
FROM emp
ORDER BY hiredate DESC;
例3:
SELECT empno,ename,sal*12 annsal
FROM emp
ORDER BY annsal;
6.多列参与排序
ORDER BY列表的顺序就是数据排列的顺序
可以用没有在SELECT列表中出现的列进行排序
例:
SELECT ename,deptno,sal
FROM emp
ORDER BY deptno,sal DESC;
练习
1.查询emp表,显示薪水大于2000,且工作类别是MANAGER的雇员信息
SELECT *
FROM emp
WHERE sal>2000
AND job='MANAGER';
2.查询emp表,显示年薪大于30000,工作类别不是MANAGER的雇员信息
SELECT *
FROM emp
WHERE sal*12 >30000
AND job NOT LIKE 'M%';
3.查询emp表, 显示薪水在1500到3000之间,工作类别以“M”开头的雇员信息
SELECT *
FROM emp
WHERE sal BETWEEN 1500 AND 3000
AND job LIKE 'M%';
4.查询emp表,显示佣金为空并且部门号为20或30的雇员信息
SELECT *
FROM emp
WHERE deptno IN (20,30)
AND comm IS NULL;
或者:
SELECT *
FROM emp
WHERE (deptno=20
OR deptno=30)
AND comm IS NULL;
5.查询emp表,显示佣金不为空或者部门号为20的雇员信息,要求按照薪水降序排列
SELECT *
FROM emp
WHERE deptno=20
OR comm IS NOT NULL
ORDER BY sal desc;
6.查询emp表,显示年薪大于30000工作类别不是MANAGER,且部门号不是10或40的雇员信息,要求按照雇员姓名进行排列
SELECT *
FROM emp
WHERE sal*12 >30000
AND job NOT LIKE 'MANAGER'
AND deptno NOT IN(10,40)
ORDER BY ename;