首页 > 数据库 >mysql-单表查询

mysql-单表查询

时间:2023-08-05 23:56:44浏览次数:46  
标签:name -- mysql 查询 单表 fruits id select

-- 单表查询 -- 一、创建查询环境 create table if not exists fruits( f_id varchar(10) not null comment '水果编号', s_id int not null comment '批发商代号', f_name varchar(50) not null comment '水果名称', f_price decimal(8, 2) not null comment '水果价格', primary key(f_id) comment '指定主键' ) comment '水果表'; -- 解释: -- f_id:主键,使用的是char类型的字符来代表主键 -- s_id:这个其实是批发商的编号,也就是代表该水果从哪个批发商那里过来的,写这个字段的目的是为了方便后面扩增表 -- f_name:水果的名字 -- f_price:水果的价格,使用的是decimal这个数据类型   -- 二、添加数据 insert into fruits(f_id, s_id, f_name, f_price) values ('a1', 101, 'apple', 5.2), ('b1', 101, 'blackberry', 10.2), ('bs1', 102, 'orange', 11.2), ('bs2', 105, 'melon', 8.2), ('t1', 102, 'banana', 10.3), ('t2', 102, 'grape', 5.3), ('o2', 103, 'coconut', 9.2), ('c0', 101, 'cherry', 3.2), ('a2', 103, 'apricot', 2.2), ('l2', 104 , 'lemon', 6.4), ('b2', 104 , 'berry', 7.6), ('m1', 106, 'mango', 15.6), ('m2', 105 , 'xbabay', 2.6), ('t4', 107, 'xbababa', 3.6), ('m3', 105 , 'xxtt', 11.6), ('b5', 107, 'xxxx', 3.6 ); 解释: blackberry:黑莓,melon:甜瓜,grape:葡萄,coconut:椰子,cherry:樱桃,apricot:杏子,berry:浆果,mango:芒果   -- 1.查询所有字段 select * from fruits; -- 解释:*代表所有字段,也就是从表中将所有字段下面的记录查询出来

-- 2.查询指定字段 -- 查询f_name和f_price字段的记录 select f_name, f_price from fruits;

-- 3.查询指定记录 -- 指定记录:也就是按条件进行查询,将满足条件的记录给查询出来,使用where关键字 select * from fruits where f_name = 'apple';//将名为apple的记录的所有信息都查询出来

select * from fruits where f_price > 15;//将价格大于15的记录的所有字段都查询出来

-- 4.带in关键字的查询 -- in关键字:in(xx, yy, ...)满足条件范围内的一个值即为匹配项 select * from fruits where f_name in('apple', 'orange');//f_name为apple或者orange的记录

select * from fruits where s_id in(101, 105);//s_id为101或者105的记录

select * from fruits where s_id not in(101, 105);//s_id不为101或者105的记录

-- 5.还between and 的范围查询 -- bewteen... and ...:在...到...范围内的值即为匹配项 select * from fruits where f_price between 5 and 15;//f_price在5到15之间,包括5和15

select * from fruits whete f_price not between 5 and 15;//f_price不在5到15之间

-- 6.带like的字符匹配查询 -- like:相当于模糊查询,和like一起使用的通配符有“%”、“_” -- “%”:作用是能匹配任意长度的字符 -- “_":只能匹配任意一个字符 select * from fruits where f_name like 'b%';//f_name以b字母开头的所有记录

select * from fruits where f_name like 'b%y';//f_name以字母b开头、以字母y结尾的所有记录

select * from fruits where f_name like'____y';//此处有四个_,说明要查询以y字母结尾并且y之前只有四个字符的记录

-- 总结:‘%’和‘_’可以在任意位置使用,只需要记住'%'能够表示任意个字符,'_'只能表示一个任意字符   -- 7.查询空值 -- 空值不是指为空字符串""或者0,一般表示数据未知或者在以后再添加数据,也就是在添加数据时,其字段默认为null,也就是说,如果该字段上不插入任何值,就为null,此时就可以查询出来 -- select * from 表名 where 字段名 is null;//查询字段名是null的记录 -- select * from 表名 where 字段名 is not null;//查询字段名不是null的记录   -- 8.带and的多条件查询 -- and:相当于逻辑”与“,也就是说要同时满足条件才算匹配 select * from fruits where s_id = 101 and f_price > 5;//同时满足s_id=101、f_price>5这两个条件才算匹配

-- 9.带or的多条件查询 or:相当于逻辑”或“,也就是说只要满足其中一个条件,就算匹配上了,跟in关键字效果差不多 select * from fruits where s_id = 101 or f_ price > 10;//s_id=101或者f_price>10,只要符合其中一个条件,就算匹配

-- 可以看到,查询出来的记录,f_price有低于10的,那么其肯定s_id=101,s_id不等于101的,其f_price肯定大于10,这就说明了OR的效果。只要满足其中一个条件,就算匹配   -- 10.关键字distinct(查询结果不重复) select s_id from fruits;//查询所有的s_id,会出现很多重复的值

-- 使用distinct就能消除重复的值 select distinct s_id from fruits;//将重复的值删除后,就只留下7条记录了

-- 11.对查询结果排序(order by) -- 看上面输出的值没有顺序,可以给他们进行排序,使用关键字order by,有两个值供选择:desc降序,asc升序(默认值) select distinct s_id from fruits order by s_id;//默认就是升序

select distinct s_id from fruits order by s_id desc;//使用desc降序,也就是从高到低排列

 

-- 12.分组查询(group by) -- 分组查询很多人不知道什么意思,一开始我也是很蒙圈的,所以没关系,一起来看看。 -- 分组查询就是将相同的东西分到一个组里面去,现实生活中举个例子,厕所分男女,这也是一个分组的应用,在还没有分男女厕所前,大家度共用厕所,后面通过分男女性别,男的跟男的分为一组,女的和女的分为一组,就这样分为了男女厕所了。这就是分组的意思, 在上面对s_id进行查询的时候,发现很多重复的值,我们也就可以对它进行分组,将相同的值分为一组 select s_id from fruits group by s_id;//将s_id进行分组,有实际意义,按批发商进行分组,从101批发商这里拿的水果都会放在101这个组中

-- 解释:将s_id分组后,就没有重复的值了,因为重复的都被分到一个组中去了,现在再来看看每个组中有多少个值   select s_id, count(f_name), group_concat(f_name) from fruits group by s_id;

-- 解释:COUNT():这个是下面要讲解到的一个函数,作用就是计算有多少条记录   -- GROUP_CONCAT(): 将分组中的各个字段的值显示出来 select s_id, count(f_name), group_concat(f_name), group_concat(f_price) from fruits group by s_id;

-- 分组之后还可以进行条件过滤,将不想要的分组丢弃,使用关键字having select s_id, count(f_name), group_concat(f_name) from fruits group by s_id having count(f_name) > 1;//他能够通过s_id分组,然后过滤出水果种类大于1的分组信息

-- 总结:知道GROUP BY的意义,并且会使用HAVING对分组进行过滤, HAVING和WHERE都是进行条件过滤的,区别就在于 WHERE 是在分组之前进行过滤,而HAVING是在分组之后进行条件过滤   -- 13.使用limit限制查询结果的数量 -- limit(位置偏移量)行数,通过limit可以选择数据库表中的任意行数,也就是不用从第一条记录开始遍历,可以直接拿到第5条到第10条的记录,也可以直接拿到第12条到第15条的记录,具体看下面的例子: select * from fruits limit 4;//没有写位置偏移量,默认就是0,也就是从第一条开始,往后取4条数据,也就是取了第1条数据到第4条数据

select * from fruits limit 4, 3;//从第5条数据开始,往后取3条数据,也就是从第5条到第8条

-- 注意:limit的第一个参数如果不写,默认就是0,也就是说,第一条记录的索引是0,从0开始的,第二个参数的意思是取多少行的记录,需要这两个才能确定一个取记录的范围   -- 三、聚合函数查询 -- 1.count()函数 -- 这个函数在上面其实用过,作用是统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数, -- COUNT(*):计算表中的总的行数,不管某列有数值或者为空值,因为*就是代表查询表中所有的数据行 -- COUNT(字段名):计算该字段名下总的行数,计算时会忽略空值的行,也就是NULL值的行 select count(*) from fruits;

select count(f_name) from fruits;//查询fruits表中f_name字段名下有多少个行数(不包含有空值的行)

-- 2.sum()函数 -- sum()是一个求总和的函数,返回指定列值的总和 select sum(f_price) from fruits;//这个没有实际意义,只是测试sum()函数有求总和的能力

-- 3.avg()函数 -- AVG()函数通过计算返回的行数和每一行数据的和,求的指定列数据的平均值(列数据指的就是字段名下的数据,不要搞不清楚列和行,搞不清就对着一张表搞清楚哪个是列哪个是行),通俗点讲,就是将计算得来的总之除以总的记录数,得出一个平均值 select avg(f_price) from fruits;//计算f_price的平均值

-- 4.max()函数 -- max()返回指定列中的最大值 select max(f_price) from fruits;

-- 5.min()函数 -- min()返回查询列中的最小值 select min(f_price) from fruits;

-- 单表查询-- 一、创建查询环境create table if not exists fruits(f_id varchar(10) not null comment '水果编号',s_id int not null comment '批发商代号',f_name varchar(50) not null comment '水果名称',f_price decimal(8, 2) not null comment '水果价格',primary key(f_id) comment '指定主键') comment '水果表';-- 解释:-- f_id:主键,使用的是char类型的字符来代表主键-- s_id:这个其实是批发商的编号,也就是代表该水果从哪个批发商那里过来的,写这个字段的目的是为了方便后面扩增表-- f_name:水果的名字-- f_price:水果的价格,使用的是decimal这个数据类型
-- 二、添加数据insert into fruits(f_id, s_id, f_name, f_price) values('a1', 101, 'apple', 5.2),('b1', 101, 'blackberry', 10.2),('bs1', 102, 'orange', 11.2),('bs2', 105, 'melon', 8.2),('t1', 102, 'banana', 10.3),('t2', 102, 'grape', 5.3),('o2', 103, 'coconut', 9.2),('c0', 101, 'cherry', 3.2),('a2', 103, 'apricot', 2.2),('l2', 104 , 'lemon', 6.4),('b2', 104 , 'berry', 7.6),('m1', 106, 'mango', 15.6),('m2', 105 , 'xbabay', 2.6),('t4', 107, 'xbababa', 3.6),('m3', 105 , 'xxtt', 11.6),('b5', 107, 'xxxx', 3.6 );解释: blackberry:黑莓,melon:甜瓜,grape:葡萄,coconut:椰子,cherry:樱桃,apricot:杏子,berry:浆果,mango:芒果
-- 1.查询所有字段select * from fruits;-- 解释:*代表所有字段,也就是从表中将所有字段下面的记录查询出来
-- 2.查询指定字段-- 查询f_name和f_price字段的记录select f_name, f_price from fruits;
-- 3.查询指定记录-- 指定记录:也就是按条件进行查询,将满足条件的记录给查询出来,使用where关键字select * from fruits where f_name = 'apple';//将名为apple的记录的所有信息都查询出来select * from fruits where f_price > 15;//将价格大于15的记录的所有字段都查询出来
-- 4.带in关键字的查询-- in关键字:in(xx, yy, ...)满足条件范围内的一个值即为匹配项select * from fruits where f_name in('apple', 'orange');//f_name为apple或者orange的记录select * from fruits where s_id in(101, 105);//s_id为101或者105的记录select * from fruits where s_id not in(101, 105);//s_id不为101或者105的记录
-- 5.还between and 的范围查询-- bewteen... and ...:在...到...范围内的值即为匹配项select * from fruits where f_price between 5 and 15;//f_price在5到15之间,包括5和15select * from fruits whete f_price not between 5 and 15;//f_price不在5到15之间
-- 6.带like的字符匹配查询-- like:相当于模糊查询,和like一起使用的通配符有“%”、“_”-- “%”:作用是能匹配任意长度的字符-- “_":只能匹配任意一个字符select * from fruits where f_name like 'b%';//f_name以b字母开头的所有记录select * from fruits where f_name like 'b%y';//f_name以字母b开头、以字母y结尾的所有记录select * from fruits where f_name like'____y';//此处有四个_,说明要查询以y字母结尾并且y之前只有四个字符的记录-- 总结:‘%’和‘_’可以在任意位置使用,只需要记住'%'能够表示任意个字符,'_'只能表示一个任意字符
-- 7.查询空值-- 空值不是指为空字符串""或者0,一般表示数据未知或者在以后再添加数据,也就是在添加数据时,其字段默认为null,也就是说,如果该字段上不插入任何值,就为null,此时就可以查询出来-- select * from 表名 where 字段名 is null;//查询字段名是null的记录-- select * from 表名 where 字段名 is not null;//查询字段名不是null的记录
-- 8.带and的多条件查询-- and:相当于逻辑”与“,也就是说要同时满足条件才算匹配select * from fruits where s_id = 101 and f_price > 5;//同时满足s_id=101、f_price>5这两个条件才算匹配
-- 9.带or的多条件查询or:相当于逻辑”或“,也就是说只要满足其中一个条件,就算匹配上了,跟in关键字效果差不多select * from fruits where s_id = 101 or f_ price > 10;//s_id=101或者f_price>10,只要符合其中一个条件,就算匹配-- 可以看到,查询出来的记录,f_price有低于10的,那么其肯定s_id=101,s_id不等于101的,其f_price肯定大于10,这就说明了OR的效果。只要满足其中一个条件,就算匹配
-- 10.关键字distinct(查询结果不重复)select s_id from fruits;//查询所有的s_id,会出现很多重复的值-- 使用distinct就能消除重复的值select distinct s_id from fruits;//将重复的值删除后,就只留下7条记录了
-- 11.对查询结果排序(order by)-- 看上面输出的值没有顺序,可以给他们进行排序,使用关键字order by,有两个值供选择:desc降序,asc升序(默认值)select distinct s_id from fruits order by s_id;//默认就是升序select distinct s_id from fruits order by s_id desc;//使用desc降序,也就是从高到低排列
-- 12.分组查询(group by)-- 分组查询很多人不知道什么意思,一开始我也是很蒙圈的,所以没关系,一起来看看。-- 分组查询就是将相同的东西分到一个组里面去,现实生活中举个例子,厕所分男女,这也是一个分组的应用,在还没有分男女厕所前,大家度共用厕所,后面通过分男女性别,男的跟男的分为一组,女的和女的分为一组,就这样分为了男女厕所了。这就是分组的意思, 在上面对s_id进行查询的时候,发现很多重复的值,我们也就可以对它进行分组,将相同的值分为一组select s_id from fruits group by s_id;//将s_id进行分组,有实际意义,按批发商进行分组,从101批发商这里拿的水果都会放在101这个组中-- 解释:将s_id分组后,就没有重复的值了,因为重复的都被分到一个组中去了,现在再来看看每个组中有多少个值select s_id, count(f_name), group_concat(f_name) from fruits group by s_id;-- 解释:COUNT():这个是下面要讲解到的一个函数,作用就是计算有多少条记录-- GROUP_CONCAT(): 将分组中的各个字段的值显示出来select s_id, count(f_name), group_concat(f_name), group_concat(f_price) from fruits group by s_id;-- 分组之后还可以进行条件过滤,将不想要的分组丢弃,使用关键字havingselect s_id, count(f_name), group_concat(f_name) from fruits group by s_id having count(f_name) > 1;//他能够通过s_id分组,然后过滤出水果种类大于1的分组信息-- 总结:知道GROUP BY的意义,并且会使用HAVING对分组进行过滤, HAVING和WHERE都是进行条件过滤的,区别就在于 WHERE 是在分组之前进行过滤,而HAVING是在分组之后进行条件过滤
-- 13.使用limit限制查询结果的数量-- limit(位置偏移量)行数,通过limit可以选择数据库表中的任意行数,也就是不用从第一条记录开始遍历,可以直接拿到第5条到第10条的记录,也可以直接拿到第12条到第15条的记录,具体看下面的例子:select * from fruits limit 4;//没有写位置偏移量,默认就是0,也就是从第一条开始,往后取4条数据,也就是取了第1条数据到第4条数据select * from fruits limit 4, 3;//从第5条数据开始,往后取3条数据,也就是从第5条到第8条-- 注意:limit的第一个参数如果不写,默认就是0,也就是说,第一条记录的索引是0,从0开始的,第二个参数的意思是取多少行的记录,需要这两个才能确定一个取记录的范围
-- 三、聚合函数查询-- 1.count()函数-- 这个函数在上面其实用过,作用是统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数,-- COUNT(*):计算表中的总的行数,不管某列有数值或者为空值,因为*就是代表查询表中所有的数据行-- COUNT(字段名):计算该字段名下总的行数,计算时会忽略空值的行,也就是NULL值的行select count(*) from fruits;select count(f_name) from fruits;//查询fruits表中f_name字段名下有多少个行数(不包含有空值的行)
-- 2.sum()函数-- sum()是一个求总和的函数,返回指定列值的总和select sum(f_price) from fruits;//这个没有实际意义,只是测试sum()函数有求总和的能力
-- 3.avg()函数-- AVG()函数通过计算返回的行数和每一行数据的和,求的指定列数据的平均值(列数据指的就是字段名下的数据,不要搞不清楚列和行,搞不清就对着一张表搞清楚哪个是列哪个是行),通俗点讲,就是将计算得来的总之除以总的记录数,得出一个平均值select avg(f_price) from fruits;//计算f_price的平均值
-- 4.max()函数-- max()返回指定列中的最大值select max(f_price) from fruits;
-- 5.min()函数-- min()返回查询列中的最小值select min(f_price) from fruits;  

标签:name,--,mysql,查询,单表,fruits,id,select
From: https://www.cnblogs.com/k0065/p/17608879.html

相关文章

  • 引用媒体查询的多种方式
    有三种方式引入<linkrel="stylesheet"media="screenand(max-width:375px)"href="index.css"><style>@import"index.css"screenand(max-width:375px),(min-width:600px);</style><style>@media......
  • MySQL学习--索引
    索引的创建有利有弊,创建索引可以提高查询速度,但是过多的索引则会占据许多磁盘空间。因此,在创建索引之前,需要权衡利弊创建索引方式分为手动和自动索引自动索引:设置表中某个字段为主键或者唯一约束时,系统会自动创建关联该字段的唯一索引手动索引:手动在表上创建索引MySQL支持6种......
  • MySQL学习--普通索引
    在创建表时创建索引,已有表创建索引,altertable创建索引1.在创建表时创建索引createtableemp(enamevarchar(20),deptnoint(10)primarykeyauto_increment,indexindex_niu(deptno));explainselect*fromempwheredeptno=22; 2.已有表创建索引createtable......
  • MySQL学习--唯一索引
    唯一索引:就是创建索引时,限制索引的值必须唯一 1.在创建表时创建索引createtableemp(enamevarchar(20),deptnoint(10)primarykeyauto_increment,uniqueindexindex_niu(deptno));explainselect*fromempwheredeptno=22; 2.已有表创建索引createtable......
  • MySQL学习-完整性约束
    notnull约束字段不能为空default设置字段的默认值unique约束字段值唯一primarykey唯一且不为空auto_increment自动增加foreignkey多表之间 ......
  • 六、查询性能优化
    查询优化、索引优化、库表结构优化需要齐头并进,一个不落6.1为什么查询速度会慢真正重要的是响应时间。如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间。如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数,要......
  • post时间盲注查询表字段数所新增的类属性
    self.information_schema_GLOBAL_STATUS=[2]self.information_schema_GLOBAL_VARIABLES=[2]self.information_schema_REFERENTIAL_CONSTRAINTS=[11]self.information_schema_PLUGINS=[11]self.information_schema_COLLATIONS=[6]self.information_schema_TABLE......
  • post时间盲注注入脚本之查询表字段数--草稿
    importrequestsimportsysimporttimeimportpdbimportthreadingfromconcurrent.futuresimportThreadPoolExecutorclassInjection():def__init__(self):self.url=""#self.scheNum=0self.scheNum=7#sel......
  • MySQL Server 5.5的安装及遇到问题记录
    一、安装安装没有什么说的,不会看图(版本,我选择自定义——Custom,供参考)                        --------------------------------------------------------------------------二、问题记录:安装后遇到的问题 1.安装mysql......
  • MySQL多实例
    MySQL多实例介绍应用场景:资金紧张公司若公司资金紧张,公司业务访问量不太大,但又希望不同业务的数据库服务各自能够尽量独立地提供服务而互相不受影响,或者,还有需要主从复制等技术提供备份或读写分离服务的需求,那么,多实例就再好不过了。用户并发访问量不大的业务当公司业务访问......