Oracle(plsql)学习四——select查询语句
本文以该表作为示例:
Create table employees
(id number(3),
first_name varchar2(10),
Last_name varchar2(10),
User_id varchar2(10),
Salary number(5)
department_id number(3)
job_id number(3)
hire_date date);
注意:!!!
SQL 语言大小写不敏感
SQL 可以写在一行或者多行
关键字不能被缩写也不能分行
各子句一般要分行写
使用缩进提高语句的可读性。
1、查询emp表所有列
select * from employees;
2、选择特定的列
select id,salary from employees;
3、使用算数运算符查询
数字和日期使用的算术运算符:+、-、*、/ (加减乘除)
select last_name, salary, salary + 300
from employees;
空值是无效的,未指定的,未知的或不可预知的值,空值不是空格或者0!
4、列的别名
重命名方法:
紧跟列名
也可以在列名和别名之间加入关键字‘as’,别名使用双引号,以便在别名中包含空格或特殊的字符并区分大小写
例如:
SELECT last_name AS name, commission_pct comm
FROM employees;
SELECT last_name "Name", salary*12 "Annual Salary"
FROM employees;
5、连接符 ||
作用:把列与列、列与字符连接在一起
方法:用 ‘||’表示
例子:连接姓名与工作两个列
SELECT last_name ||' is a '||job_id
AS "Employee Details"
FROM employees;
6、删除重复行 distinct
使用distinct删除重复行
例子:查询部门id,去除重复行
SELECT DISTINCT department_id
FROM employees;
7、过滤 where
注意:WHERE 子句紧随 FROM 子句
例子:查询部门号等于90的员工的employee_id, last_name, job_id, department_id
SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id = 90 ;
8、字符和日期
注意:
字符和日期要包含在单引号中
字符大小写敏感,日期格式敏感
默认的日期格式是 DD-MON月-RR
例子:
SELECT last_name, job_id, department_id
FROM employees
WHERE last_name = 'Whalen';
SELECT last_name, hire_date, department_id
FROM employees
WHERE hire_date = '7-6月-1994'
9、比较运算
例子:
SELECT last_name, salary
FROM employees
WHERE salary <= 3000;
between...and...
使用 BETWEEN 运算来显示在一个区间内的值
SELECT last_name, salary
FROM employees
WHERE salary BETWEEN 2500 AND 3500;
in
使用 IN运算显示列表中的值
SELECT employee_id, last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 201);
like
使用 LIKE 运算选择类似的值
选择条件可以包含字符或数字:
% 代表零个或多个字符(任意个字符)
_代表一个字符。
例子:查询first_name为S开头的员工姓名
SELECT first_name
FROM employees
WHERE first_name LIKE 'S%';
查询第二个字母为o的last_name
SELECT last_name
FROM employees
WHERE last_name LIKE '_o%'
null
使用null判断空值
SELECT last_name, manager_id
FROM employees
WHERE manager_id IS NULL;
10、逻辑运算
and
例子:查询工资大于等于10000并且job_id含有'MAN'的员工的员工号,姓名,工资
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >=10000
AND job_id LIKE '%MAN%';
or
例子:查询工资大于等于10000或者job_id含有'MAN'的员工的员工号,姓名,工资
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000
OR job_id LIKE '%MAN%';
11、order by 子句
使用 ORDER BY 子句排序
ASC(ascend):升序(默认升序,降序必须要特别指定)
DESC(descend): 降序
ORDER BY 子句在SELECT语句的结尾
例子:
查询员工的last_name, job_id, department_id, hire_date,并且根据hire_date升序排列
SELECT last_name, job_id, department_id, hire_date
FROM employees
ORDER BY hire_date ;
查询员工的last_name, job_id, department_id, hire_date,并且根据hire_date降序排列
SELECT last_name, job_id, department_id, hire_date
FROM employees
ORDER BY hire_date DESC ;
查询员工的last_name, job_id, department_id, hire_date,并且根据年工资升序排列
SELECT employee_id, last_name, salary*12 annsal
FROM employees
ORDER BY annsal;
总结:
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)]
[[ORDER BY {column, expr, alias} [ASC|DESC]];
书写SELECT语句: SELECT … FROM…
返回表中的全部数据
返回表中指定列的数据
使用别名
使用WHERE 子句过滤数据
使用比较运算
使用 BETWEEN AND, IN, LIKE和 NULL运算
使用逻辑运算符 AND, OR和NOT
使用 ORDER BY 子句进行排序