*
:代表所有字段的意思
SELECT
empno,
sal*12 AS "income"
FROM t_emp;
比如我们查看朋友圈,只会加载少量部分信息,不会一次性加载全部朋友圈,那样只会浪费CPU时间、内存和网络带宽 如果结果集的记录很多,则可以使用LIMIT关键字限定结果集数量。
如果LIMIT子句只有一个参数,他表示的是偏移量,起始值默认为0
SELECT empno,ename FROM T_emp LIMIT 10;
# 等价于
SELECT empno,ename FROM T_emp LIMIT 0,10;
执行顺序:FROM -> SELECT -> LIMIT
如果没有设置,查询语句不会对结果集进行排序。也就是说,如果想让结果集按照某种顺序排列,就必须使用 ORDER BY子句。
SELECT ...... FROM ...... ORDER BY 列名 [ASC | DESC]; #升序加ASC,降序加DESC
SELECT empno,ename,sal,deptno FROM t_emp ORDER BY sal;#升序
SELECT empno,ename,sal,deptno FROM t_emp ORDER BY sal DESC;#降序
ASC代表升序(默认),DESC代表降序。
升序:按从小到大的顺序排列 (如1、3、5、6、7、9)。 降序:就是按从大到小的顺序排列 (如9、8、6、4、3、1)。
如果排序列的是数字类型,数据库就按照数字大小排序,如果是日期类型,就按照日期大小排序,如果是字符串就按照字符串集序号排序。
ORDER BY子句书写的时候放在LIMIT子句的前面
FROM -> SELECT -> ORDER BY -> LIMIT
如果我们需要去除重复的数据,可以使用DISTINCT关键字来实现
DISTINCT修饰的不是列名,而是SELECT,即可以连起来看作一个整体SELECT DISTINCT,跟普通的SELECT相比,表明这种查询会执行去重。因此,看起来像是“必须放在第一个字段前面”,实际上它跟字段没关系,是跟SELECT有关系。
重复,指的是结果集中的两行每一列的值都完全一样。如果存在任何一列值不一样,都不算重复。因此,重复不是只看一个列,而是要看一行的所有列。
当SELECT DISTINCT后面跟多个字段时,同样也会做去重(按上面说的重复的定义来判断)。只不过视频中的数据在同时选择job和ename时,没有job和ename都相同的行,所以看起来像是没有做去重,像是“去重失效了”,实际上并没有失效,只是确实没有重复而已。
SELECT DISTINCT 字段 FROM ......;
SELECT DISTINCT job FROM t_emp;
使用DISTINCT的SELECT子句中只能查询一列数据,如果查询多列,去除重复记录就会失效。
DISTINCT关键字只能在SELECT子句中使用一次
很多时候,用户感兴趣的并不是逻辑表里的全部记录,而是他们当中能够满足一种或某几种条件的记录。这类条件要用WHERE子句来实现数据的筛选
SELECT DISTINCT 字段 FROM ... WHERE 条件 [AND | OR] 条件 ...;
#假设每个条件都需要满足,在每个条件之间添加AND。假设这些条件只需要满足一个,在每个条件之间添加OR
SELECT DISTINCT empno,ename,sal FROM t_emp WHERE deptno=10 AND sal >= 2000;
#想查询10部门里边底薪超过2000的员工
WHERE语句中的条件运算会用到一下四种运算符:
MySQL ifnull()函数 - MySQL教程™ (yiibai.com)
IFNULL(null,0)把null转换成0
不管什么值与null值进行预算结果都是null,可以用 IFNULL(null,0) 来解决
SELECT empno,sal,ename,hiredate
FROM t_emp
WHERE deptno=10 AND (sal+IFNULL(comm,0))*12>=15000
AND DATEDIFF(NOW(),hiredate)/365>=20;
DATEDIFF(第一个日期,第二个日期)可以返回第一个日期减去第二个日期的天数
NOW()获取当前日期和时间
MySQL IN运算符简介. IN 运算符允许你确定一个指定的值在一组值匹配的任何值或 子查询 。
SELECT
deptno,empno,sal,hiredate
FROM t_emp
WHERE deptno IN(10,20,30) AND job!="SALLESMAN" AND hiredate<"1985-01-01";
SELECT
ename,comm,sal
FROM t_emp WHERE comm IS NULL
AND sal BETWEEN 2000 and 3000
AND ename LIKE "_LAKE";
正则表达式的运算符
SELECT
ename,comm,sal
FROM t_emp WHERE comm IS NOT NULL
AND sal BETWEEN 1000 and 3000
AND ename REGEXP"^[\\u4e00-\\u9fa5]{2,4}$";
# ^代表字符串的开头$代表字符串的结尾,
二进制运算的实质是将参与运算的两个操作数,按对应的二进制诸位进行逻辑运算
WHERE子句中,条件执行的顺序是从左到右。所以应该把索引条件,或者筛选掉记录最多的条件写在做左侧
SELECT empno,ename FROM t_emp
WHERE ename = "FORD" AND sal >= 2000;
#-------------------------------------
SELECT empno,ename FROM t_emp
WHERE deptno = 10 AND sal >= 2000;
各种子句的执行顺序
FROM –> WHERE -> SELECT -> ORDER BY -> LIMIT