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;
相关推荐
心平愈三千疾9 分钟前
通俗理解JVM细节-面试篇
java·jvm·数据库·面试
我科绝伦(Huanhuan Zhou)9 天前
Oracle|Oracle SQL*Plus 配置上下翻页功能
数据库·sql·oracle
Cachel wood9 天前
Spark教程6:Spark 底层执行原理详解
大数据·数据库·分布式·计算机网络·spark
java—大象9 天前
基于java SSM的房屋租赁系统设计和实现
java·开发语言·数据库·spring boot·layui·mybatis
Mutig_s9 天前
Spring Boot动态数据源切换:优雅实现多数据源管理
java·数据库·spring boot·后端·mybatis
Python小老六9 天前
单片机测ntc热敏电阻的几种方法(软件)
数据库·单片机·嵌入式硬件
矿渣渣9 天前
SQLite3 在嵌入式系统中的应用指南
数据库·sqlite·嵌入式实时数据库
@昵称不存在9 天前
Python csv 模块
开发语言·数据库·python
程序猿小D9 天前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+Vue实现的校园二手交易平台管理系统,推荐!
java·数据库·mysql·spring·vue·毕业设计·校园二手交易平台
DoWeixin69 天前
【请关注】hBase要用的顺畅的思路
数据库