1 基础查询
select 列名 from 表名
2 条件查询
运算符 select 列名 from 表名 where 条件
=、!=、<>、<、<=、>、>=; BETWEEN…AND; IN(set); IS NULL; AND; OR; NOT;
3 模糊查询
通配符 _ 任意一个字母 %:任意0~n个字
select 列名 from 表名 where 列名 like 条件
查询姓名以“z”开头的学生记录 SELECT * FROM stu WHERE sname LIKE 'z%';
4 字段控制查询
去重复 DISTINCT 如果为空 IFNULL(comm,0) 重命名 as
查雇员的薪水 SELECT DISTINCT sal FROM emp; 雇员薪水与佣金之和 SELECT *,sal+IFNULL(comm,0) as total FROMemp;
5 排序
升序 ASC(默认) 降序 DESC
按月薪降序排序,如果月薪相同时,按编号升序排序 SELECT * FROM emp ORDER BY sal DESC,empno ASC;
6 聚合函数 sum avg max min count
查询最高工资和最低工资: SELECT MAX(sal), MIN(sal) FROMemp;
7 分组查询 GROUP BY
注:凡和聚合函数同时出现的列名,则一定要写在group by 之后
查询每个部门的部门编号以及每个部门工资大于1500的人数: SELECT deptno,COUNT(*) from emp where sal > 1500 GROUP BY deptno;
8 having 字
查询工资总和大于9000的部门编号以及工资和
SELECT deptno, SUM(sal) from emp group by deptno having sum(sal) > 90000from emp where sal > 1500 GROUP BY deptno
注:having与where的区别:
1.having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
2.having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。
9 limit
LIMIT用来限定查询结果的起始行,以及总行数。
select * from where group by having limit
多表查询有如下几种:
l 合并结果集;UNION 、 UNION ALL
l 连接查询
内连接 [INNER] JOIN ON
外连接 OUTER JOIN ON
左外连接 LEFT [OUTER] JOIN
右外连接 RIGHT [OUTER] JOIN
全外连接(MySQL不支持)FULL JOIN
自然连接 NATURAL JOIN
l 子查询
合并结果集
UNION:去除重复记录,例如:SELECT* FROM t1 UNION SELECT * FROM t2;
UNION ALL:不去除重复记录,例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2。
被合并的两个结果, 列数和列类型必须相同
内连接
方言 : 没有 join on SELECT e.ename,e.sal,e.comm,d.dname FROM emp AS e,dept AS d WHERE e.deptno=d.deptno;
标准语句 有 join on SELECT * FROM emp e INNER JOIN dept d ON e.deptno=d.deptno;
INNER可以省略,MySQL默认的连接方式就是内连接 不使用WHERE,而是使用ON
内连接的特点:查询结果必须满足条件。
外连接
外连接的特点:查询出的结果存在不满足条件的可能。
左外连接 SELECT * FROM emp e LEFT OUTER JOIN dept d ON e.deptno=d.deptno;
左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示NULL。
自然连接
大家也都知道,连接查询会产生无用笛卡尔积,我们通常使用主外键关系等式来去除它。而自然连接无需你去给出主外键等式,它会自动找到这一等式:
SELECT * FROM emp NATURAL JOIN dept; 内连接
SELECT * FROM emp NATURAL LEFT JOIN dept; 左连接
SELECT * FROM emp NATURAL RIGHT JOIN dept; 右连接
子查询
一个select语句中包含另一个完整的select语句。
子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了。
子查询出现的位置:
where后,作为条为被查询的一条件的一部分;
from后,作表;
当子查询出现在where后作为条件时,还可以使用如下关键字:
any
all
子查询结果集的形式:
单行单列(用于条件)
单行多列(用于条件)
多行单列(用于条件)
多行多列(用于表)
SELECT* FROM emp LIMIT 3, 10;
FROM emp ORDER BY FROM emp ORDER BY FROM emp ORDER BY FROM emp ORDER BY FROM emp ORDER BY FROM emp ORDER BY FROM emp ORDER B FROM emp ORDER BYFROM emp ORDER BY sal
FROM emp
FROM emp