目录
题目:查询
sql_store
数据库下的orders
表,要求非comments
字段不能为NULL,或者order_date
大于2018年1月1日,并且status
等于1的所有列数据。并使用小括弧给出翻译运行的顺序。
sql
SELECT *
FROM sql_store.orders as o
WHERE NOT (o.comments IS NULL OR o.order_date > '2018-1-1' AND o.`status` = 1)
-- 翻译后:
SELECT *
FROM sql_store.orders as o
WHERE NOT ((o.comments IS NULL) OR (o.order_date > '2018-1-1' AND o.`status` = 1))
IN, BETWEEN, LIKE运算符
本节将演示
IN
、BETWEEN
、LIKE
三个运算符的使用场景,以及它们的用法。
IN
IN
表示一个值是否在一个集合里面。查询出
sql_store
数据库中customers
表里面state
列数据为CA
或者FL
或者VA
的所有数据。
sql
-- 结合之前所学,你可能使用OR
SELECT *
FROM sql_store.customers AS c
WHERE c.state = 'CA' OR c.state = 'FL' OR c.state = 'VA';
-- 使用IN运算符
SELECT *
FROM sql_store.customers AS c
WHERE c.state IN ( "CA", "FL", "VA" );
-- 结合NOT,则是表示不在这个集合里面
SELECT *
FROM sql_store.customers AS c
WHERE c.state NOT IN ( "CA", "FL", "VA" );
BETWEEN
BETWEEN
表示在两个值之间,可以规定一个区间,如:[50, 100],是包含50和100的喔。查询出
sql_store
数据库中customers
表里面birth_date
列1970年1月1日到2000年1月1日的数据。
sql
-- 结合此前学的知识,你可以使用AND实现
SELECT *
FROM sql_store.customers AS c
WHERE c.birth_date > '1970-1-1' AND c.birth_date < '2000-1-1';
-- 巧了,使用BETWEEN也需要结合AND
SELECT *
FROM sql_store.customers AS c
WHERE c.birth_date BETWEEN '1970-1-1' AND '2000-1-1';
-- 加入NOT表示不在这个区间内的数据
SELECT *
FROM sql_store.customers AS c
WHERE c.birth_date NOT BETWEEN '1970-1-1' AND '2000-1-1';
LIKE
LIKE
表示模糊查询,你可以使用%
和_
符号来分别占位信息。%
表示N个字符,_
表示单个字符。
- 查询出
sql_store
数据库中customers
表里面last_name
中首字母为R的数据。
sql
-- 注意,在Windows下,MySQL中查询值是不区分大小写的
SELECT *
FROM sql_store.customers AS c
WHERE c.last_name LIKE "r%";
-- 加入NOT,表示查询非r为首字母的数据
SELECT *
FROM sql_store.customers AS c
WHERE c.last_name NOT LIKE "r%";
- 查询出
sql_store
数据库中customers
表里面last_name
中末尾字符为y的数据。
sql
SELECT *
FROM sql_store.customers AS c
WHERE c.last_name LIKE "%y";
- 查询出
sql_store
数据库中customers
表里面last_name
中第三个字符为s,且不限字符长度的数据。
sql
SELECT *
FROM sql_store.customers AS c
WHERE c.last_name LIKE "__s%";
练习
以上的三个运算符是比较简单的,相信同学们可以举一反三,多练习即可掌握用法。
题目:查询
sql_store
数据库中customers
表,要求points
列的值大于500并且小于2500,并且last_name
列数据里存在h字符的数据,或者city
为Arlington、Visalia的所有数据。