MySQL单表查询总结

目录

一.where

1.模糊查询

2.关系运算符

3.逻辑运算符

4.in

5.is null/is not null

6.between and

二.排序

三.聚合函数、分组

1.聚合函数

2.分组

四.having

五.单行函数


本篇中的查询操作均使用以下创建的这个student表:

create table student(
    id char(36) primary key,
    name varchar(8) not null,
    age int(3) default 0,
    mobile char(11),
    address varchar(150)
);
insert into student
values ('9b4435ec-372c-456a-b287-e3c5aa23dff4','张三',24,'12345678901','北京海淀');
insert into student
values ('a273ea66-0a42-48d2-a17b-388a2feea244','李%四',10,'98765432130',null);
insert into student
values ('eb0a220a-60ae-47b6-9e6d-a901da9fe355','张李三',11,'18338945560','安徽六安');
insert into student
values ('6ab71673-9502-44ba-8db0-7f625f17a67d','王_五',28,'98765432130','北京朝阳区');
insert into student
values ('0055d61c-eb51-4696-b2da-506e81c3f566','王_五%%',11,'13856901237','吉林省长春市宽平区');

一.where

1.模糊查询

where最常规的用法就是精确查询:where 目标字段=‘目标值’

当不知道目标的确切值的时候,可以使用where的模糊查询,以下是模糊查询的用法:

select * from student where name like '王%';

 注意:%代表匹配一次或多次,_必须匹配一次,也就是说%意味着“王”后面可以有多个字符,如果用_意味着“王”后面只能有一个字符。

但如果要查找的字符为%或_时,就需要使用escape:

select * from student where name like '%A%%' escape 'A';

其中,在%前随意加一个字符,然后在模糊查询的后面加上escape  ‘该字符’ 

2.关系运算符

和编程语言一样,where不只可以使用=,还可以使用<=,>=,<,>:

select * from student where age >= 11;

 

3.逻辑运算符

and、or、not:

select * from student where age >= 11 and address like '北京%';

4.in

in(a,b)意味着查询该字段的值为a或b其中一个的数据:

select * from student where age in(28,24);

它等价于:

select * from student where age =28 or age=24;

 

5.is null/is not null

is null是查询某字段为空的字段,is not null是查询某字段不为空的字段:

select * from student where address is not null;

6.between and

between and用于查询某字段的值在此区间中的数据:

select * from student where age between 11 and 28;

这里要注意一点:between and中必须是小数据在前,大数据在后,否则不会查出任何结果。 

二.排序

对表中的数据按某一字段进行排序,使用order by语句:

select * from student order by age;

我们可以看到查询出来的该表是以升序排的,因为order by语句默认在后面有一个asc,是升序,而如果想降序排列,则需在后面手动加上desc:

select * from student order by age desc;

 

 order by还可以对多个字段进行排序,规则是先对第一个字段进行排序,当第一个字段中出现相同的值的时候,再以第二个字段进行排序,以此类推:

select * from student order by age asc,mobile desc;

当被排序的字段是字符串的时候,则排序规则是以ASC码的顺序靠前的为小,靠后的为大:

select * from student order by name asc;

 

但是我们可以看到结果并没有按照name字段的顺序排, 这是因为对汉字排序时要加上如下的语句:

select * from student order by convert(name USING gbk) asc;

 

三.聚合函数、分组

1.聚合函数

聚合函数,就是对表中的多行数据进行操作的函数,介绍几种比较常用的聚合函数:

①count()

count函数用来统计某字段共含有的列数:

select count(id) from student;

②sum()

sum函数用来计算某字段的所有值的加和:

select sum(age) from student;

 

③avg()

avg函数用来计算某字段所有值的平均值:

select avg(age) age from student;

它等价于:

select sum(age)/count(id) as age from student;

 

④max()min()

这两个函数就是用来取某字段的最大值和最小值的:

select max(age),min(age)from student;

2.分组

group by语句用于分组,且常和聚合函数一起使用,将被分组的字段相同的分为一组,聚合函数可以对其做相应的统计:

select age,count(id) from student group by age;

 这里要注意一点,如果使用group by,则select字段列表只能是聚合函数或者分组字段,因为其余的字段并没有进行分组操作,会造成数据的丢失或混乱:

select name,age,count(id) from student group by age;

 

四.having

having和where的作用很相似,但having后面接的只能是聚合函数语句:

select age,count(id) from student group by age having count(id)>1;

 

where和having的区别见博客: MySQL数据库中where、having、order by、group by

五.单行函数

单行函数用来对单行数据进行一系列操作,各行数据之间是不相关的。

1.length()

length函数用来求某一字段的字符串存储长度,其中汉字是占三个单位长度,符号占一个单位长度:

select name,length(name) from student;	

 

该函数还有一个衍生函数就是求某一字段的字符串的字符个数:

select name,char_length(name) from student;

 

2.concat()

concat函数用于将字段拼接,用法如下,但是当参数列表中的字段有字段的值为null,则改行的拼接结果即为null:

select concat(id,',',name,',',mobile,',',address) as info from student;

 

该函数还有一个衍生函数就是当拼接的时候要在相邻两个字段中加入某一符号时,可以简化拼接过程的函数,而且就算参数列表中有字段的值为null,查询结果还是会把该行中其他字段的值打印出来:

select concat_ws(',',id,name,mobile,address) info from student;

 

3.trim()

trim函数的作用就是将字段值中两端的空格去掉。假如将表中数据的张三前面加上五个空格,如下:

这时使用trim函数:

select trim(name) from student;

4.substr()

substr函数用于截取字符串,如果函数中传入两个参数,则第一个参数指定截取的字段,第二个参数指定从第几个字符开始截取:

select substr(name,2) from student;

 

如果函数中出入三个参数,则第三个参数指定一共截取几个字符:

select substr(name,2,1) from student;

 

5.replace

replace用于对目标字段的字符串做替换,用法如下,将所有字符串中的所有‘_’替换成‘1’:

select replace(name,'_','1') from student;

6.reverse

reverse函数作用是将字符串变为倒序的:

select name,reverse(name) from student;

 

7.strcmp

和c语言中的strcmp函数一样,用于比较两个字符串的大小,比较规则依旧是ASC码:

select strcmp('a','b');

 

8.mod

因为%已经用于模糊查询中匹配字符了,所以取余数便使用mod函数:

select mod(1,2);

9.round

 round函数用于对小数进行四舍五入,如果传入一个参数则默认保留整数部分:

select round(1.928);

 传入两个参数则第二个参数代表保留到小数点后第n位:

select round(1.928,2);

 

10.truncate

truncate函数用于将小数截断,第二个参数传入0代表截断到整数部分:

select truncate(1.99,0);

11.date_format

date_format用于将时间类型的数据按指定格式打印出来:

select date_format(now(),'%Y%M%D');

该函数的应用见博客: 

12.datediff

datediff函数用于查询当天的日期距参数中的日期的天数:

select datediff(now(),'2019-8-4');

13.timediff

与datediff函数功能类似,但是该函数是用来算精确时间差的:

select timediff(now(),'2019-8-16 16.04')

14.convert

 convert函数用于将时间类型数据转为指定类型的数据,可以为char(取时间的位数),date,datetime等:

select convert(now(),char(10));
select convert(now(),date);
select convert(now(),datetime);

15.if(,,)

该函数的功能类似于三目运算符:

select id,name,mobile,if(address is null,'未知',address) from student;

 

当替换的目标字段的值为null时,还可以使用if的简化版的衍生函数:

select id,name,mobile,ifnull(address,'未知') from student;

16.distinct

distinct用于查询目标字段不包含重复的值:

select distinct age from student;

还有一点就是,如果distinct后面跟多个字段,则必须要这些字段的值都相同才算重复。 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习MySQL单表查询和多表查询时,可以按照以下实验步骤进行: 1. 准备数据库和表:首先,创建一个数据库,并在其中创建需要的表用于实验。可以使用MySQL的命令行工具或图形化界面工具(如phpMyAdmin)进行创建。 2. 插入测试数据:在创建的表中插入一些测试数据,用于后续的查询操作。确保数据量足够,能够涵盖各种查询场景。 3. 单表查询实验: - 使用SELECT语句,检索整个表中的数据。 - 使用WHERE子句,根据条件筛选数据。 - 使用ORDER BY子句,按照特定的列对结果进行排序。 - 使用LIMIT子句,限制返回的记录数量。 - 使用聚合函数(如COUNT、SUM、AVG)和GROUP BY子句,进行分组查询和统计操作。 - 使用子查询,嵌套其他查询语句进行更复杂的筛选和查询操作。 4. 多表查询实验: - 使用INNER JOIN操作,连接两个表,并检索相关联的数据。 - 使用ON条件,指定连接两个表的关联条件。 - 尝试使用LEFT JOIN、RIGHT JOIN和FULL JOIN等其他类型的JOIN操作。 - 使用别名为表和列指定简化的名称。 - 实践使用子查询进行多表查询和相关操作。 5. 组合查询实验:尝试将单表查询和多表查询结合起来,构建更复杂的查询语句。使用UNION、UNION ALL、INTERSECT和EXCEPT等操作符进行数据集合操作。 6. 进行性能测试和优化:对实验过程中的查询语句进行性能测试,并尝试优化查询性能,如添加索引、调整JOIN操作顺序等。 7. 总结和复习:对实验过程中的查询语句和结果进行总结和复习,思考不同查询方式的适用场景和优缺点。 通过以上实验步骤,你可以在实践中掌握MySQL单表查询和多表查询的基本技能。不断练习和尝试不同的查询场景,将帮助你深入理解查询语句的语法和用法,并提升你在MySQL查询方面的技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值