1. 查询所有字段
2. 查询特定字段
3. 查询指定记录
4. 带IN关键字的查询
5. 带BETWEEN AND的范围查询
6. 带LIKE的字符匹配查询
7. 带AND的多条件查询
8. 带OR的多条件查询
9. 查询不重复的记录
10. 对查询结果进行排序
11.分组查询
12. 使用查询LIMIT进行限制数量查询
13.连接查询
14.子查询
SELECT * FROM emp;
SELECT id,name,age FROM emp;
SELECT 字段1,字段2,...字段名n FROM 表名 WHERE 查询条件
WHERE 条件判断符
操作符 | 说明 |
---|---|
= | 相等 |
<>,!= | 不等于 |
< | 小于 |
< | 小于 |
<= | 小于等于 |
>= | 大于等于 |
BETWEEN | 位于两值之间 |
SELECT * FROM emp WHERE dep_id IN(1,2) ORDER BY dep_id;
#使用dep_id排序
SELECT * FROM emp WHERE age BETWEEN 30 AND 40 ORDER BY age;
#使用age排序
SELECT * FROM emp WHERE name LIKE '周%';
当然通配符%可以放在不同的位置,有的情况下会影响查询效率。
SELECT * FROM emp WHERE dep_id=16 AND age=39
SELECT * FROM emp WHERE dep_id=16 OR age=39
使用OR时需要注意这会让索引失效
SELECT DISTINCT age,id,name FROM emp;
SELECT * FROM emp ORDER BY age DESC; #降序
SELECT * FROM emp ORDER BY age ASC; #倒序
SELECT * FROM emp ORDER BY age,name DESC; #多列排序
进行多列排序的时候先对第一列排序后,在进行对后面的列进行排序。当排序
分组查询是对数据按照某个或多个字段进行分组。
[GROUP BY 字段][HAVING <条件表达式>]
SELECT dep_id,COUNT(*) AS TOTAL FROM emp GROUP BY dep_id;
#查出并连接整个部门的员工
SELECT t2.dep_name,GROUP_CONCAT(t1.`name`) as '员工' FROM emp as t1 RIGHT JOIN dep as t2 ON t1.dep_id=t2.id GROUP BY t2.dep_name;
#分组后返回总数大于9的
SELECT dep_id,COUNT(*) AS TOTAL from emp GROUP BY dep_id HAVING(TOTAL)>9;
SELECT dep_id,COUNT(*) AS TOTAL FROM emp GROUP BY dep_id ORDER BY TOTAL;
比如分页查询
#返回前4条数据
SELECT * FROM emp LIMIT 4;
#从第8条数据开始,返回后4条数据
SELECT * FROM emp LIMIT 4 OFFSET 8;
select emp.id,emp.age,emp.phone,t2.id as id2,t2.dep_name from emp INNER JOIN dep as t2 on emp.dep_id=t2.id;
2. 左连接查询
左连接的结果包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果行中,右表的所有选择列表列均为空值。
SELECT emp.id,emp.name,emp.age,emp.phone,dep.dep_name FROM emp LEFT JOIN dep ON emp.dep_id=dep.id LIMIT 4;
SELECT emp.id,emp.name,emp.age,emp.phone,dep.dep_name FROM emp RIGHT JOIN dep ON emp.dep_id=dep.id;
子查询指一个查询语句嵌套在另一个查询语句内部的查询,即一个查询以另一个查询的结果为条件。
SELECT dep_name from dep WHERE id=(SELECT dep_id from emp WHERE id =4);