MySQL使用实例

1、建立dept表:
create table dept--部门表
(deptno int primary key,--部门ID
dname varchar(30),--部门名称
loc varchar(30));--部门地址
其中deptno为主键。
向该表插入数据:
insert into dept values(30,'美工部','南海');

2、建立emp表:
create table emp--员工表
(empno int primary key,--员工号
ename varchar(30),--员工姓名
job varchar(30),--职位名称
mgr int,--上级员工号
hiredate datetime,--入职时间
sal numeric(8,2),--薪水
comm numeric(8,2),--奖金
deptno int,--部门号
foreign key(deptno) references dept(deptno));--外键
其中deptno为外键,指向dept表的deptno。

3、实例应用
3.1、简单查询(单表查询)
--查看表的属性字段  desc emp;
--查看记录  select * from epm;(最好别用*)

--查询并消除重复行  select distinct deptno from emp;
--计算年工资(包含奖金)  select ename,(if (comm is null,sal,sal+comm))*13 '年工资' from emp;(其中,sql server这样写select ename,(sal+isnull(comm,0))*13 '年工资' from emp;)
--查找1982.1.1后入职的员工  select * from emp where hiredate > '1982-1-1';
--显示工资在2000到2500  select * from emp where sal between 2000 and 2500;(既包含2000又包含2500)
--模糊查询,查询名字首字母为s的员工姓名和工资 select ename,sal from emp where ename like 'S%';(不区分大小写)
--使用in关键字实现批量查询  select * from emp where empno in(123,345,800);
--显示没有上级的雇员  select * from emp where mgr is null;
--查询工资高于500或岗位为manager的雇员,同时满足他们的名字首字母为J  select * from emp where (sal > 500 or job = 'manager') and ename like 'j%';
--按工资从低到高显示雇员信息(默认asc(升序),desc(降序))  select * from emp order by sal;
--按照部门号升序而雇员的工资降序排列  select * from emp order by deptno, sal desc;
--显示平均工资和工资总和  select avg(sal) 平均工资, sum(sal) 总工资 from emp;
--统计共有多少员工  select count(*) from emp;
--显示工资最低的,并且显示员工的名字  select ename,sal from emp where sal = (select min(sal) from emp);(较麻烦)
--显示工资高于平均工资的员工  select * from emp where sal > (select avg(sal) from emp);
--显示每个部门的平均工资和最高工资  select avg(sal),deptno,max(sal) from emp group by deptno;
--显示每种岗位(不同部门之间相同岗位)的平均工资和最高工资  select avg(sal),min(sal),deptno,job from emp group by deptno,job order by deptno;
--显示平均工资低于2000的部门和它的平均工资  select avg(sal),deptno from emp group by deptno having avg(sal) < 2000;

3.2、复杂查询(多表查询)
--显示雇员名称、工资及所在部门的名字  select ename,sal,dname from emp,dept where emp.deptno=dept.deptno;
--显示sales部门位置和其员工姓名  select ename,dname,loc from emp,dept where dname='sales' and emp.deptno=dept.deptno;
--显示部门号为10的部门名、员工名和工资  select d.dname,ename,sal from emp e,dept d where e.deptno=10 and e.deptno=d.deptno;(当设置别名后必须使用别名)
--显示雇员名字、工资、及所在部门的名字,并按部门排序  select ename,sal,dname from emp,dept where emp.deptno=dept.deptno order by emp.deptno;

3.3、复杂查询(自连接查询)
--显示某个员工的上级的名字(比如ford)  select ename from emp where empno=(select mgr from emp where ename="ford");
--显示每个员工的名字和他上级的名字  select worker.ename workername,boss.ename bossname from emp worker, emp boss where worker.mgr=boss.empno;(注意:该语句查询时当员工没有上级时则不显示,若员工没有上级显示null则需使用外连接,后面将会提到)

3.4、子查询
--显示与smith同一部门的所有员工  select * from emp where deptno=(select deptno from emp where ename="smith");
--查询 和10号部门工作相同的员工的名字、岗位、工资和部门号  select ename,job,sal,deptno from emp where job in(select distinct job from emp where deptno=10);
--显示高于部门平均工资的员工信息  select ename,sal,tem.myavg,emp.deptno from emp,(select avg(sal) myavg,deptno from emp group by deptno) tem where emp.deptno=tem.deptno and emp.sal>tem.myavg;

3.5、分页查询
--显示第一个到第四个入职的员工  select * from emp order by hiredate limit 0,4;(其中第一个参数0表示第一条记录,第二个参数4表示取四条记录,由此可以取出第一到第四的记录。另外该语法为mysql数据库,sql server中语法为select top 4 * from emp order by hiredate,两者之间有较大区别)
--显示第五个到第十个入职的员工  select * from emp order by hiredate limit 4,6;(该语句适用于mysql,sql server中语句为select top 6 * from emp where empno not in(select top 4 empno from emp order by hiredate) order by hiredate)

3.6、外连接
--显示每个员工的名字和他上级的名字,没有上级的员工则显示null  select worker.ename workername,boss.ename bossname from emp worker left join emp boss on worker.mgr=boss.empno;
  在此说一下左外连和右外连,左外连:左边的表的记录全部显示,如果没有匹配的记录就用null填充,而右外连正好与它相反。

猜你喜欢

转载自xiaofuyan.iteye.com/blog/2345972
今日推荐