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;
相关推荐
长潇若雪11 分钟前
结构体(C 语言)
c语言·开发语言·经验分享·1024程序员节
Zilliz Planet23 分钟前
GenAI 生态系统现状:不止大语言模型和向量数据库
数据库·人工智能·语言模型·自然语言处理
DARLING Zero two♡1 小时前
关于我、重生到500年前凭借C语言改变世界科技vlog.12——深入理解指针(2)
c语言·开发语言·科技·1024程序员节
瓜牛_gn1 小时前
redis详细教程(4.GEO,bitfield,Stream)
数据库·redis·缓存
独行soc1 小时前
#渗透测试#SRC漏洞挖掘# 信息收集-Shodan进阶之Jenkins组件
安全·jenkins·安全威胁分析·1024程序员节·shodan
练习两年半的工程师1 小时前
建立一个简单的todo应用程序(前端React;后端FastAPI;数据库MongoDB)
前端·数据库·react.js·fastapi
dawn1912282 小时前
Java 中的正则表达式详解
java·开发语言·算法·正则表达式·1024程序员节
新知图书2 小时前
MySQL 9从入门到性能优化-创建触发器
数据库·mysql·性能优化
黑不拉几的小白兔2 小时前
PTA L1系列题解(C语言)(L1_097 -- L1_104)
数据结构·算法·1024程序员节
HEX9CF2 小时前
【SQLite】改善默认输出格式不直观难以阅读问题:通过修改输出设置提升数据可读性
数据库·sqlite