【MySQL进阶之路】数据的查询

目录

建表

全列查询

指定列查询

查询表达式

指定别名

结果去重

WHERE 条件查询

模糊查询

结果排序

筛选分页结果

不同子句的执行顺序


个人主页:东洛的克莱斯韦克-CSDN博客

建表

CREATE TABLE grades(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL COMMENT '同学姓名',
chinese float DEFAULT 0.0 COMMENT '语文成绩',
math float DEFAULT 0.0 COMMENT '数学成绩',
english float DEFAULT 0.0 COMMENT '英语成绩'
);

插入数据

insert into grades values(1,'李明',24,88,31),(2,'李华',89,48,71),(4,'刘洺关',87,99,58),(5,'张嘉译',45,77,92),(6,'孙志涛',93,57,88),(7,'张三丰',58,87,23),(8,'王水',99,99,98);
insert into grades values(9,'周明',45,88,93),(10,'张三', 0,0,0),(20,'张昊', 23,56,17);

全列查询

通常情况下不建议使用 * 进行全列查询

1,查询的列越多,意味着需要传输的数据量越大

2,可能会影响到索引的使用

select * from 表名;
select * from grades;

指定列查询

 select 列名 from 表名;
 select name ,math from grades;

列名之间要有 , 号隔开

查询表达式

示例一

select name, math, 10 from grades;

示例二

select name, english + 100 from grades;

示例三

select name, math + english from grades;

指定别名

select 原名称 as 别名 from 表名;
select 原名称 别名 from 表名;
select name, math+english as '数学和英语成绩' from grades;

结果去重

select distinct 列名 from 表名;
select distinct math from grades;

WHERE 条件查询

运算符说明
>大于
>=大于等于
<小于
<=小于等于
=等于
NULL 不安全例如 NULL=NULL 的结果是 NULL
<=>等于(NULL 安全)
!=不等于
<>不等于
BETWEEN a0 AND a1范围匹配,[a0,a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, ...)如果是 option 中的任意一个,返回 TRUE(1)
IS NULL是 NULL
IS NOT NULL不是 NULL
LIKE模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符
逻辑运算符
AND多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR任意一个条件为 TRUE(1),结果为 TRUE(1)
NOT条件为 TRUE(1),结果为 FALSE(0)

示例

查询英语成绩小于60的人

select name,english from grades where english<60;

查询语文成绩在80到90之间的人,用and逻辑条件链接

select name, chinese from grades where chinese>80 and chinese<90;

数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩,用 in() 条件

select name,chinese from grades where math in(58,59,98,99);

模糊查询

% 匹配任意多个(包括 0 个)任意字符

select name from grades where name like '张%';

_ 匹配严格的一个任意字符

select name from grades where name like '张_';

select name from grades where name like '张__';

WHERE 条件中比较运算符两侧都是字段,语文成绩好于英语成绩的同学

select name, chinese, english from grades where chinese > english;

结果排序

ORDER BY 子句的查询, ASC 为升序(从小到大) DESC 为降序(从大到小) 默认为 ASC

同学及数学成绩,按数学成绩升序显示

select name, math from grades order by math asc;

多字段排序,排序优先级随书写顺序,查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示

select * from grades order by math desc, english desc, chinese desc;

ORDER BY 中可以使用表达式,查询同学及总分,由高到低

select name, chinese+math+english as '总成绩' from grades order  by chinese+math+english  desc;

ORDER BY 子句中可以使用列别名

select name, chinese+math+english as '总成绩' from grades order  by '总成绩'  desc;

结合 WHERE 子句 和 ORDER BY 子句,查询姓张的同学数学成绩,结果按数学成绩由高到低显示

select name, math '数学成绩' from grades where name like '张%' order by math desc;

筛选分页结果

起始下标为 0 -- 从 s 开始,筛选 n 条结果

SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n

从 0 开始,筛选 n 条结果

SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n; 

 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用

SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死

不同子句的执行顺序

顺序子句/操作描述
1FROM查询执行的起点,根据FROM子句中指定的表(或视图)和可能的连接条件来检索数据。
2WHERE应用WHERE子句中的条件来过滤掉FROM子句结果中的行,发生在任何聚合操作之前。
3GROUP BY (如果存在)将剩余的行根据GROUP BY子句中指定的列进行分组。
4聚合函数对每个组(或整个结果集,如果没有GROUP BY)应用聚合函数,如COUNT(), SUM(), AVG()等。
5HAVING (如果存在)过滤分组后的结果,类似于WHERE子句,但HAVING在分组和聚合之后应用,可以引用聚合函数的结果。
6SELECT根据SELECT子句中的列名、表达式和聚合函数来构造最终的输出列。
7DISTINCT (如果使用了)去除结果集中的重复行。
8ORDER BY根据ORDER BY子句中的列名或表达式对结果集进行排序,发生在查询处理的最后阶段,仅影响最终结果的显示顺序。
9LIMIT 和 OFFSET (如果存在)限制返回给客户端的行数,LIMIT指定最大返回行数,OFFSET指定在开始返回行之前要跳过的行数。这些子句在查询处理的最后阶段应用。
  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值