1 排序
SELECT prod_name
FROM Products
ORDER BY prod_name;
通常,ORDER BY 子句中使用的列将是为显示而选择的列。但是,实
际上并不一定要这样,用非检索的列排序数据是完全合法的。
select * from Student order by Sid,Sage;
不讨论业务,只单纯说逻辑,如果Sid相同,则按Sage进行排序
2 过滤
where 还可以配合 and or not in like 等关键字
需要注意的是 and是左右两边均要满足条件
or 则是以左边为主,左边满足条件就通过过滤,如果左边没有满足条件就判断右边的条件
如果 and和or一起使用
如
如果
A or B and C ,mysql就会解析成为: B和C同时满足,以及满足A的数据
( A or B ) and C
满足C 且满足A或者B
需要加括号,如不加括号则不准确
为什么需要加括号呢?
因为and的优先级高于or
in和or的含义相似
如 where id ( 1,2,3,4) id在1234中
like区别大小写
3 计算字段
select concat(Sid,'=',Sname,'&') as 拼接 from Student;
其中,TRIM 函数可以去重
也可以根据字段进行计算
mysql的函数大致上分为时间函数字符串函数数学函数
4 聚合函数
avg,max,min,sum,count
除了count,其余都需要指定列名
select avg(age) from info;
avg(distinct age)
去重计算平均年龄
distinct也可以用于max min
count()
注意:如果指定列名,则 COUNT()函数会忽略指定列的值为空的行,但如果
COUNT()函数中用的是星号(*),则不忽略。
select st.Ssex,avg(sc.score) as 平均分
from Student st
left join sc
on st.Sid = sc.Sid
GROUP BY st.Ssex;
按照性别分区,然后统计每个性别的平均分
可以在group by后使用having过滤分组
WHERE 在数据分组前进行过滤,HAVING 在数
据分组后进行过滤。这是一个重要的区别,WHERE 排除的行不包括在
分组中。这可能会改变计算值,从而影响 HAVING 子句中基于这些值
过滤掉的分组。
灵活应用子查询
SELECT
st.SId,
st.Sname,
sum( sc.score ),
( SELECT avg( sc.score ) FROM sc ) AS a
FROM
Student AS st
INNER JOIN sc ON st.Sid = sc.Sid
GROUP BY
st.Sname