FROM语句
FROM子句用于指定SQL语句的执行对象,它定义了查询的数据来源。
FROM子句的基本语法为:
SELECT column1, column2
FROM table_name;
FROM子句支持的执行对象有:
-
表:从表中查询数据。
-
视图:从视图中查询数据。
-
子查询:将子查询的结果作为一张表,可以在外层查询的FROM子句中使用。
-
连接:指定两个或两个以上表,并定义连接条件,来创建连接结果集。支持内连接、外连接和交叉连接。
-
decided表表达式:决定表函数可以返回多行结果,这些结果在FROM子句中被当作一张表。如TABLE()函数。
-
with子查询:定义一张临时的虚拟表,可以在FROM子句中引用该表。
-
数据库链接:通过数据库链接查询远程数据库中的数据。
示例:
SELECT * FROM employees; -- 从employees表中查询所有列
SELECT * FROM departments; -- 从departments视图中查询所有列
SELECT *
FROM (SELECT employee_id, salary
FROM employees
WHERE salary > 5000) sub; -- 从子查询结果中查询所有列
SELECT e.employee_id, e.first_name, d.department_name
FROM employees e
JOIN departments d
ON (e.department_id = d.department_id); -- 使用连接查询
SELECT *
FROM TABLE(dbms_xplan.display_cursor('sql_id')); -- 使用decided表函数
WITH dept_avg_sal AS
(SELECT department_id, AVG(salary) avg_sal FROM employees GROUP BY department_id)
SELECT * FROM dept_avg_sal; -- 使用with子查询
SELECT *
FROM employees@remote_host; -- 使用数据库链接查询远程表
FROM子句用于定义SQL语句的数据来源,它是查询和DML语句的基础,指定了语句要操作或查询的数据。理解FROM子句可以让我们清楚当前语句的执行对象到底是什么,这对语句的正确性和性能有重要影响。
要熟练使用FROM子句,需要掌握:
-
支持的各种类型的数据来源,如表、视图、子查询、连接、表函数、with子查询、数据库链接等。
-
这些数据来源之间的区别及各自的特点。如表与视图的区别,内连接与外连接的区别等。
-
子查询作为一张表使用的概念,以及子查询的作用和使用场景。
-
表函数的概念及常见表函数的使用,如dbms_xplan包中的表函数。
-
与连接查询相关的概念,如交叉连接、自然连接的概念和三种主要连接的语法。
-
数据库链接的概念及其使用场景。
FROM子句在SQL语句中起着举足轻重的作用,但由于其简单的语法,很容易被忽视。要真正掌握FROM子句,需要对各种类型的数据来源有深入理解,并在实践中大量使用,积累丰富的经验。熟练运用FROM子句,可以写出高效和准确的SQL语句,满足各种复杂的业务需求。它是开发人员和DBA必备的技能之一。