目录
1.别名
2. 单表查询
2.1 模糊查询 - like
2.2 limit
2.3 order by
2.4 group by
2.5 in
2.6 between and
2.6 is null
2.7 not
2.8 运算符
3. 联表查询
全连接
左连接
右连接
本次分享一下数据的DQL语言。
首先分享一下别名的知识。我们在查询的时候可以对字段、表名或查询结果赋值一个别名,赋值别名的时候可以使用关键字AS,此关键字不区分大小写。
现有表机构如下:
CREATE TABLE `t_order` (
`order_id` int(12) NOT NULL AUTO_INCREMENT COMMENT '订单主键',
`money` decimal(10,2) DEFAULT NULL COMMENT '金额',
`good_id` int(12) DEFAULT NULL COMMENT '商品ID',
`good_name` varchar(20) DEFAULT NULL COMMENT '商品名称',
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4
字段起别名如下,以下两种方式即可,如果想规范一些,建议使用as关键字,以下就不再列两种方式,仅展示一种。
-- 方式1
select good_name as goodName from t_order where order_id = 1;
-- 方式2
select good_name goodName from t_order where order_id = 1;
表名起别名如下:
select good_name from t_order as t1 where order_id = 1;
对查询结果起别名
select * from (select good_name from t_order) as t1
语法:
select 字段 from 表名 where 条件
以下的查询较简单,可自行执行尝试,故不再建表,表名以table表示,字段名会比较随意。
通配符:%
表示任意字符。
右模糊,例如查询姓张的人:
select * from table where name like '张%'
左模糊,例如:查询名称最后一个字是帅的人
select * from table where name like '%帅'
通配符: _
表示一个任意的字符。
例如:查询商品名称为2个字,且最后一个字是”子“的商品
select * from t_good where good_name like '_子'
语法:
limit offset, rows
offset 代表偏移量,表示从第几行开始读取数据,mysql的起始偏移量为0
rows 代表返回的行数
查询限制的条件,例如:limit 5,表示查询前5条数据,此处相当于 limit 0,5。
常用于分页处理,程序中也常使用limit 1用于提升性能。
假如:查询第三页数据,每页5条,则为 limit 10,5。
可以记住这个公式:limit (page-1) * pageSize,pageSize,page:页数,pageSize:每页大小。
含义:排序。
order by 排序,默认是正序,例如order by create_time,则为按创建时间正序。
正序关键字:asc,倒序关键字:desc。
示例:奖品有金牌、银牌、铜牌,排名:如果金牌相同,则按银牌排名,如果银牌相同则按铜牌排名。
select * from 获奖表 order by 金牌 desc,银牌 desc, 铜牌 desc
扩展:按指定字段排序
语法:order by FIELD
示例:按order_id字段排序,按order_id值为'1','3','2'依次排序
select * from t_order where order_id in ('1','2','3') order by FIELD(order_id,'1','3','2')
查询结果示例图:
无order by FIELD查询结果示例图:
含义:分组。
示例:学生按性别分组
select sex from student group by sex
注意事项:如果规范一些,那么select 后的字段写分组的字段,不要写其他表中字段,例如:学生姓名。
含义: 在其中,范围关键字。
示例:查询学生姓名是张三和李四的学生信息
select * from student where name in ('张三','李四')
含义:在...之间。
例如:查询订单表中order_id 在10到100之间的数据
select * from t_order where order_id between 10 and 100
含义:是否为空。
示例:查询商品表中商品名称为null的数据
select * from t_good where good_name is null
含义:反向。
例如:not like , not in ,is not null
示例:查询除张三和李四的学生信息
select * from student where name not in ('张三','李四')
运算符:> 、< 、<=、>=、 <>
示例:查询创建时间大于‘2024-01-07 00:00:00’的数据
select * from t_order where create_time > 2024-01-07 00:00:00’
其他的运算符就不示例了。
联表查询主要包括三种:全连接、左连接、右连接
关键词:inner join ..... on 条件
示例:
select t1.*,t2.* from t_order t1 inner join t_good t2 on t1.good_id = t2.good_id
关键词: left join ...... on 条件
以左表连接的表为基础,查询右边表的内容
示例:
select t1.*,t2.* from t_order t1 left join t_good t2 on t1.good_id = t2.good_id
此语句查询到是:所有的订单数据,如果有商品数据则展示,无商品数据则展示为null
关键词: left join ...... on 条件
以右表连接的表为基础,查询左边表的内容
示例:
select t1.*,t2.* from t_order t1 right join t_good t2 on t1.good_id = t2.good_id
此语句查询到是:所有的商品数据,如果有订单数据则展示,无订单数据则展示为null
本次分享至此。