本文档是一份结构清晰、去重精简的 MySQL 核心语法速查指南,通过代码与示例相结合的方式,系统梳理了涵盖数据查询与操作(DML/DQL)、表结构定义(DDL)、多表连接与复杂条件过滤的核心关键字,并分类汇总了日常开发中高频使用的聚合、字符串、日期时间及数学等内置函数与基础数据类型。
一、 核心关键字
1. 数据查询与操作
- SELECT:用于从数据库中选择并检索数据。
SELECT * FROM customers; - FROM:指定查询的数据源(表)。
SELECT * FROM customers; - WHERE:用于过滤查询结果,设定条件。
SELECT * FROM customers WHERE name = 'John Doe'; - INSERT:向表中插入新数据。
INSERT INTO customers (name, email) VALUES ('John Doe', 'johndoe@example.com'); - UPDATE:更新表中的现有数据。
UPDATE customers SET name = 'Jane Doe' WHERE id = 1; - DELETE:从表中删除记录。
DELETE FROM customers WHERE id = 1;
2. 数据库与表结构定义
- CREATE:创建新的数据库对象(如表、视图、索引)。
CREATE TABLE customers (id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(50)); - ALTER:修改现有数据库表的结构。
ALTER TABLE customers ADD phone VARCHAR(20); - DROP:删除数据库对象。
DROP TABLE customers;
3. 连接与集合操作
- JOIN:将多个表连接在一起进行查询。
SELECT * FROM customers INNER JOIN orders ON customers.id = orders.customer_id; - INNER JOIN:返回两个表中都有匹配的行。
- LEFT JOIN:返回左表中所有行,以及右表中匹配的行。
- RIGHT JOIN:返回右表中所有行,以及左表中匹配的行。
- FULL JOIN:返回左右表中所有的行(注:MySQL不直接支持FULL JOIN,通常通过UNION实现)。
- UNION:将多个SELECT查询的结果集合并在一起。
SELECT name FROM customers WHERE country = 'USA' UNION SELECT name FROM customers WHERE country = 'Canada';
4. 分组、排序与限制
- GROUP BY:对查询结果集进行分组。
SELECT country, COUNT(*) FROM customers GROUP BY country; - HAVING:在GROUP BY之后,对分组结果进行过滤。
SELECT country, COUNT(*) FROM customers GROUP BY country HAVING COUNT(*) > 1; - ORDER BY:对查询结果进行排序。
SELECT * FROM customers ORDER BY name ASC; - ASC / DESC:指定升序(默认)或降序排序。
- LIMIT:限制查询返回的记录数量。
SELECT * FROM customers LIMIT 10;
5. 条件过滤与逻辑运算符
- DISTINCT:返回唯一不重复的查询结果。
SELECT DISTINCT country FROM customers; - AND / OR / NOT:逻辑与、逻辑或、逻辑非运算符。
SELECT * FROM customers WHERE country = 'USA' AND age > 18; - IN:指定一个值列表,用于过滤查询结果。
SELECT * FROM customers WHERE country IN ('USA', 'Canada'); - LIKE:用于模糊匹配查询条件(%代表多个字符,_代表单个字符)。
SELECT * FROM customers WHERE name LIKE '%Doe%'; - BETWEEN:指定一个范围查询条件(包含边界值)。
SELECT * FROM customers WHERE age BETWEEN 18 AND 30; - IS / IS NOT:用于判断值是否为NULL。
SELECT * FROM customers WHERE phone IS NOT NULL; - EXISTS:判断子查询是否返回结果。
SELECT * FROM customers WHERE EXISTS (SELECT * FROM orders WHERE orders.customer_id = customers.id);
6. 别名与流程控制
- AS:为查询结果中的列或表指定别名。
SELECT name AS full_name FROM customers; - CASE / WHEN / THEN / ELSE / END:用于在查询中进行条件判断。
SELECT name, age, CASE WHEN age >= 18 THEN 'Adult' WHEN age >= 13 THEN 'Teenager' ELSE 'Child' END AS age_group FROM customers;
二、 常用数据类型关键字
- INT:整数数据类型。
- VARCHAR:可变长度字符串数据类型。
- DECIMAL:定点数数据类型(常用于金额)。
- DATE:日期数据类型(YYYY-MM-DD)。
- DATETIME:日期和时间组合数据类型。
- ENUM:枚举类型,限制字段只能取指定的值。
- SET:集合类型,允许存储多个预定义的值。
- BLOB:二进制大对象类型,用于存储图片、文件等。
- TEXT:长文本数据类型。
三、 常用内置函数
1. 聚合函数(多行函数)
- COUNT():计算查询结果的行数。
SELECT COUNT(*) FROM customers; - AVG():计算数值列的平均值。
SELECT AVG(age) FROM customers; - SUM():计算数值列的总和。
SELECT SUM(amount) FROM orders; - MAX() / MIN():找出查询结果的最大值或最小值。
SELECT MAX(age), MIN(age) FROM customers;
2. 字符串函数
- CONCAT():将多个字符串连接在一起。
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM customers; - SUBSTRING():截取字符串的一部分。
SELECT SUBSTRING(name, 1, 3) FROM customers; - UPPER() / LOWER():将字符串转换为大写或小写。
- TRIM():去除字符串两端的空格。
- LEFT() / RIGHT():返回字符串左边或右边指定长度的部分。
- LENGTH():返回字符串的长度(字节数)。
- INSTR():查找子字符串在字符串中第一次出现的位置。
3. 日期与时间函数
- NOW():获取当前的日期和时间。
- CURDATE() / CURTIME():获取当前日期 / 当前时间。
- DATE() / TIME():从日期时间值中提取日期部分 / 时间部分。
SELECT DATE(order_date) FROM orders; - YEAR() / MONTH() / DAY():提取日期中的年、月、日。
- HOUR() / MINUTE() / SECOND():提取时间中的时、分、秒。
4. 数学函数
- ROUND():将数值四舍五入到指定的小数位数。
SELECT ROUND(price, 2) FROM products; - ABS():返回数值的绝对值。
- RAND():生成一个0到1之间的随机浮点数。
