DQL之简单查询
-- 0. 数据准备
-- 创建数据库
DROP DATABASE IF EXISTS bigdata_db;
CREATE DATABASE IF NOT EXISTS bigdata_db CHARSET = utf8;
USE bigdata_db;
-- 创建商品表:
CREATE TABLE IF NOT EXISTS product
(
pid INT PRIMARY KEY,
pname VARCHAR(20),
price DOUBLE,
category_id VARCHAR(32)
);
-- 插入数据
INSERT INTO product(pid, pname, price, category_id)
VALUES (1, '联想', 5000, 'c001');
INSERT INTO product(pid, pname, price, category_id)
VALUES (2, '海尔', 3000, 'c001');
INSERT INTO product(pid, pname, price, category_id)
VALUES (3, '雷神', 5000, 'c001');
INSERT INTO product(pid, pname, price, category_id)
VALUES (4, '杰克琼斯', 800, 'c002');
INSERT INTO product(pid, pname, price, category_id)
VALUES (5, '真维斯', 200, 'c002');
INSERT INTO product(pid, pname, price, category_id)
VALUES (6, '花花公子', 440, 'c002');
INSERT INTO product(pid, pname, price, category_id)
VALUES (7, '劲霸', 2000, 'c002');
INSERT INTO product(pid, pname, price, category_id)
VALUES (8, '香奈儿', 800, 'c003');
INSERT INTO product(pid, pname, price, category_id)
VALUES (9, '相宜本草', 200, 'c003');
INSERT INTO product(pid, pname, price, category_id)
VALUES (10, '面霸', 5, 'c003');
INSERT INTO product(pid, pname, price, category_id)
VALUES (11, '好想你枣', 56, 'c004');
INSERT INTO product(pid, pname, price, category_id)
VALUES (12, '香飘飘奶茶', 1, 'c005');
INSERT INTO product(pid, pname, price, category_id)
VALUES (13, '海澜之家', 1, 'c002');
-- 1. 查看表中所有的数据内容
-- 格式: select * from 表名;
SELECT *
FROM
product;
-- 2. 我们可以查询指定的数据列
SELECT
pname,
price
FROM
product;
-- 3. 我们可以在整列数据值的基础上进行计算
SELECT
pname,
price,
price * 0.5
FROM
product;
-- 4. 我们可以在查询时插入常数列
SELECT
pname,
price,
price,
'常数列',
10
FROM
product;
-- 1: 我们在select 后边写什么, 就查询到什么, 可以将一个字段输出多次, 也可以不使用.
-- 2: 无论select 后边的数据内容如何变化, 数据条目数始终不变.
-- 3: 无论如何查询, 数据库中的原数据,不会发生任何改变
DQL之条件查询
比较查询
条件查询: 将查询出来的结果,根据一定的规则进行过滤, 满足条件则保留,不满足条件则忽略.
关键字 : where
格式: select 列名1, 列名2.... from 表名 where 条件;
条件表达式的计算结果为布尔类型数据, 如果数据的值为 false 则不成立,数据忽略,如果值为true 则成立,数据保留
1. 比较查询
> 等号左侧的数据大于等号右侧则返回true 否则返回false
< 等号左侧的数据小于等号右侧则返回true 否则返回false
<= 等号左侧的数据小于等于等号右侧则返回true 否则返回false
>= 等号左侧的数据大于等于等号右侧则返回true 否则返回false
= 等号左右两侧的数据相等则返回true, 否则返回false
!= 或 <> 等号左右两侧的数据不相等则返回true, 否则返回false
在sql中 0 = false 1 = true
SELECT 2 > 3; -- 0
SELECT 0 = FALSE;
-- 等价
-- 需求1: 获取所有商品中,商品价格大于600 的商品信息
SELECT *
FROM product
WHERE price > 600;
-- 需求2: 获取所有商品中,商品价格小于等于800的商品价格和商品名称
SELECT pname, price FROM product WHERE price <= 800;
-- 需求3: 获取所有商品中商品类别为c001的商品信息
SELECT * FROM product WHERE category_id = 'c001';
-- 需求4: 获取所有商品中商品类别不为c002的商品id 和商品价格
SELECT category_id,pid,price FROM product WHERE category_id != 'c002';
SELECT category_id,pid,price FROM product WHERE category_id <> 'c002';
范围查询
2. 范围查询
2.1 连续范围查询 : 在连续范围内,任意数值均会使条件成立
关键字: between ... and ...
-- 需求1: 查询所有商品中, 价格区间在800-2000范围内的商品信息
-- 注意: 该取值范围包含边界值, 800 和 2000 都包含在内
SELECT *
FROM product
WHERE price BETWEEN 800 AND 2000;
-- 在使用between and 时要注意,保证前边的数值小于后边的数值, 否则将没有任何数据被筛选出来
SELECT *
FROM product
WHERE price BETWEEN 2000 AND 800;
-- 为空
-- 2.2 非连续范围查询 : 仅在多个取值中,进行判断,如果等于其中任何一个值,则条件成立
-- 关键字 : in
-- 需求2: 查询所有商品中, 价格为 1 200 800 的商品信息
SELECT *
FROM product
WHERE price IN (1, 200, 800);
模糊查询
3. 模糊查询
就是根据一定的规则筛选符合规则的字符信息, 如果符合规则, 则返回true, 否则返回false
格式: select 列名... from 表名 where 字段 like '规则';
关键字: like
规则: % 代表任意多个任意字符, 可以为0个, _ 代表一个任意字符.
/*举例: 如果想获取姓张的同学信息, 则需要设置的规则为 张% , 如果想获取两个字的姓张的同学
规则为 张_*/
-- 需求1: 查询名字以"香"开头的商品全部信息
SELECT * FROM product WHERE pname LIKE '香%';
-- 需求2: 查询名字以香开头, 且名字是3个字符的商品等信息
SELECT * FROM product WHERE pname LIKE '香__';
-- 需求3: 查询所有商品中,商品名称为4个字的商品信息
SELECT * FROM product WHERE pname LIKE '____';
-- 需求4: 查询所有商品中,商品名称中带有'霸'字的商品信息
SELECT * FROM product WHERE pname LIKE '%霸%';
-- 注意: like查询时效率较低, 我们开发中很少用
非空查询
4.非空查询
is null 判断指定字段的值是否为空, 如果为空则返回true 否则返回 false
is not null 判断指定字段的值是否为空, 如果为空则返回false 否则返回 true
-- 由于我们模拟数据中, 没有空值信息, 所以我们添加一个空值.
UPDATE product
SET
price = NULL
WHERE
pid = 13;
-- 验证数据是否修改成功
SELECT *
FROM
product;
-- 前置知识: null 参与的任何计算, 结果都为null
SELECT 1 + NULL;
SELECT 2 * NULL;
SELECT 3 > NULL;
SELECT 3 != NULL;
SELECT NULL != NULL;
-- 需求1: 获取所有商品中 价格不为空的商品信息
-- SELECT * FROM product WHERE price != NULL;
SELECT *
FROM
product
WHERE
price IS NOT NULL;
-- 需求2: 获取所有商品中 价格为空的商品信息
SELECT *
FROM
product
WHERE
price IS NULL;
逻辑查询
逻辑查询 : 与 或 非的逻辑关系
关键字 : and or not
-- and 逻辑与 同真即真
-- 举例: 今天我们来教室上课, 同时必须带电脑,才能学会. 上课 and 带电脑
SELECT TRUE AND TRUE;
SELECT FALSE AND TRUE;
SELECT TRUE AND FALSE;
SELECT FALSE AND FALSE;
-- or 逻辑或 同假即假
-- 举例: 今天打车或者坐公交车,都可以来上课 打车 or 坐公交
SELECT TRUE OR TRUE;
SELECT FALSE OR TRUE;
SELECT TRUE OR FALSE;
SELECT FALSE OR FALSE;
-- not 逻辑非 真假互换
-- 举例: 如果今天没有生病 我就去上课 not 生病
SELECT NOT FALSE;
SELECT NOT TRUE;
-- 需求1: 获取所有商品中价格大于200且价格小于等于2000的商品信息
SELECT *
FROM
product
WHERE
price > 200
AND price <= 2000;
-- 需求2: 获取所有商品中,价格大于2000或者价格小于200的全部商品
SELECT *
FROM
product
WHERE
price > 2000
OR price < 200;
-- 需求3: 获取商品中价格不等于 2000的全部商品
SELECT *
FROM
product
WHERE
NOT price = 2000;
-- 需求4: 获取商品中价格不为空的所有商品信息
SELECT *
FROM
product
WHERE
price IS NOT NULL;
SELECT *
FROM
product
WHERE
NOT price IS NULL;