mysql 笔记 (查询)

mysql 笔记 (查询)

查询所有字段

select * from 《表名称》;

查询指定字段

select 《字段X》 《字段Y》 from 《表名称》;

查询结果,排除重复:distinct

select distinct 《字段》 from 《表名称》;

查询区间:

#第一种使用:between  ... and ...
select * from 《表名称》 where 《字段》 between 《区间值》and 《区间值》;
#第二种使用运算符: (大于号)>  and <(小于号) 
select * from 《表名称》 where 《字段》>《区间值》 and 《字段》<《区间值》;
例列出大于60小于80的成绩单:select * from 成绩表 where 成绩>60 and 成绩<80;

查询多个值:in,or

#in:包含
select * from 《表名称》 where 《字段》 in (值1,值2,值3 。。。);
#not in :不包含
select * from 《表名称》 where 《字段》 not in (值1,值2,值3 。。。);
#or:或
select * from 《表名称》 where 《字段》=《值》 or 《字段》=《值》;

查询结果,以某字段进行排序:order by … [asc/desc]

#升序:asc(默认升序,一般都可以省略)
select * from 《表名称》order by 《要排序字段》asc;
#降序:desc
select * from 《表名称》order by 《要排序字段》desc;
#混合排序,遇到相同的再次进行排序
#都是升序(如班级相同,再次进行成绩排序)
select * from 《表名称》order by 《要升序字段》asc,《要降序字段》asc;
#先生序后降序
select * from 《表名称》order by 《要升序字段》asc,《要降序字段》desc;

查询统计:count

#统计整个表
select count(*) from 《表名称》;
#统计where后
select count(*) from 《表名称》where 《字段》=《值》;

最大值:max

最小值:min

select max(《字段》) from 《表名称》;


#利用排序取出最大值
解析:
第一步倒序排列:select * from 《表名称》order by 《字段》 desc;
第二步只取1个值:select * from 《表名称》order by 《字段》 desc limit 0,1;

#拓展:实例:表2中取出在表1中最大值的字段数据。
解析:
第一步最大值思路:select * from 《表名称1》where 《字段》=(最大值);
第二步替换为语句:select * from 《表名称2》where 《字段》=(select max(《字段》) from 《表名称1》;)


#min最小值,类似

求和:sum

select sun (《字段》) from 《表名称》;

平均数:avg

#某字段列的平均值
select avg(《字段》) from 《表名称》;
#也可加入where对某条记录求平均值

#对平均数以某字段分组:group by
select avg(《字段》) from 《表名称》  group by 《字段》;
例:select 学科 avg(成绩)from 成绩表 group by 学生姓名;

having和where差不多功能,都是后面跟条件,但having只能在where后或group by 后,可理解为并且

显示数据条目:limit 数字,数字

(第一个‘数字’代表从几条数据开始(起始0),第二个‘数字’代表显示几条数据)

#查询条目中,从第一条数据开始(起始行为0),显示1行数据
select * from 《表名称》 limit 0,1;
#查询条目中,从第二条数据开始,显示3条数据
select * from 《表名称》 limit 1,3;

合并字段:concat

实现多个字段为一个字段

select concat(字段1,字段2,字段3。。。) from 《表名称》;

多表查询

#两表全部查询,并where一个匹配的字段值
select * from 《表名称1》,《表名称2》 where 《表名称1.字段》=《表名称2.字段》
#两表全部查询,显示指定值,并指定一个匹配的字段值(注where字段不能出现在select中)
select 《字段1》,《字段2》,《字段3。。。》 from 《表名称1》,《表名称2》 where 《表名称1.字段》=《表名称2.字段》

#两表全部查询,并where一个匹配的字段值,仅显示指定记录
select * from 《表名称1》,《表名称2》 where 《表名称1.字段》=《表名称2.字段》 and 《表名称.字段》=《值》

#三表查询
select * from 《表名称1》,《表名称2》,《表名称3》 where 《表名称1.字段》=《表名称2.字段》 and 《表名称1.字段》=《表名称3.字段》


#where后直接加入值!
select * from 《表名称1》,《表名称2》,《表名称3》 where 《表名称1.字段》=《值》《表名称2.字段》=《值》 and 《表名称3.字段》=《值》

#以此类推:and
如果想把select中把where后的表字段显示,必须加《表.字段》

模糊查找:like 和 not like 后面通常跟%(通配符)

#以3开头:3%
select * from 《表名称》 where 《字段》 like “3%”;
#以3结尾:%3
select * from 《表名称》 where 《字段》 like “%3”;
#包含3:%3%
select * from 《表名称》 where 《字段》 like “%3%”;
#以此类推 not like
#不以3开头:
select * from 《表名称》 where 《字段》  not like “3%”;

别名:as

select 《字段》as 《新别名》 from 《表名称》;

当前时间:now

select now();

取年份:year(输出结果只有年份)

#取当前年份
select year (now());
#取字段中的年份
select year(《日期字段》) from 《表名称》;
#例:计算学生当前的年龄
select name as 姓名,year(now())-year(《出生年月字段》) as 年龄 from 学生表;

拼接并集:union(拼接字段类型无所谓,但字段数量必须相同

常用于两个相同的复杂select

select * from 《表名称》 where 《字段》=值 union select * from 《表名称》 where 《字段》=值

至少,任意:any

#例,表1中字段比表2最小值都大
select * from 《表名称1》 where 《字段》>any(select 《比较字段》 form 《表名称2》)

全部: all

#例,表1中字段比表2任意一个值都大
select * from 《表名称1》 where 《字段》>all(select 《比较字段》 form 《表名称2》)

复制表做筛选条件

#例:一张成绩单,需要筛选出每科比平均数分数低的
#同一张表,出现两次,并分别命名为a表和b表
select from 成绩表 a where degree<(select avg(成绩) from 成绩表 b where a.《学号字段》=b.《学号字段》);

连接查询:

select 。。。from 《表名称1》 《连接》 《表名称2》 on 《条件》

#内连接:join (或 inner join)
#将相同的字段值显示出来,不同的不显示
select * from 表1 join 表2 on 表1.字段=表2.字段

#左外连接查询:left join (或 left outer join)
#左侧表为基准,右侧没有的数据的null(下例表1全部显示)
select * from 表1  left join 表2 on 表1.字段=表2.字段

#右外连接查询:right join (或 right outer join)
#和left join相反:右侧表为基准,左侧没有的数据的null(下例表2全部显示)
select * from 表1  left join 表2 on 表1.字段=表2.字段
#完全外连接查询:full join
#mysql不支持full join,但可以将left join+right合并实现
select * from 表1  left join 表2 on 表1.字段=表2.字段
union
select * from 表1  right join 表2 on 表1.字段=表2.字段
https://qnimg.ffing.cn/wp-content/uploads/2021/10/image-6.png?imageView2/0/q/75|watermark/1/image/aHR0cHM6Ly9xbmltZy5mZmluZy5jbi9mbl9sb2dvLnBuZw==/dissolve/55/gravity/SouthEast/dx/0/dy/0
good good study, day day up!

发表评论

textsms
account_circle
email

mysql 笔记 (查询)
查询所有字段 select * from 《表名称》; 查询指定字段 select 《字段X》 《字段Y》 from 《表名称》; 查询结果,排除重复:distinct select distinct 《字段》 from 《…
扫描二维码继续阅读
2021-10-07