1. 左连接(LEFT JOIN)
左外连接的特点:
-
返回左表的所有行:无论右表中是否有匹配的行,左表的所有行都会被返回。
-
返回右表的匹配行:对于左表中的每一行,如果右表中有匹配的行,则返回这些匹配的行。
-
NULL值:如果右表中没有与左表某行相匹配的行,则结果集中右表的部分将填充为NULL。
左外连接的语法:
sql
SELECT columns
FROM table1
LEFT JOIN table2
ON join_condition;
table1
:左表,即JOIN
操作的左侧表。table2
:右表,即JOIN
操作的右侧表。join_condition
:连接条件,用于确定哪些行应该被组合在一起。通常是一个等值条件,即两个表中用于连接的列的值相等。
左外连接的例子:
假设有两个表,employees
(员工表)和departments
(部门表),它们通过department_id
字段相关联。
sql
SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id;
这个查询将返回employees
表中的所有员工,以及每个员工对应的部门名称。如果某个员工没有分配到任何部门(即departments
表中没有对应的行),那么departments.department_name
字段将显示为NULL。
2. LIMIT
LIMIT
子句用于限制查询结果的数量。它通常用在 SQL 查询中,特别是在分页显示数据时。LIMIT
子句可以单独使用,也可以与 OFFSET
子句一起使用
示例
假设我们有一个名为 employees
的表,我们想要获取前 10 条记录:
sql
SELECT *
FROM employees LIMIT 10;
如果我们想要获取第 11 到 20 条记录,我们可以这样写:
sql
SELECT *
FROM employees LIMIT 10 OFFSET 10;
3. HAVING
HAVING
子句用于对分组后的数据进行条件过滤,它在 GROUP BY
子句后使用。HAVING
通常与聚合函数(如 COUNT()
, SUM()
, AVG()
等)一起使用。
示例
假设我们有一个名为 sales
的表,它包含了每个销售员的销售额。我们想要找出总销售额超过 10000 的销售员:
sql
SELECT salesperson, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY salesperson
HAVING SUM(sales_amount) > 10000;
在这个例子中,我们首先按 salesperson
进行分组,然后计算每个销售员的总销售额。HAVING
子句用于过滤那些总销售额超过 10000 的销售员。
4.LIKE
示例
假设我们有一个名为 customers
的表,其中有一个名为 customer_name
的列,我们想要找出所有以 "A" 开头的客户名称:
sql
SELECT customer_name
FROM customers
WHERE customer_name LIKE 'A%';
如果我们想要找出所有客户名称中包含 "B" 的记录:
sql
SELECT customer_name
FROM customers
WHERE customer_name LIKE '%B%';
如果我们想要找出所有客户名称以 "C" 结尾的记录:
sql
SELECT customer_name
FROM customers
WHERE customer_name LIKE '%C';
组合通配符
你可以在模式中组合使用 %
和 _
来创建更具体的搜索条件。例如,如果我们想要找出所有客户名称中第二个字符是 "B" 的记录:
sql
SELECT customer_name
FROM customers
WHERE customer_name LIKE '_B%';
5. UPDATE
示例
假设我们有一个名为 employees
的表,包含 employee_id
, name
, 和 salary
列,我们想要将 ID 为 1 的员工的工资增加 1000。
sql
UPDATE employees
SET salary = salary + 1000
WHERE employee_id = 1;
在这个例子中,我们使用 salary + 1000
来增加当前工资,但你也可以直接指定一个新值,如 SET salary = 5000
。
更新多个列
如果你想要同时更新多个列,可以这样做:
sql
UPDATE employees
SET name = 'John Doe', salary = 5000
WHERE employee_id = 1;
使用子查询
你还可以在 UPDATE
语句中使用子查询来设置列的值:
sql
UPDATE employees
SET salary = (SELECT MAX(salary) FROM employees)
WHERE employee_id = 1;
这个例子将员工 ID 为 1 的员工的工资设置为整个 employees
表中最高的工资。
更新基于多个条件的记录
如果你需要根据多个条件来更新记录,可以在 WHERE
子句中组合多个条件:
sql
UPDATE employees
SET salary = 5000
WHERE department_id = 2 AND experience_years > 5;
这个例子将部门 ID 为 2 且工作经验超过 5 年的员工的工资更新为 5000。
没有 WHERE 子句的更新
如果你省略 WHERE
子句,UPDATE
语句将更新表中的所有记录:
sql
UPDATE employees
SET salary = 5000;