作用:WHERE语句用于MySQL中过滤查询结果,只返回满足条件的结果
语法
SELECT column1, column2, ...
FROM table_name
WHERE condition;
column1
,?column2
, ... 是你要选择的列的名称,如果使用?*
?表示选择所有列。table_name
?是你要从中查询数据的表的名称。WHERE condition
?是用于指定过滤条件的子句。1)可以使用多个表,表之间使用逗号隔开,使用where子句设置查询条件
2)可以指定任何条件,使用AND运算符或OR运算符的时候可以指定一个或多个条件。
3)WHERE子句也可用于DELETE或者UPDATE命令中
操作符 | 描述 | 实例 |
---|---|---|
= | 等号,检测两个值是否相等,如果相等返回true | (A = B) 返回false。 |
<>, != | 不等于,检测两个值是否相等,如果不相等返回true | (A != B) 返回 true。 |
> | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true | (A > B) 返回false。 |
< | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (A < B) 返回 true。 |
>= | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (A >= B) 返回false。 |
<= | 小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true | (A <= B) 返回 true。 |
1. 等于条件:
SELECT * FROM users WHERE username = 'test';
2. 不等于条件:
SELECT * FROM users WHERE username != 'runoob';
3. 大于条件:
SELECT * FROM products WHERE price > 50.00;
4. 小于条件:
SELECT * FROM orders WHERE order_date < '2023-01-01';
5. 大于等于条件:
SELECT * FROM employees WHERE salary >= 50000;
6. 小于等于条件:
SELECT * FROM students WHERE age <= 21;
7. 组合条件(AND、OR):
SELECT * FROM products WHERE category = 'Electronics' AND price > 100.00;
SELECT * FROM orders WHERE order_date >= '2023-01-01' OR total_amount > 1000.00;
LIKE?子句是在 MySQL 中用于在 WHERE 子句中进行模糊匹配的关键字。它通常与通配符一起使用,用于搜索符合某种模式的字符串。
LIKE?子句中使用百分号?%字符来表示任意字符,类似于UNIX或正则表达式中的星号?*。
如果没有使用百分号?%, LIKE 子句与等号?=?的效果是一样的。
语法:
SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;
1)可以在WHERE使用LIKE子句指定条件
2)LIKE可以代替等号,LIKE通常与%一起使用
3)你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件。可以与AND和OR一起使用
4)%通配符表示零个或者多个字符,例如’a%‘就是以a开头的任意字符串
5)_通配符,表示一个字符
6)utf8mb4_general_ci 是一种不区分大小写的校对规则
示例
--'a%' 匹配以字母 'a' 开头的任何字符串。
SELECT * FROM customers WHERE last_name LIKE 'S%';
--_ 通配符表示一个字符。例如,'_r%' 匹配第二个字母为 'r' 的任何字符串。
SELECT * FROM products WHERE product_name LIKE '_a%';
--组合使用 % 和 _:
SELECT * FROM users WHERE username LIKE 'a%o_';
--不区分大小写的匹配:utf8mb4_general_ci 是一种不区分大小写的校对规则
SELECT * FROM employees WHERE last_name LIKE 'smi%' COLLATE utf8mb4_general_ci;
DELETE FROM?命令来删除 MySQL 数据表中的记录。
语法
DELETE FROM table_name
WHERE condition;
如果不指定WHERE条件将会把表中的所有数据全部删除
--删除符合条件的行:
DELETE FROM tb_user WHERE id>3;
--使用子查询删除符合条件的行:
DELETE FROM customers
WHERE customer_id IN (
SELECT customer_id
FROM orders
WHERE order_date < '2023-01-01'
);
修改或更新 MySQL 中的数据,我们可以使用?UPDATE
语法
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
--更新单个列的值:
UPDATE employees SET salary = 60000 WHERE employee_id = 101;
--更新多个列的值:
UPDATE orders SET status = 'Shipped', ship_date = '2023-03-01' WHERE order_id = 1001;
--使用表达式更新值:
UPDATE products SET price = price * 1.1 WHERE category = 'Electronics';
--更新符合条件的所有行:
UPDATE students SET status = 'Graduated';
--更新使用子查询的值:
UPDATE customers
SET total_purchases = (
SELECT SUM(amount)
FROM orders
WHERE orders.customer_id = customers.customer_id
)
WHERE customer_type = 'Premium';
UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合,并去除重复的行。
UNION 操作符必须由两个或多个 SELECT 语句组成,每个 SELECT 语句的列数和对应位置的数据类型必须相同。
?语法
SELECT column1, column2, ...
FROM table1
WHERE condition1
UNION
SELECT column1, column2, ...
FROM table2
WHERE condition2
[ORDER BY column1, column2, ...];
实例
select * from user where id>2 union select * from tb_user where id>2;
ORDER BY(排序)?语句可以按照一个或多个列的值进行升序(ASC(默认))或降序(DESC)排序。
语法
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;
实例
select * from tb_user order by username desc;
--使用数字表示列的位置:
SELECT first_name, last_name, salary FROM employees ORDER BY 3 DESC, 1 ASC;
--使用表达式排序:
SELECT product_name, price * discount_rate AS discounted_price FROM products ORDER BY
discounted_price DESC;