1.基本查询
select ename,depno
from t_emp
首先执行from,再执行select,要先知道从哪张表获取数据,再查询其中字段
2.数据分页
SELECT empno, ename from t_emp LIMIT 10,5;
从第10条数据开始,获取5条记录,注意此处的5是偏移量
顺序from----select----limit,limit,顾名思义,是限制的意思,此处要首先得到结果集,再对结果集的数量做限制
如果是从第1条数据开始获取,则limit后一个数字必然是0,可以省略这个0
3.结果集排序
SELECT empno, ename, sal from t_emp order by sal DESC;
默认是升序(ASC),此处是降序(DESC)
可以多个字段排序,比如在首要排序条件下有数据依然不能确定其次序,默认是根据主键排序,此时可以增加次要排序条件,
SELECT empno, ename, deptno, sal from t_emp
order by deptno, sal desc;
顺序from----select----order,先有结果集,再排序
4.排序加分页
select empno, ename, sal
from t_emp
order by sal
limit 5;
排序之后得到结果集,然后再限制输出
5.结果集去重
select distinct denpo
from t_emp;
distinct关键字在select子句中,只能使用一次,以下两种都会报错
select ename, distinct denpo from t_emp;
select distinct ename, distinct denpo from t_emp;
6.条件查询
select empno, ename, sal
from t_emp
where sal > 2000;
条件查询可以结合数学、比较、逻辑和按位运算符,
比较运算符中有一个“包含”IN,可以方便地筛选
select empno, ename, sal
from t_emp
where depno in (10,20);
查询的是t_emp表中depno字段为10或者20的范围内的empno, ename, sal三个字段
比较运算符中的‘like’
‘%A%’:包含字母A的字符串
'_'下划线可以代替一个字符
select empno, ename, sal
from t_emp
where ename like '_LACK';
查找一个人的信息,只记得名字后面的字母,第一个字母忘记了,就可以用下划线代替
比较运算符中的‘正则’:
关键字为REGEXP
select empno, ename, sal
from t_emp
where ename regexp '^[\\u4e00-\\u9fa5]{2,4}$';
查找名字是中文的人的信息
where执行顺序是从左到右的,如果一个条件能将很大部分的数据过滤掉,或者有建索引的,建议往左放,尤其是在有逻辑关系中的and
7.各种子句的查询顺序
from — where ----- select ---- order by ----- limit
8.ifnull函数
有时会碰到两个字段(一般是数字,可null)相加,可一个数字与null做运算,得到的都只能是null,所以要借ifnull函数将null转为其他数字
select ename, sal+ifnull(comm,0) as total_sal
from t_emp;
其中comm字段有可能保存了null,如果是null,ifnull函数就会将其变为0再进行计算
9.datediff函数,计算某两个时间的相差的天数
select datediff(NOW(),'1997-01-20')/365;
得到的结果是23.5342