数据插入到数据库中后,就可以用 select 命令进行各种各样的查询。
1.简单查询数据
a.语法
mysql> select * from 表名 [where 条件];
mysql> select 全部字段 from 表名 [where 条件];
b.实例
实例:
-- 查询出 emp 表的全部数据
代码:
mysql> select * from emp;
mysql> select ename,hiredate,sal,deptno from emp;
2.查询不重复的数据
a.语法
mysql> select distinct 字段 from 表名;
b.实例
实例:
-- 查询出 emp 表的 deptno 不重复数据
代码:
mysql> select distinct deptno from emp;
3.条件查询
a.语法
mysql> select * from 表名 where 条件;
b.实例
实例:
-- 查询出 emp 表的 所有 deptno 为 1 的数据
-- 查询出 emp 表的 所有 deptno 为 1 且 hiredate 大于 2001-01-01 的数据
代码:
mysql> select * from emp where deptno=1;
mysql> select * from emp where deptno=1 and hiredate > '2001-01-01';
4.排序和限制
a.语法
mysql> select * from 表名 [where 条件] [order by 字段1 [desc|asc],字段2 [desc|asc],...,字段n [desc|asc]]
b.实例1
实例:
--把 emp 表中的数据按工资高低进行显示。
代码:
mysql> select * from emp order by sal;
c.实例2
实例:
--把 emp 表中的数据按部门编号 deptno 字段排序
代码:
mysql> select * from emp order by deptno;
d.实例3
实例:
--对于 deptno 相同的前两条数据,如果要按照工资由高到低排序,可以使用以下命令
代码:
mysql> select * from emp order by deptno,sal desc;
e.语法
mysql> select * from 表名 [where 条件] [order by 字段1 [desc|asc],字段2 [desc|asc],...,字段n [desc|asc]][limit 偏移量,显示行数]
f.实例1
实例:
--显示 emp 表中按照 sal 排序后的前 3 条数据
--显示 emp 表中按照 sal 排序后从第二条开始的 3 条数据
代码:
mysql> select * from emp order by sal limit 3;
mysql> select * from emp order by sal limit 1,3;
5.聚合
a.语法
mysql> select [字段1,字段2,...字段n] 聚合函数 from 表名 [where 条件] [group by 字段1,字段2,...字段n[with rollup]] [having 条件]
b.实例1
实例:
-- 要在 emp 表中统计公司的总人数。
-- 在此基础上,要统计各个部门的人数。
-- 既要统计各部门人数,又要统计总人数。
代码:
mysql> select count(1) from emp;
mysql> select deptno, count(1) from emp group by deptno;
mysql> select deptno, count(1) from emp group by deptno with rollup;
c.实例2
实例:
-- 统计人数大于 1 人的部门
-- 统计公司所有员工的薪水总额、最高和最低薪水。
代码:
mysql> select deptno, count(1) from emp group by deptno having count(1)>1;
mysql> select sum(sal),max(sal),min(sal) from emp;
6.表连接
a.实例1
实例:
-- 查询出所有雇员的名字和所有的部门名称,因为雇员名称和部门分别存放在表 emp 和 dept 中,因此,需要表连接来进行查询
代码:
mysql> select ename, deptname from emp,dept where emp.deptno=dept.deptno;
b.实例2
实例:
-- 查询 emp 中所有用户名和所有在部门名称
代码:
mysql> select ename, deptname from emp left join dept on emp.deptno=dept.deptno;
mysql> select ename, deptname from dept right join emp on dept.deptno=emp.deptno;
7.子查询
某些情况下,当进行查询的时候,需要的条件是另外一个 select 语句的结果,这时候,就要用到子查询。
a.实例1
实例:
-- 从 emp 表中查询出所有部门在 dept 表中的所有记录。
代码:
mysql> select * from emp where deptno in(select deptno from dept);
b.实例2
实例:
-- 如果子查询记录数唯一,还可以用=代替in
代码:
mysql> select * from emp where deptno = (select deptno from dept limit 1);
实例:
-- 某种情况下,子查询可以转化为表连接
代码:
mysql> select emp.* from emp ,dept where emp.deptno=dept.deptno;
8.记录联合
将两个表的数据安装一定的查询条件查询出来后,将结果合并到一起显示出来,这个时候,就需要用 union 和 union all 关键字来实现这样的功能。
a.语法
mysql> select * from 表名1 union|union all select 全部字段 from 表名2 ...union|union all select 全部字段 from 表名n;
a.实例1
实例:
-- 将 emp 和 dept 表中的部门编号的集合显示出来。
代码:
mysql> select deptno from emp union all select deptno from dept;
实例:
-- 将以上结果去掉重复记录后显示。
代码:
mysql> select deptno from emp union select deptno from dept;
参考书籍
-- 书名: 深入浅出MySQL --数据库开发、优化与管理维护(第3版) -- 作者:翟振兴 崔春华 黄荣 董骐铭