本节书摘来自异步社区出版社《Oracle SQL疑难解析》一书中的第1章,第1.1节,作者: 【美】Grant Allen , Bob Bryla , Darl Kuhn,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.1 从表中查询数据
Oracle SQL疑难解析
1.1.1 要解决的问题
如何从一个表中查询特定行和列的数据。
1.1.2 解决方法
用包含WHERE子句的SELECT语句。下面的SELECT 语句可以从数据库表中查询符合条件的行的列值:
select employee_id, first_name, last_name, hire_date, salary
from hr.employees
where department_id = 50
and salary < 7500;
上述SELECT 语句从Oracle 数据库自带的HR样本SCHEMA的EMPLOYEE表中返回了45行,这里列出前10行:
----------- ---------- ----------- --------- ------
198 Donald OConnell 21-JUN-99 2600
199 Douglas Grant 13-JAN-00 2600
123 Shanta Vollman 10-OCT-97 6500
124 Kevin Mourgos 16-NOV-99 5800
125 Julia Nayer 16-JUL-97 3200
126 Irene Mikkilineni 28-SEP-98 2700
127 James Landry 14-JAN-99 2400
128 Steven Markle 08-MAR-00 2200
129 Laura Bissot 20-AUG-97 3300
130 Mozhe Atkinson 30-OCT-97 2800
…
1.1.3 数据库如何工作
我们用SELECT语句来帮助你理解(或帮助你回忆)组成一个查询语句的基本元素。语句的第一行显式地声明我们希望在结果中包含的5个字段:
select employee_id, first_name, last_name, hire_date, salary
下一行是FROM子句,指出我们要从哪个表中取得字段数据:
from hr.employees
在这个例子中,我们用了完全对象命名(two-part object naming)方法,不仅用了表名EMPLOYEES,还指出了表所属的SCHEMA:HR。这就显式地把我们要查询的EMPLOYEES表与任何其他SCHEMA中可能存在的同名表区分开来,也可以避免这样的错误:现在使用的用户SCHEMA下也有EMPLOYEE表,如果不显式地指明SCHEME,那么EMPLOYEE表指的就是当前用户SCHEMA下的表。
下面列出WHERE 子句,下面的子句表明必须两个条件都满足的行才能选中:
where department_id = 50
and salary < 7500
只有EMPLOYEES表两个条件都满足的行才能选中,“AND”的意思是同时满足,单单满足一个条件是不能选中的。如果用非技术语言来描述,就是“员工所在的部门的ID必须是50,同时本人的工资必须低于7500”。
另外的布尔操作符是OR和NOT,它们都遵循通用的布尔优先级规则,使用圆括号可以显式改变优先级顺序。我们用上面的例子来展示如何组合使用这些操作符:
select employee_id, first_name, last_name, hire_date, salary
from hr.employees
where department_id = 50
and (salary < 2500 or salary > 7500);
这个查询语句跟前面的例子一样,也是查找5个字段,但这一次,查找出的记录是部门ID为50、薪水小于2500或大于7500的员工:
EMPLOYEE_ID FIRST_NAME LAST_NAME HIRE_DATE SALARY
120 Matthew Weiss 18/JUL/96 8000
121 Adam Fripp 10/APR/97 8200
122 Payam Kaufling 01/MAY/95 7900
127 James Landry 14/JAN/99 2400
128 Steven Markle 08/MAR/00 2200
132 TJ Olson 10/APR/99 2100
135 Ki Gee 12/DEC/99 2400
136 Hazel Philtanker 06/FEB/00 2200
这次在HR SCHEMA中符合条件的记录只有8条。