MySQL多种子句用法

1. 左连接(LEFT JOIN)

左外连接的特点:

  1. 返回左表的所有行:无论右表中是否有匹配的行,左表的所有行都会被返回。

  2. 返回右表的匹配行:对于左表中的每一行,如果右表中有匹配的行,则返回这些匹配的行。

  3. 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;
相关推荐
AAA修煤气灶刘哥8 小时前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql
RestCloud12 小时前
揭秘 CDC 技术:让数据库同步快人一步
数据库·api
得物技术15 小时前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql
可涵不会debug19 小时前
【IoTDB】时序数据库选型指南:工业大数据场景下的技术突围
数据库·时序数据库
ByteBlossom19 小时前
MySQL 面试场景题之如何处理 BLOB 和CLOB 数据类型?
数据库·mysql·面试
麦兜*19 小时前
MongoDB Atlas 云数据库实战:从零搭建全球多节点集群
java·数据库·spring boot·mongodb·spring·spring cloud
Slaughter信仰20 小时前
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第十章知识点问答(10题)
java·jvm·数据库
麦兜*20 小时前
MongoDB 在物联网(IoT)中的应用:海量时序数据处理方案
java·数据库·spring boot·物联网·mongodb·spring
-Xie-20 小时前
Mysql杂志(十六)——缓存池
数据库·mysql·缓存