# 查询t_emp表的所有字段
SELECT * FROM t_emp;
# 查询t_emp表的指定字段
SELECT ename, empno FROM t_emp;
# 为sal*12列名起一个名字叫incom
SELECT empno, sal*12 AS "incom" FROM t_emp;
执行顺序: 词法分析与优化->FROM->SELECT
看朋友圈,只会加载少量的部分的信息,不用一次性加载全部的朋友圈,那样会浪费CPU、时间,内存和网络带宽
如果结果集很多,则可以使用LIMIT关键字限定结果集的数量。
# 分页处理
# SELECT ... FROM ... LIMIT 起始位置,偏移量;
# 起始位置不写,默认是0
SELECT empno, ename FROM t_emp LIMIT 0, 5;
执行顺序: FROM->SELECT->LIMIT
# 查出来的结果排序, ORDER BY 字段名称,默认升序
SELECT empno, ename, sal, deptno FROM t_emp ORDER BY sal;
# 降序排列 DESC 升序:ASC
SELECT empno, ename, sal, deptno FROM t_emp ORDER BY sal DESC;
多字段排序:
# 当指定的排序字段一致时,默认再按照主键的升序排序
# 但是可以指定多关键字排序
SELECT empno, ename, sal, hiredate FROM t_emp ORDER BY sal DESC, hiredate ASC;
排序+分页
# 例子:查出公司工资前5的员工
SELECT empno, ename, sal FROM t_emp ORDER BY sal DESC LIMIT 0, 5;
执行顺序: FROM->SELECT->ORDER BY->LIMIT
DISTINCT的使用: 结果集中的重复记录 ——>去除重复记录
例子: 想要看看员工一共有哪几种工作,这时要求不重复显示
SELECT DISTINCT job FROM t_emp;
SELECT empno, ename, sal FROM t_emp WHERE (deptno=10 OR deptno=20) AND sal >= 2000;
例子:找出部门为10, 年收入(sal+comm)超过15000并且工龄超过20年的员工
SELECT empno, ename, sal, hiredate
FROM t_emp
WHERE deptno=10 AND (sal + IFNULL(comm,0))*12>=15000 AND DATEDIFF(NOW(),hiredate)/365>=20;
注意:
任何值与NULL加减乘除之后依然时NULL
IFNULL()函数,如果第一个参数为NULL,返回第二个参数
DATEDIFF()两个日期参数,返回天数
NOW()函数返回当前的日期和时间
+ - * / %
>, <, >=, <=, =, !=, IN
IN为包含
表达式 | 意义 | 例子 |
---|---|---|
IS NULL | 为空 | comm IS NULL |
IS NOT NULL | 不为空 | comm IS NOT NULL |
BETWEEN AND | 范围 | sal BETWEEN 2000 AND 3000 |
LIKE | 模糊查询 | ename LIKE “A%” |
REGEXP | 正则表达式 | ename REGEXP “[a-zA-Z]{4}” |
注释: LIKE“A%” 指的是以A开头,“%A”表示以A结尾,“%A%”表示字段中包含A
# 在部门10,20,30中查找工作不是销售,入职日期在1985-01-10之前的
SELECT empno, ename, sal, deptno, hiredate
FROM t_emp
WHERE deptno IN(10, 20, 30) AND job != "SALESMAN" AND hiredate<"1985-01-10";
例子: 查找佣金不为空的员工,并且底薪是2000到3000,并且名字以A开头的员工
SELECT ename, comm, sal
FROM t_emp
WHERE comm IS NOT NULL
AND sal BETWEEN 2000 AND 3000
AND ename LIKE "A%";
AND, OR, NOT, XOR
`
例子: 查询不在10,20部门的员工
SELECT ename, deptno
FROM t_emp
WHERE NOT deptno IN(10, 20);
二进制运算
& | ~ ^ << >>
执行顺序: FROM->WHERE->SELECT-> ORDER BY->LIMIT