简单查询
1. 只查询特定的列
SELECT eid,ename FROM emp;
2. 查询所有的列
SELECT * FROM emp
3. 为列取别名
SELECT eid AS id,enamel AS n FROM emp;
SELECT eid id,ename n FROM emp;
4. 显示不同记录(合并相同记录) DISTINCT
SELECT DISTINCT sex FROM emp;
5. 查询时执行计算
SELECT 500+300+100+500+23*12;
6. 查询结果集排序 DESC/降序 ASC/升序
SELECT * FROM dept ORDER BY did DESC;
7. 条件查询 WHERE
SELECT * FROM emp WHERE eid=5;
is null 表示为null的;is not null 表示补位null的
and 表示并且的意思;between and 表示在什么之间的
or 表示 和、或者的意思;not between and 表示不再什么和什么之间范围内的
in 表示包含;not in 表示不包含
8. 模糊条件查询 like % _
复杂查询
1. 分页查询 LIMIT
假设每页显示5条数据 SELECT * FORM emp LIMIT 0,5;
start 和 count 值必须是数字类型,不能加引号
2. 分组查询
mysql 提供了五个聚合函数,可以对查询结果集进行特定的运算:MAX、MIN、SUM、COUNT、AVG(分组查询中只能查询聚合函数和分组条件)
2.1 查询指定列上的最大值
SELECT MAX(salary) FROM emp; #查询工资最大值
2.2 查询指定列上最小值
SELECT MIN(salary) FROM emp; #查询工资最小值
2.3 查询指定列上数据的总和
SELECT SUM(salary) FROM emp; #查询工资总和
2.4 查询指定列上数据的数量
SELECT COUNT(salary) FROM emp; #查询工资数量
2.5 查询指定列上数据的平均值
SELECT AVG(salary) FROM emp; #查询工资平均值
3. 子查询
是在一个查询语句中的某个或多个子句中包含其他的查询语句,是一种复合的查询语句(简单理解,就是一个sql语句的执行结果可能作为另一个sql语句的查询条件,在另一个语句中使用)
4. 多表查询
查询出所有员工姓名机器部门 SELECT ename,dname FROM emp,dept;
但上述sql 语句会造成笛卡尔积错误,避免的解决方法(添加查询条件)
SELECT ename,dname FROM emp,dept WHERE deptId = did;
但上述sql 语句无法查询出没有部门的员工,也不能查询出没有员工的部门,解决方法:
1. 内连接 (表和表之间的连接)
SELECT ename,dname FROM emp INNER JOIN dept ON deptId = did;
2. 左外连接(先写哪个表,哪个表就是左;就是左侧表格内所有的记录,即时右侧没有)OUTER可以省略
SELECT ename,dname FROM emp LEFT OUTER JOIN dept ON deptId = did;
3. 右外连接(与左外连接同理)
SELECT ename,dname FROM emp RIGHT OUTER JOIN dept ON deptId = did;
4. 全连接(显示左侧和右侧表中所有记录---FULL JOIN)mysql暂不支持
解决方法:UNION 合并相同记录 UNION ALL 不合并相同记录