查询
- 基本查询语句
- 在SQL*PLUS中设置格式
- 查询表中的所有字段及指定字段
- 给字段设置别名(针对查询结果)
- 运算符和表达式
- 在SELECT语句中使用运算符
- 带条件的查询、模糊查询、范围查询
- 对查询结果进行排序
- case … when语句的使用
- decode函数的使用
1. 基本查询语句
SELECT [DISTINCT] column_name1,... | * --DISTINCT 关键字可以去掉重复的数据
FROM table_name
[WHERE conditions];
在SQL*PLUS中设置格式
更改查询结果中的字段名:
COLUMN column_name HEADING new_name; --COLUMN可以简写成COL
设置结果显示的格式:
COLUMN column_name FORMAT dataformat; --字符类型只能设置显示的长度
例如,设置字符类型的显示长度为10:
col column_name format a10;
设置数值类型的数据可以用一个9代表一位数字,如显示一位小数:
col column_name format 9999.9;
清除之前设置的格式:
COLUMN column_name CLEAR;
查询表中的所有字段及指定字段
查询所有字段:
SELECT * FROM table_name;
查询指定字段:
SELECT column_name1,... FROM table_name;
给字段设置别名
设置别名只显示在查询结果中,不会影响实际表中的字段名。
SELECT column_name AS new_name,...
FROM table_name;
2. 在SELECT语句中使用运算符和表达式
运算符和表达式
表达式 = 操作数 + 运算符,在Oracle中操作数可以有变量、常量和字段。
- 算数运算符: + , - , * , /
- 比较运算符:> , >= , < , <= , = , <>
- 逻辑运算符:and , or , not
在SELECT语句当中使用运算符
使用算术运算符
--在显示的查询结果中,将column_name2字段的所有值都加上200,不影响表中的数据
select column_name1, column_name2 + 200,... from table_name;
使用比较运算符
--查询column_name2字段的值大于700的记录的column_name1字段的值
select column_name1 from table_name where column_name2 > 700;
使用逻辑运算符
--查询column_name2大于70且不等于90的记录的column_name1字段的值
select column_name1 from table_name where column_name2 > 70 and column_name2 <> 90;
3. 带条件的查询
仍以之前使用的userinfo表为例进行说明。
- 单一条件的查询
select salary from userinfo where username='Tom';
- 多条件的查询
select * fomr userinfo where username='Kim' or salary > 1000;
select * from userinfo where username='Tom' or (salary > 800 and salary < 2000);
运算符的优先级:not > and > or,比较运算符的优先级高于逻辑运算符。
4. 模糊查询和范围查询
模糊查询(使用LIKE关键字)
- 通配符的使用
_ : 一个下划线代表任意一个字符
%:一个百分号代表多个任意字符 - 使用LIKE查询
--查询用户名以T开头的记录
select * from userinfo where username like 'T%';
--查询用户名第二个字符是o的记录
select * from userinfo where username like '_o%';
--查询用户名中含有m的记录
select * from userinfo where username like '%m%';
范围查询
- BETWEEN … AND(查询的结果是一个闭区间)
--查询工资在800到1000之间的记录
select * from userinfo where salary between 800 and 1000;
- IN/NOT IN(IN后面代表的不是一个范围,而是一个具体的值)
--查询用户名为Tom或者Kim的记录
select * from userinfo where username in('Tom', 'Kim');
5. 对查询的结果进行排序
--查询结果以column_name1,...等字段的值进行排序,DESC降序,ASC升序
SELECT ... FROM ... [WHERE]
ORDER BY column_name1 DESC/ASC,...;
--如果对多个字段要求按需排列,如:
select * from userinfo order by id desc, salary asc;
--结果中记录会先按id降序排列,而在id字段的值相等的记录中,salary按升序排列
6. case…when语句的使用
--当字段column_name的值为value1时,得到结果result1
CASE column_name
WHEN value1 THEN result1,...
[ELSE result] END;
例如:
select username, case salary when 1000 then '一级'
when 2000 then '二级' else '其他' end as 工资等级
from userinfo;
case…when语句还可以这么用:
CASE
WHEN column_name=value1
THEN result1,...[ELSE result] END;
--以上语句可以等价于
select username, case when salary=1000 then '一级'
when salary=2000 then '二级' else '其他' end as 工资等级
from userinfo;
--第二种写法在when之后可以使用表达式
decode函数的使用
decode(column_name, value1, result1, ..., defaultvalue);
decode(salary, 1000, '一级', 2000, '二级', '其他') as 工资等级;