一.插入数据

1
2
INSERT INTO 表名 (列名1,列名2,列名...)
values (列值1值,列值2,列值3...);

注意

- 插入数据的时候,列名和列值的顺序要一致!

- 如果数据类型是字符串,要使用单引号包裹!

二.查询数据

1. 基本格式

1
SELECT 列名1,列名2,列名... | * FROM 表名;

*代表查询所有列

2. 查询条件

1
2
SELECT 列名1,列名2,列名... | * FROM 表名
WHERE 列名 条件;

3. where条件语句

  • where 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。

  • where 子句也可以运用于 SQL 的 delete 或者 update 命令。

  • 你可以使用 and 或者 or 指定一个或多个条件。

实例:

1
2
SELECT * FROM users WHERE username = 'test';
# 查询username列数据为test的行的所有信息
1
2
SELECT * FROM users WHERE username != 'runoob';
# 查询username列数据不为runoob的行的所有信息
1
2
SELECT * FROM products WHERE price > 50.00;
# 查询price列数据大于50.00的行的所有信息,同理可用 <<=>=
1
2
3
4
# 组合条件
SELECT * FROM products WHERE category = 'Electronics' AND price > 100.00; # 查询category列数据为Electronics且price列数据大于100.00的行的所有信息(交集)

SELECT * FROM orders WHERE order_date >= '2023-01-01' OR total_amount > 1000.00; # 查询order_date列数据大于等于2023-01-01或total_amount列数据大于1000.00的行的所有信息(并集)
1
2
# IN运算符
SELECT * FROM countries WHERE country_code IN ('US', 'CA', 'MX'); # 查询country_code列数据为US、CA、MX的行的所有信息
1
2
# NOT运算符
SELECT * FROM products WHERE NOT category = 'Clothing'; # 查询category列数据不为Clothing的行的所有信息
1
2
# BETWEEN运算符
SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31'; # 查询order_date列数据在202311日至20231231日之间的行的所有信息

注意:如果给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据.

4. like子句

  • like子句用于搜索数据库中的模式(模糊匹配)。

  • LIKE 通常与 % 一同使用,类似于一个元字符的搜索。

  • 可以使用 and 或者 or 指定一个或多个条件。

  • 可以在 DELETE 或 UPDATE 命令中使用 WHERE…LIKE 子句来指定条件。

实例:

1
2
% 通配符(匹配任意一个或多个字符)
SELECT * FROM customers WHERE last_name LIKE 'S%'; # 查询last_name列数据以S开头的行的所有信息
1
2
_ 通配符(匹配任意一个字符)
SELECT * FROM products WHERE product_name LIKE '_a%'; # 查询product_name列数据第二字符为a的行的所有信息
1
2
组合使用 % 和 _
SELECT * FROM users WHERE username LIKE 'a%o_'; # 查询username列数据第一个字符为a且倒数第二字符为o的行的所有信息
1
2
不区分大小写的匹配
SELECT * FROM employees WHERE last_name LIKE 'smi%' COLLATE utf8mb4_general_ci; # 查询last_name列数据以smi开头的行的所有信息(不区分大小写)

三. 数据更新

1. 基本格式

1
2
3
UPDATE 表名
SET 列名1 = 列值1, 列名2 = 列值2, ...
WHERE 列名 条件;

2. 实例

1
2
3
UPDATE orders
SET status = 'Shipped', ship_date = '2023-03-01'
WHERE order_id = 1001;
1
2
3
4
5
6
# 使用表达式更新值
UPDATE products
SET price = price * 1.1
WHERE category = 'Electronics';
WHERE category = 'Electronics';
# 以上 SQL 语句将每个属于 'Electronics' 类别的产品的价格都增加了 10%

四. 数据删除

1. 基本格式(删除一行所有列数据)

1
2
DELETE FROM 表名
WHERE 列名 条件;

2. 实例

1
2
3
DELETE FROM orders
WHERE order_id = 1001;
# 删除order_id列数据为1001的行

五. union操作符

1. union操作符用于合并两个或多个 SELECT 语句的结果集,并返回所有行,去除重复的行。(并集)

2. 基本格式

1
2
3
SELECT (列名1,列名2,列名... | *) FROM 表名 WHERE 条件
UNION [ALL] # UNION ALL不去除重复的行
SELECT (列名1,列名2,列名... | *) FROM 表名 where 条件;

3. 实例

1
2
3
4
SELECT product_name FROM products WHERE category = 'Electronics'
UNION
SELECT product_name FROM products WHERE category = 'Clothing'
# 以上 SQL 语句将选择电子产品和服装类别的产品名称.

六. order by 语句

1. MySQL ORDER BY(排序) 语句可以按照一个或多个列的值进行升序(ASC)或降序(DESC)排序。

2. 基本格式

1
2
3
SELECT 列名1, 列名2, ...
FROM 表名
ORDER BY 列名1 [ASC | DESC], 列名2 [ASC | DESC], ...;

3. 实例

1
2
3
# 单列排序
SELECT * FROM products
ORDER BY product_name ASC;
1
2
3
# 多列排序
SELECT * FROM products
ORDER BY product_name ASC, price DESC; # 先按第一个升序排序,在第一个排序相同时,再按第二个降序排序,可以用数字代替列名
1
2
3
4
5
# 使用表达式排序
SELECT product_name, price * discount_rate AS discounted_price
FROM products
ORDER BY discounted_price DESC;
# 按折扣后的价格降序排序

七.分组查询

1. GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

2. 基本格式

1
2
3
4
5
SELECT 列名1, aggregate_function(列名2)
FROM 表名
WHERE 列名 条件
GROUP BY 列名1;
# 列名2为对分组后的每个组执行的聚合函数

3. 实例

分组

分组

通过分组计算男女生的成绩平均分