查询所有字段
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.字段
发表评论