1、范围查询
-
between and 查询连续范围内的数据,包含左右边间,是一个闭区间
- between and 必须从小值到大值进行范围划分,否则没有数据
-
in 查询不连续区间内的数据,in (数据1, 数据2 。。。。。)
-
格式:select 列名 from 表名 where 字段名 in (数据1, 数据2, 数据3 。。。。)
# 范围查询
# between and 连续范围查询
# 需求: 查找,价格在200-2000范围内的所有商品,包含起始和终止位置,是一个闭区间[]
SELECT * FROM product WHERE price BETWEEN 200 AND 2000;
# in 不连续范围查询
# 需求:查找价格是200, 800, 2000, 5000的所有商品的全部信息
SELECT * FROM product WHERE price IN (200, 800, 2000, 5000);
# 回顾之前的题目 查询在安徽和北京的同学
# SELECT * FROM student_info WHERE hometown in not ('安徽', '北京');
# 练习:
# 1/查询价格在600-2000范围内的所有商品的名称和价格
# between只能从小到大设置范围
SELECT pname, price FROM product WHERE price BETWEEN 600 AND 2000;
# SELECT pname, price FROM product WHERE price BETWEEN 2000 AND 600;
# 2/查询名字为真维斯,杰克琼斯以及香奈儿的所有商品
SELECT * FROM product WHERE pname IN ('真维斯', '杰克琼斯', '香奈儿');
2、逻辑查询
-
逻辑运算符
- and 逻辑与 同真即真
- or 逻辑或 同假即假
- not 逻辑非 非真即假,非假即真
# 逻辑运算符
# and 逻辑与 ? 同真即真
# or 逻辑或 ? 同假即假
# not 逻辑非 ? 真变假,假变真
# 如果条件成立,我们定义其结果为 True
# 如果条件不成立,我们定义其结果为 False
# True and True ?? True 真
# True and False ?? False 假
# False and True ?? False 假
# False and False ?? False 假
# True or True ?? True 真
# True or False ?? True 真
# False or True ?? True 真
# False or False ?? False 假
# not False ?? True 真
# not True ?? False 假
# 第一题 not ((True and 4 > 5) or 3 > 2) ??? False
# 需求: 查询价格在200-2000之间的所有商品,如果需要包含边界,则需要使用大于等于和小于等于
SELECT * FROM product WHERE price <= 2000 AND price >= 200;
# 需求:查询价格不再200-2000范围内的所有商品信息
SELECT * FROM product WHERE NOT (price <= 2000 AND price >= 200);
# 方法二:
SELECT * FROM product WHERE price > 2000 OR price < 200;
3、模糊查询
-
like关键字,可以进行模糊查询:根据指定规则进行查询
- %:代表0个或多个字符
- _:代表一个字符
-
格式: select 列名 from 表名 where 字段 like 规则;
# 模糊查询:根据指定规则进行查询,满足规则将被筛选出来,不满足规则将隐藏
# LIKE 关键字可以进行模糊查询
# 通配符: %代表任意多个字符(可以是0可以是n) _代表任意一个字符(有且只有一个)
# 格式: select 列名 from 表名 where 字段 like '规则';
# 需求:查询名字以"斯"结尾的所有商品
SELECT * FROM product WHERE pname LIKE '%斯';
# 需求,查询名字以"海"开头的所有商品
SELECT * FROM product WHERE pname LIKE '海%';
# 需求:查询名字中带有"霸"的所有商品
SELECT * FROM product WHERE pname LIKE '%霸%';
# 需求:查询名字是两个字的所有商品
SELECT * FROM product WHERE pname LIKE '__';
# 查询名字是三个字符,且结尾为斯的商品信息
SELECT * FROM product WHERE pname LIKE '__斯';
# 字符: 每一个符号,或者文字,占用一个字符
# 字节: 空间单位,每个符号或者文字占用的字节数不相同,比如 a b 占用一个字节 汉字 占用三个字节
# char varchar 后边的括号内填写的是字符数
4、非空查询
- is null 判断是否为空
- is not null 判断是否不为空
- 格式: select 列名 from 表名 where 字段名 is (not) null;
# 我们怎样判断空值?
# 格式:select 列名 from 表名 where 字段名 is null;(筛选出字段为空的记录)
# 格式:select 列名 from 表名 where 字段名 is not null;(筛选出字段不为空的记录)
# 需求: 删除pid =10 的category_id 的值
UPDATE product SET category_id = NULL WHERE pid = 10;
# 需求: 查询所有商品中,category_id为空的商品
# null 是不能和其他数据类型进行比较的
# 如果需要判断当前数据是否为空值,则使用is null判断
SELECT * FROM product WHERE category_id IS NULL;
# 需求:查询所有商品中category_id不为空的商品
SELECT * FROM product WHERE category_id IS NOT NULL;
SELECT * FROM product WHERE NOT (category_id IS NULL);
# 查询所有商品中category_id为空 且 pname 不为空的商品(加上括号易于阅读,并且不容易出错)
SELECT * FROM product WHERE (category_id IS NULL) AND (pname IS NOT NULL);
5、排序查询
- order by:排序的关键字,可以构建指定字段,指定规则的排序
- 格式: select 列名 from 表名 where 条件 order by 字段名 排序规则(asc 升序、 desc 降序);
- 如果按照多个字段进行排序,先按照排在前边的字段进行排序,如果排序值相同,则按照后边的规则排序。
# 排序查询
# order by
# asc 升序 desc 降序
# 格式: select 类名 from 表名 where 条件 order by 字段名 排序规则(asc/desc)
# 需求:查询所有商品,并按照价格进行排序(降序排列)
SELECT *
FROM
product
ORDER BY
price DESC ;
# 需求:查询所有商品中,价格大于2000的商品并按照升序进行排列.
# 如果需要升序排列,则不需要使用ASC,默认就是升序排列
SELECT * FROM product WHERE price > 2000 ORDER BY price ASC;
# 可不可以对两个字段进行排序呢?
# 按照多个字段规则进行排序,则先按照最前面的规则排序,如果排序过程中,值相同,则按照后边的规则进行排序
# 需求:按照categroy_id进行升序排列,如果categroy_id相同,则按照价格进行降序排列
SELECT * FROM product ORDER BY category_id ASC , price DESC ;
# 需求:按照价格进行降序排列,如果价格相同,则按照category_id进行升序排列
SELECT * FROM product ORDER BY price DESC , category_id;
# 文本型数据排序规则
# 没有数据 < 有数据
# 排序按照编码表顺序排序 排在前边的小 排在后边的大 0-9依次递增 < A-Z 依次递增 < a - z 依次等
# 文本型数据比较大小按位比较,第一位进行比较如果值大则大,值小则小,如果相同,则比较第二位
# '9' >'20'
# '小2' > '99999999'
# 'a' > 'Z'