限制性查询和数据的排序
1、如何限定所选择的数据行
SELECT empno,ename,sal
FROM emp
WHERE sal >= 1500;
使用WHERE子句来限制哪些行要显示,在关系数据库中称为选择(selection)操作。WHERE子句跟在FROM子句之后。
WHERE是关键字,其后跟限制条件
条件是有列名、字符串、算术表达式、常量和比较运算符组成。
2、比较运算符
你可以使用比较运算符(operators)来构造条件。
条件的格式:
表达式 operator 表达式
Oracle的6个常用比较运算符(operators):
>
>=
<
=
<>或!=
除了上面的比较运算符外,Oracle还提供了以下3个比较运算符(operators):
BETWEEN AND
IN
LIKE
3、如何使用BETWEEN AND比较运算符(operators)
SELECT empno,ename,sal
FROM emp
WHERE sal BETWEEN 1500 AND 2900;
BETWEEN运算符用于测试某些值是否在指定的数值范围之内。BETWEEN和AND之间的值叫下限,AND之后的值叫上限。显示的结果包含下限和上限的值。该运算符不但可用于数字型数据而且还可用于字符型和日期型数据,但这两种类型的数据必须用单引号括起来。
可以在BETWEEN之前加上NOT,得到不在BETWEEN AND 指定范围内的数据
4、在SQL语句中使用字符串和日期
SELECT empno,ename,job
FROM emp
WHERE JOB = 'salesman'
WHEER子句中的字符串是区分大小写的,WHERE子句中的字符和日期型数据要用单引号括起来,但数字型不用
5、使用IN比较运算符(operators)
SELECT empno,ename,sal,job
FROM emp
WHERE job IN ('SALESMAN','CLERK','MANAGER')
IN shi SQL中的又一个很有用的比较运算符,IN用来测试某些值是否在列表中出现,在上面的SQL语句中,只要某一记录的JOB列的值等于IN列表中(即括号中)的任何一个,该记录就会显示出来。还可以在IN前加上否定词NOT,NOT IN用来测试某些只是否不再列表出现。
6、使用LIKE比较运算符号
SELECT empno,ename,sal,job
FROM emp
WHERE job LIKE 'SAL%';
您可以用LIKE运算符进行通配符查询。
% 代表0个或多个字符
_ 代表一个且只是一个字符
7、如何使用转义(escape)操作符
比如我们希望查询名字为 ”厉_“的用户信息,我们知道_在like中表示的任意一个字符串,所以希望将_转义。
example:
SELECT * FROM USER_BASE_INFO WHERE NAME_CN LIKE '%厉\_%' escape '\';
转义操作符可以任意指定,
example:
SELECT * FROM USER_BASE_INFO WHERE NAME_CN LIKE '%厉~_%' escape '~';
8、ORDER BY子句
利用ORDER BY子句对查询的结果进行排序。ASC(ascending上升的 order)为升序排序(默认),因此ASC在实际的SQL中很少见到。您可以对数字型,日期型和字符型数据进行排序。默认时,数字型和日期型数据的顺序为从小到大。字符型的顺序是按照ASCII码的顺序,即A-Z。DESC(descending下降的 order)为降序排序
如果使用了ORDER BY子句,该子句一定是SQL语句的最后一个子句。
example:
SELECT * FROM USER_BASE_INFO ORDER BY user_id DESC;
order by sentence use alias,example:
SELECT user_id AS "user number",name_cn AS "user name" FROM USER_BASE_INFO ORDER BY "user number" DESC;
ORDER BY子句使用表达式:
SELECT empmo AS "Employee Number",ename name,(500+sal)*12 "Annual Salary"
FROM emp
ORDER BY (500+sal)*12 DESC;
ORDER BY语句使用序号(可读性差,不常用):
SELECT empmo AS "Employee Number",ename name,(500+sal)*12 "Annual Salary"
FROM emp
ORDER BY 3 DESC;
ORDER BY子句中使用多列:
SELECT ename,job,sal
FROM emp
ORDER BY job ,sal DESC;
在ORDER BY 子句中使用在SELECT 列表中没有的列:
SELECT ename ,job ,sal
FROM emp
ORDER BY empno;
拓展后的查询语句的格式:
SELECT *|{[DISTINCT] 列表,...}
FROM 表明
[WHERE 条件]
[ORDER BY {列明|列名|表达式,...}[ASC|DESC]];
其中条件由以下部分组成:
列名
字符串
算术表达式
常量
比较运算符
ORDER BY 子句一定放在SQL语句的最后。