1.概述
Oracle SQL或简称SQL是一种用于执行关系型数据库管理系统(RDBMS)上的查询和管理操作的语言。Oracle SQL使用户能够方便地访问其数据,从而提高了组织的生产力。OR用途非常广泛,它提供了一种简单,强大,可靠和灵活的数据管理系统,被广泛应用于不同领域。
2.Oracle SQL连接查询语法
SQL连接查询是通过在两个或多个表之间联接查询来检索数据。Oracle SQL支持四种联接类型:内部联接,外部联接,自然联接和自联接。
2.1内部联接
内部联接使用 INNER JOIN 或 JOIN 关键字来返回两个表中联接行的交集。其语法如下:
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
其中,table1和table2是要联接的表,以及它们的列名和重叠数据的条件。INNER JOIN 关键字也可以使用 JOIN 来代替。
2.2外部联接
外部联接包含左外部联接(LEFT JOIN 或 LEFT OUTER JOIN)和右外部联接(RIGHT JOIN 或 RIGHT OUTER JOIN)。
左外部联接返回左边表(table1)中的所有行,以及右边表(table2)中与左表中的行具有匹配行的行,如果右表中没有匹配行,则返回 NULL 值。
右外部联接则返回右边表(table2)中的所有行,以及左边表(table1)中与右表中的行具有匹配行的行,如果左表中没有匹配行,则返回 NULL 值。
其语法如下:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
或
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
2.3自然联接
自然联接根据两个表之间的相同列来进行联接,不需要通过 JOIN ON 条件来指定匹配列。
其语法如下:
SELECT column_name(s)
FROM table1
NATURAL JOIN table2;
注意:自然联接明确禁用两个表中的相同列,否则会引发运行错误。
2.4自联接
自联接用于连接表中的两条记录,该表在查询中出现了两次或更多次。自联接的主要作用是将表的字段用于将自己和其他记录进行匹配。
以下是一个简单的示例,为了更好地理解:
SELECT a.emp_id, a.emp_name, b.emp_salary, b.emp_dept_id
FROM employee a, employee b
WHERE a.emp_salary = b.emp_salary;
该语句选择 employee 表中具有相同薪水的员工(将 employee 表作为 a 和 b)。
3.Oracle SQL条件查询语句
Oracle SQL条件查询语句用于根据特定条件筛选出满足条件的记录。
3.1 WHERE 子句
Oracle SQL WHERE 子句用于在查询中指定搜索条件,其语法如下:
SELECT column_name(s)
FROM table_name
WHERE condition;
其中,WHERE 子句中的条件可以是比较运算符,逻辑运算符和特殊运算符。
比较运算符的例子:
SELECT *
FROM employee
WHERE emp_name = 'Jack';
逻辑运算符的例子:
SELECT *
FROM employee
WHERE emp_age > 30 AND emp_salary > 5000;
特殊运算符的例子:
SELECT *
FROM employee
WHERE emp_name LIKE '%a%';
3.2 IN 子句
Oracle SQL IN 子句用于指定某个值必须匹配一组值中的一个。其语法如下:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);
IN 子句中的值可以是一个表达式,一个子查询甚至可以是另一个 IN 子句。
下面是一个 IN 子句的例子:
SELECT *
FROM employee
WHERE emp_id IN (2, 5, 7);
该语句选择具有 emp_id 列中值为 2、5 或 7 的所有行。
4.Oracle SQL聚合函数
Oracle SQL聚合函数是一组函数,用于计算表中数据的值,如 COUNT、MAX、MIN、SUM 和 AVG。
4.1 COUNT()
COUNT() 函数用于计算选定列的行数。其语法如下:
SELECT COUNT(column_name)
FROM table_name;
例如:
SELECT COUNT(emp_id)
FROM employee;
该语句将返回 employee 表中 emp_id 列的行数。
4.2 MAX()
MAX() 函数用于返回选定列中的最大值。其语法如下:
SELECT MAX(column_name)
FROM table_name;
例如:
SELECT MAX(emp_salary)
FROM employee;
该语句将返回 employee 表中 emp_salary 列的最大值。
4.3 MIN()
MIN() 函数用于返回选定列中的最小值。其语法如下:
SELECT MIN(column_name)
FROM table_name;
例如:
SELECT MIN(emp_salary)
FROM employee;
该语句将返回 employee 表中 emp_salary 列的最小值。
4.4 SUM()
SUM() 函数用于计算选定列的总和。其语法如下:
SELECT SUM(column_name)
FROM table_name;
例如:
SELECT SUM(emp_salary)
FROM employee;
该语句将返回 employee 表中 emp_salary 列的总和。
4.5 AVG()
AVG() 函数用于计算选定列的平均值。其语法如下:
SELECT AVG(column_name)
FROM table_name;
例如:
SELECT AVG(emp_salary)
FROM employee;
该语句将返回 employee 表中 emp_salary 列的平均值。
5.Oracle SQL分组函数
Oracle SQL分组函数允许根据其组返回单个值,这些组是基于 SELECT 语句中指定的表达式集划分的。以下是每个分组函数的详细信息。
5.1 GROUP BY 子句
GROUP BY 子句用于将查询结果按照指定列表达式的值对查询结果分组,其语法如下:
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
例如:
SELECT dept_id, AVG(emp_salary)
FROM employee
GROUP BY dept_id;
该语句将返回 employee 表中每个部门的平均工资。
5.2 SUM() with GROUP BY
SUM() 函数用于计算选定列的总和,与 GROUP BY 子句一起使用,其语法如下:
SELECT column_name, SUM(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
例如:
SELECT dept_id, SUM(emp_salary)
FROM employee
GROUP BY dept_id;
该语句将返回 employee 表中每个部门的总工资。
5.3 AVG() with GROUP BY
AVG() 函数用于计算选定列的平均值,与 GROUP BY 子句一起使用,其语法如下:
SELECT column_name, AVG(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
例如:
SELECT dept_id, AVG(emp_salary)
FROM employee
GROUP BY dept_id;
该语句将返回 employee 表中每个部门的平均工资。
5.4 COUNT() with GROUP BY
COUNT() 函数用于计算选定列的行数,与 GROUP BY 子句一起使用,其语法如下:
SELECT column_name, COUNT(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
例如:
SELECT dept_id, COUNT(*)
FROM employee
GROUP BY dept_id;
该语句将返回 employee 表中每个部门的员工数。