如何掌握SQL查询语句的基础?

SELECT 是 SQL 查询的基础,用于从数据库中检索数据。

SQL 查询语句基础

SQL(Structured Query Language,结构化查询语言)是用于管理和操作关系数据库的标准语言,本文将详细介绍 SQL 查询语句的基础,包括基本查询、条件查询、排序、分组以及聚合函数等内容。

sql查询语句基础

1. 基本查询

1.1 SELECT 语句

SELECT 语句用于从一个或多个表中检索数据,基本的SELECT 语句语法如下:

SELECT column1, column2, ...
FROM table_name;

column1, column2: 要检索的列名,可以使用 表示所有列。

table_name: 要查询的表名。

从名为employees 的表中检索所有员工的姓名和职位:

SELECT first_name, last_name, job_title
FROM employees;

1.2 WHERE 子句

sql查询语句基础

WHERE 子句用于过滤记录,只返回满足条件的行,其基本语法如下:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

查找工资大于 5000 的员工:

SELECT first_name, last_name, salary
FROM employees
WHERE salary > 5000;

1.3 ORDER BY 子句

ORDER BY 子句用于对结果集进行排序,其基本语法如下:

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;

按工资从高到低排序员工:

SELECT first_name, last_name, salary
FROM employees
ORDER BY salary DESC;

2. 高级查询

2.1 聚合函数

sql查询语句基础

聚合函数用于对一组值执行计算并返回单一值,常见的聚合函数包括COUNT(),SUM(),AVG(),MAX(), 和MIN(),其基本语法如下:

SELECT aggregate_function(column)
FROM table_name
WHERE condition;

统计员工总数:

SELECT COUNT(*) AS total_employees
FROM employees;

2.2 GROUP BY 子句

GROUP BY 子句用于将结果集按照一个或多个列进行分组,其基本语法如下:

SELECT column1, aggregate_function(column2)
FROM table_name
WHERE condition
GROUP BY column1;

按部门统计员工数量:

SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;

2.3 HAVING 子句

HAVING 子句用于过滤分组后的结果,其基本语法如下:

SELECT column1, aggregate_function(column2)
FROM table_name
WHERE condition
GROUP BY column1
HAVING condition;

查找员工数量超过 10 的部门:

SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 10;

3. 连接查询

3.1 INNER JOIN

内连接(INNER JOIN)返回两个表中满足连接条件的记录,其基本语法如下:

SELECT columns
FROM table1
INNER JOIN table2 ON table1.common_column = table2.common_column;

查找每个员工及其对应的部门名称:

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id;

3.2 LEFT JOIN (或 LEFT OUTER JOIN)

左连接(LEFT JOIN)返回左表中的所有记录以及右表中满足连接条件的记录,如果右表中没有匹配的记录,则结果为 NULL,其基本语法如下:

SELECT columns
FROM table1
LEFT JOIN table2 ON table1.common_column = table2.common_column;

查找所有员工及其对应的部门名称,即使某些员工没有分配部门:

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.department_id;

3.3 RIGHT JOIN (或 RIGHT OUTER JOIN)

右连接(RIGHT JOIN)返回右表中的所有记录以及左表中满足连接条件的记录,如果左表中没有匹配的记录,则结果为 NULL,其基本语法如下:

SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.common_column = table2.common_column;

查找所有部门及其对应的员工名称,即使某些部门没有员工:

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.department_id;

3.4 FULL JOIN (或 FULL OUTER JOIN)

全连接(FULL JOIN)返回两个表中的所有记录,如果其中一个表中没有匹配的记录,则结果为 NULL,其基本语法如下:

SELECT columns
FROM table1
FULL JOIN table2 ON table1.common_column = table2.common_column;

查找所有员工和部门,即使某些员工没有分配部门或某些部门没有员工:

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
FULL JOIN departments ON employees.department_id = departments.department_id;

4. 子查询

子查询是一个嵌套在另一个 SQL 语句中的查询,子查询可以出现在SELECT,FROM,WHERE,HAVING 等子句中,其基本语法如下:

SELECT column1, column2, ...
FROM table_name
WHERE condition AND (subquery);

查找工资高于公司平均工资的员工:

SELECT first_name, last_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

5. 联合查询(UNION)

联合查询用于合并两个或多个SELECT 语句的结果集,每个SELECT 语句必须具有相同数量的列,并且对应列的数据类型必须兼容,其基本语法如下:

SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;

查找所有经理和销售代表的姓名:

SELECT first_name, last_name, job_title
FROM employees
WHERE job_title = 'Manager'
UNION
SELECT first_name, last_name, job_title
FROM employees
WHERE job_title = 'Sales Representative';

相关问题与解答栏目

问题1:如何在 SQL 中删除重复记录?

解答:在 SQL 中删除重复记录通常需要使用子查询和删除语句,以下是一个示例,假设我们有一个名为employees 的表,其中包含重复的电子邮件地址:

DELETE FROM employees
WHERE id NOT IN (
    SELECT MIN(id)
    FROM employees
    GROUP BY email
);

这个查询首先通过子查询找到每个电子邮件地址的最小id,然后删除不在子查询结果集中的其他记录,这种方法假设每个重复记录可以通过id 唯一标识,如果没有id 列,可以使用其他唯一标识符。

问题2:如何在 SQL 中更新一列的值基于另一列的条件?

解答:在 SQL 中更新一列的值基于另一列的条件可以使用UPDATE 语句结合CASE 表达式,以下是一个示例,假设我们有一个名为employees 的表,我们需要根据job_title 更新salary 列:

UPDATE employees
SET salary = CASE job_title
    WHEN 'Manager' THEN salary * 1.10
    WHEN 'Sales Representative' THEN salary * 1.05
    ELSE salary * 1.00 No change for other job titles
END;
WHERE job_title IN ('Manager', 'Sales Representative');
``这个查询使用CASE 表达式根据job_title 的值来更新salary 列,只有当job_titleManagerSales Representative 时才会更新salary`,否则保持不变。

来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/88566.html

Like (0)
小编小编
Previous 2024年12月13日 08:18
Next 2024年12月13日 08:24

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注