DQL,Data Query Language,数据查询语言。本节介绍简单的查询及运算。介绍基本概念、查询的语法格式,并举一个例子来说明如何查询数据库

基本概念

  • 数据库管理系统一个重要功能就是数据查询,数据查询不应只是简单返回数据库中存储的数据,还应该根据需要对数据进行筛选以及确定数据以什么样的格式显示。

  • MySQL提供了功能强大、灵活的语句来实现这些操作。

  • MySQL数据库使用select语句来查询数据。

语法格式

select 
  [all|distinct]
  <目标列的表达式1> [别名],
  <目标列的表达式2> [别名]...
from <表名或视图名> [别名],<表名或视图名> [别名]...
[where<条件表达式>]
[group by <列名> 
[having <条件表达式>]]
[order by <列名> [asc|desc]]
[limit <数字或者列表>];

简化版:

select *| 列名 from 表 where 条件

数据准备

use mydb1;
-- 创建商品表:
create table product(
 pid int primary key auto_increment, -- 商品编号
 pname varchar(20) not null , -- 商品名字
 price double,  -- 商品价格
 category_id varchar(20) -- 商品所属分类
);
-- 添加数据
insert into product values(null,'海尔洗衣机',5000,'c001');
insert into product values(null,'美的冰箱',3000,'c001');
insert into product values(null,'格力空调',5000,'c001');
insert into product values(null,'九阳电饭煲',200,'c001' );

insert into product values(null,'啄木鸟衬衣',300,'c002');
insert into product values(null,'恒源祥西裤',800,'c002');
insert into product values(null,'花花公子夹克',440,'c002');
insert into product values(null,'劲霸休闲裤',266,'c002');
insert into product values(null,'海澜之家卫衣',180,'c002');
insert into product values(null,'杰克琼斯运动裤',430,'c002');

insert into product values(null,'雅诗兰黛精华水',200,'c003');
insert into product values(null,'香奈儿香水',350,'c003');
insert into product values(null,'SK-II神仙水',350,'c003');
insert into product values(null,'资生堂粉底液',180,'c003');
 
insert into product values(null,'老北京方便面',56,'c004');
insert into product values(null,'良品铺子海带丝',17,'c004');
insert into product values(null,'三只松鼠坚果',88,null);

创建数据结果

简单查询

简单查询就是不需要使用条件。

-- 1.查询所有的商品.  
select *  from product;
-- 2.查询商品名和商品价格. 
select pname,price from product;
-- 3.别名查询.使用的关键字是as(as可以省略的).  
-- 3.1表别名: 
select * from product as p;
-- 3.2列别名:
select pname as pn from product; 
-- 4.去掉重复值.  
select distinct price from product;
-- 5.查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.
select pname,price+10 from product;

案例:

use mydb1;
-- 创建商品表:
create table product(
 pid int primary key auto_increment, -- 商品编号
 pname varchar(20) not null , -- 商品名字
 price double,  -- 商品价格
 category_id varchar(20) -- 商品所属分类
);
-- 添加数据
insert into product values(null,'海尔洗衣机',5000,'c001');
insert into product values(null,'美的冰箱',3000,'c001');
insert into product values(null,'格力空调',5000,'c001');
insert into product values(null,'九阳电饭煲',200,'c001' );

insert into product values(null,'啄木鸟衬衣',300,'c002');
insert into product values(null,'恒源祥西裤',800,'c002');
insert into product values(null,'花花公子夹克',440,'c002');
insert into product values(null,'劲霸休闲裤',266,'c002');
insert into product values(null,'海澜之家卫衣',180,'c002');
insert into product values(null,'杰克琼斯运动裤',430,'c002');

insert into product values(null,'雅诗兰黛精华水',200,'c003');
insert into product values(null,'香奈儿香水',350,'c003');
insert into product values(null,'SK-II神仙水',350,'c003');
insert into product values(null,'资生堂粉底液',180,'c003');
 
insert into product values(null,'老北京方便面',56,'c004');
insert into product values(null,'良品铺子海带丝',17,'c004');
insert into product values(null,'三只松鼠坚果',88,null);

-- 1.查询所有的商品.  
select * from product;   #这里的星号*表示所有的列

-- 2.查询商品名和商品价格. 只显示两列数据  
select pname,price from product;


-- 3.别名查询.使用的关键字是as(as可以省略的).  
    -- 别名在后面多表查询中会用到
        -- 其实就是为了简化,例如python里的import numpy as np

-- 3.1表别名: 
select * from product as p;
-- 或者 select * from product as p;

-- 3.2列别名:
select pname as pn from product; 

-- 4.去掉重复值.  
select distinct price from product;

-- 5.查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.
select pname,price+10 from product;

读者请自行运行。

运算符

数据库中的表结构确立后,表中的数据代表的意义就已经确定。通过MySQL运算符进行运算,就可以获取到表结构以外的另一种数据。

例如,学生表中存在一个birth字段,这个字段表示学生的出生年份。而运用MySQL的算术运算符用当前的年份减学生出生的年份,那么得到的就是这个学生的实际年龄数据。

MySQL支持4种运算符:

  • 算术运算符

  • 比较运算符

  • 逻辑运算

  • 位运算符


算术运算符 说明
+ 加法运算
- 减法运算
***** 乘法运算
/ DIV 除法运算,返回商
% MOD 求余运算,返回余数

比较运算符 说明
= 等于
< <= 小于和小于等于
> >= 大于和大于等于
<=> 安全的等于,两个操作码均为NULL时,其所得值为1;而当一个操作码为NULL时,其所得值为0
<> 或**!=** 不等于
IS NULL ISNULL 判断一个值是否为 NULL
IS NOT NULL 判断一个值是否不为 NULL
LEAST 当有两个或多个参数时,返回最小值
GREATEST 当有两个或多个参数时,返回最大值
BETWEEN AND 判断一个值是否落在两个值之间
IN 判断一个值是IN列表中的任意一个值
NOT IN 判断一个值不是IN列表中的任意一个值
LIKE 通配符匹配
REGEXP 正则表达式匹配

逻辑运算符 说明
NOT 或者 ! 逻辑非
AND 或者 && 逻辑与
OR 或者 || 逻辑或
XOR 逻辑异或

位运算符 说明
| 按位或
& 按位与
^ 按位异或
<< 按位左移
>> 按位右移
~ 按位取反,反转所有比特

用的不多,了解即可,针对二进制进行运算。


运算符实例

use mydb1;
-- 创建商品表:
create table product(
 pid int primary key auto_increment, -- 商品编号
 pname varchar(20) not null , -- 商品名字
 price double,  -- 商品价格
 category_id varchar(20) -- 商品所属分类
);
-- 添加数据
insert into product values(null,'海尔洗衣机',5000,'c001');
insert into product values(null,'美的冰箱',3000,'c001');
insert into product values(null,'格力空调',5000,'c001');
insert into product values(null,'九阳电饭煲',200,'c001' );

insert into product values(null,'啄木鸟衬衣',300,'c002');
insert into product values(null,'恒源祥西裤',800,'c002');
insert into product values(null,'花花公子夹克',440,'c002');
insert into product values(null,'劲霸休闲裤',266,'c002');
insert into product values(null,'海澜之家卫衣',180,'c002');
insert into product values(null,'杰克琼斯运动裤',430,'c002');

insert into product values(null,'雅诗兰黛精华水',200,'c003');
insert into product values(null,'香奈儿香水',350,'c003');
insert into product values(null,'SK-II神仙水',350,'c003');
insert into product values(null,'资生堂粉底液',180,'c003');
 
insert into product values(null,'老北京方便面',56,'c004');
insert into product values(null,'良品铺子海带丝',17,'c004');
insert into product values(null,'三只松鼠坚果',88,null);

-- 1.查询所有的商品.  
select * from product;   #这里的星号*表示所有的列

-- 2.查询商品名和商品价格. 只显示两列数据  
select pname,price from product;


-- 3.别名查询.使用的关键字是as(as可以省略的).  
    -- 别名在后面多表查询中会用到
        -- 其实就是为了简化,例如python里的import numpy as np

-- 3.1表别名: 
select * from product as p;
-- 或者 select * from product as p;

-- 3.2列别名:
select pname as pn from product; 

-- 4.去掉重复值.  
select distinct price from product;

-- 5.查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.
select pname,price+10 from product;

-- 运算符
   -- 算数运算符
select 6 + 2 ;  # 结果为8
select 6 - 2 ;  # 结果为4
select 6 * 2 ;  # 结果为12
select 6 / 2 ;  # 结果为3
select 6 % 2 ;  # 结果为0,因为正好整除

     -- 将所有的商品的价格增加10
select pname,price+10 as new_price from product;
     -- 将所有的商品的价格增加10*
select pname,price*1.1 as new_price from product;

    -- 比较运算符及逻辑运算符
       -- 查询“海尔洗衣机”商品所有的信息
select * from product where pname = '海尔洗衣机';
     -- 查询价格为800的所有商品
select * from product where price = 800;
     -- 查询价格不为800的所有商品
select * from product where price != 800;   
# 或者 select * from product where price<>800; 
# 或者 select * from product where not (price=800); 
     -- 查询价格大于等于3000的所有商品
select * from product where price >= 3000;   
     -- 查询价格200~1000的所有商品
select * from product where price between 200 and 1000;   
     -- 查询商品价格是200,300,及800的所有商品
select * from product where price in(200,300,800);   
# 或者 select * from product where price=200 or price=300 or price=800;   

     -- 查询含有“裤”字的所有商品
select * from product where pname like '%裤%';  # %裤% 表示 pname里只要含有“裤”就行
     -- 查询“海”字开头的所有商品
select * from product where pname like '海%';   # 海% 表示“海”字开头的所有商品
     -- 查询第二个字为“寇”的所有商品
select * from product where pname like '_寇%';   # _下划线表示单个字符,提现了寇是第二个字

   -- 查询category_id为null的商品
select * from product where category_id is null;  # 注意null不能用=,要用is
   -- 查询category_id不为null的商品
select * from product where category_id is not null;  # 注意null不能用!=,要用is not


-- 使用least求最小值
select least(10, 20, 30);
 -- null,求最小值时,有个值为null,不会进行比较,结果直接为null
select least(10, null , 30); 
 
-- 使用greatest求最大值
select greatest(10, 90, 30);
  -- null,求最小值时,有个值为null,不会进行比较,结果直接为null
select greatest(10, null, 30); 
 

-- 位运算(了解即可)
select 3&5;
# 0011+0101 = 0001 ,位与,同时1相加才为1,结果为1

select 3|5; 
#0011+0101 = 0111,位或,有1相加就为1,结果为7

select 3^5; 
#0011+0101 = 0110,位异或,相同为0,不同为1,结果为9

select 3>>1;
# 位右移 0011整体右移,变为0001

select 3<<1; 
# 位左移 0011整体左移,变为0110

select ~3; 
# 位取反

运行结果请读者自行为Navicat中使用。


声明:内容来源于B站视频《2022黑马程序员最新MySQL知识精讲+mysql实战案例_零基础mysql数据库入门到高级全套教程》,博客内容仅作学习参考使用。



博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/mysql10.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 06 月 05 日
如果觉得我的文章对你有用,请随意赞赏