查询方法

162 阅读3分钟

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'