首先创建表emp和表dept
create table emp(
ename varchar(10),
hiredate date,
sal decimal(10,2),
deptno int(2)
);
create table dept(
deptno int(2),
deptname varchar(10)
);
1,插入记录
1,向表 emp 中插入以下记录:ename 为 zzx1,hiredate 为 2000-01-01,sal 为 2000,deptno
为 1,
insert into emp (ename,hiredate,sal,deptno) values ('zzxl','2000-01-01','2000',1);
2,只对表中的 ename 和 sal 字段显式插入值
insert into emp (ename,sal) values ('dony',1000);
3,对表 emp一次插入两条记录
insert into emp values
('lvjingying','2008-01-01','2100',2),
('xuqian','2010-03-05','2300',5);
2,更新记录
1,将表 emp 中 ename 为“lisa”的薪水(sal)从 3000 更改为 4000
update emp set sal = 4000 where ename = 'lisa';
2,同时更新表 emp 中的字段 sal 和表 dept 中的字段 deptname
删除记录
1,在 emp 中将 ename 为‘dony’的记录全部删除
delete from emp where ename = 'dony';
2,将表 emp 和 dept 中 deptno 为 3 的记录同时都删除
delete a,b from emp a,dept b where a.deptno=b.deptno and a.deptno=3;
查询记录
(1)查询不重复的记录。
1,将表 emp 中的记录全部查询出来
select * from emp;
2, 有时需要将表中的记录去掉重复后显示出来,可以用 distinct 关键字来实现
select distinct deptno from emp;
(2)条件查询
3,需要查询所有 deptno 为 1 的记录
select * from emp where deptno = 1;
4,– 使用多字段条件查询
select * from emp where deptno = 1 and sal < 3000;
(3)排序和限制
5,把 emp 表中的记录按照工资高低进行显示
select * from emp order by sal;
6,把 emp 表中的记录按照部门编号 deptno 字段排序
select * from emp order by deptno;
7,对于 deptno 相同的前两条记录,如果要按照工资由高到低排序,可以使用以下命令
select * from emp order by deptno , sal desc;
8,显示 emp 表中按照 sal 排序后的前 3 条记录
select * from emp order by sal limit 3;
9,– 显示 emp 表中按照 sal 排序后从第二条记录开始,显示 3 条记录
select * from emp order by sal limit 1,3;
(4)聚合
10,要 emp 表中统计公司的总人数
select count(1) from emp;
11,要统计各个部门的人数
select count(1) from emp group by deptno;
12,要统计各部门人数,又要统计总人数
select deptno,count(1) from emp group by deptno with rollup;
13,统计人数大于 1 人的部门
select deptno,count(1) from emp group by deptno having count(1)>1;
14,– 统计公司所有员工的薪水总额、最高和最低薪水:
select sum(sal),max(sal),min(sal) from emp;
(5)表链接
15, 查询出所有雇员的名字和所在部门名称
select ename,deptname from emp,dept where emp.deptno =dept.deptno;
-- 或者
select ename,deptname from emp,dept where emp.deptno =dept.deptno;
-- 或者
select ename,deptname from emp right join dept on emp.deptno=dept.deptno;
(6)子查询
16,从 emp 表中查询出所有部门在 dept 表中的所有记录
select * from emp where deptno in (select deptno from dept);
如果子查询记录数唯一,还可以用=代替 in:
select * from emp where deptno = (select deptno from dept);
某些情况下,子查询可以转化为表连接
select emp.* from emp , dept where emp.deptno = dept.deptno;
注意:
MySQL 4.1 以前的版本不支持子查询,需要用表连接来实现子查询的功能
表连接在很多情况下用于优化子查询
(7)记录联合
17 ,将 emp 和 dept 表中的部门编号的集合显示出来
select deptno from emp
union all
select deptno from dept;
如果希望去重复
select deptno from emp
union
select deptno from dept;