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;
相关推荐
每天敲200行代码1 小时前
MySQL 事务管理
数据库·mysql·事务
巴里巴气1 小时前
MongoDB索引及其原理
数据库·mongodb
程序员勋勋12 小时前
Redis的String数据类型底层实现
数据库·redis·缓存
不修×蝙蝠2 小时前
MySQL 全详解:从入门到精通的实战指南
数据库·mysql·索引·最左前缀
我的ID配享太庙呀4 小时前
Django 科普介绍:从入门到了解其核心魅力
数据库·后端·python·mysql·django·sqlite
不辉放弃4 小时前
kafka的消费者负载均衡机制
数据库·分布式·kafka·负载均衡
拉姆哥的小屋5 小时前
用 Flask 打造宠物店线上平台:从 0 到 1 的全栈开发实践
数据库·oracle·flask
liliangcsdn5 小时前
mac neo4j install & verifcation
数据库·neo4j
Cyanto5 小时前
MyBatis-Plus高效开发实战
java·开发语言·数据库
-XWB-6 小时前
【Oracle】套接字异常(SocketException)背后隐藏的Oracle问题:ORA-03137深度排查与解决之道
数据库·oracle