条件查询
使用单个条件
案例一
使用比较运算符,返回points大于3000的客户数据
SELECT *
FROM Customers
WHERE points > 3000
结果
补充:比较运算符
=
<
<=
=
!= #不等号1
<> #不等号2
案例二
返回state在VA的顾客
SELECT *
FROM Customers
WHERE state = 'VA'
-- 处理字符序列(即文本数据),需要用引号围起字符串
VA的大小写不影响检索结果
结果
案例三
返回1999-1-1以后出生的顾客
SELECT *
FROM Customers
WHERE birth_date > '1990-01-01'
-- 在SQL里引用日期,也需要带引号
练习
返回今年的订单(2019年)
SELECT *
FROM orders
WHERE '2019-01-01' <= order_date
OR AND NOT 运算符
合并多个条件
使用运算符,将多个条件合并
AND
两个条件需同时满足
SELECT *
FROM customers
WHERE birth_date > '1990-01-01' AND points > 1000
结果
OR
满足一个条件即可
SELECT *
FROM customers
WHERE birth_date > '1990-01-01' OR points > 1000
结果
两个运算符一起使用
案例一
SELECT *
FROM customers
WHERE birth_date > '1990-01-01' OR points > 1000 AND state = 'VA'
结果
案例二
代码一和代码二的结果是一致的
代码一
SELECT *
FROM customers
WHERE NOT (birth_date > '1990-01-01' OR points > 1000 )
代码二
SELECT *
FROM customers
WHERE (birth_date <= '1990-01-01' AND points <= 1000 )
结果一致
练习
从order_items表中获得order#6的项目且项目total price超过30
SELECT *
FROM sql_store.order_items
WHERE order_id = 6 AND unit_price * quantity > 30
结果
疑问
代码一和代码二为什么返回的值不一样?
代码一
SELECT *
FROM customers
WHERE NOT (birth_date > '1990-01-01' OR points > 1000 AND state = 'VA')
结果
代码二
SELECT *
FROM customers
WHERE (birth_date <= '1990-01-01' and points <= 1000 OR state != 'VA')
结果
其它
- 非( P 或 Q) = (非 P) 且 ( 非 Q)
- MySQL 中逻辑运算符的优先级:not > and > or