这是部门表
这是员工表
一下得所有sql命令都是以这两个表为案例所进行操作
–1.查询特定的列
–示例 :查询出所有员工的编号和姓名
select eid,ename from emp;
–2.查询出所有员工的姓名、性别、生日、工资
select ename,sex,birthday,salary from emp;
–3.给列起别名 as 可省略
–示例:查询出所有员工的编号和姓名,是有一个字母作为别名
select 列名 as 别名 from 表名
select eid as a,ename as b from emp;
select eid a,ename b from emp;
– 你过得再快乐突然想到某些瞬间,你都会以最快的速度黯下来,多少束光都照不亮。
– 4.显示不同的记录 有重复的值只显示一个 distinct意思为有区别的
– 示例:查询出员工都分布在哪些编号的部门
select distinct deptid from emp;
– 5.查询时执行计算
– 示例:计算23456
select 2*3*4*5*6;
– 查询所有员工的姓名和年薪
select ename,salary*12 from emp;
– 假设每个员工工资增长2000,年终奖20000查询出所有员工的新民和年薪使用别名
select ename xingming,(salary+2000)*12+20000 gongzi from emp;
– 6.查询结果排序
– 示例:查询出所有的部门结果按照标号升序排列 ASC代表升序 ascendant
select * from emp order by deptid ASC;
– 示例:查询出所有的部门结果按照标号降序排列desc代表降序descendant
select * from emp order by deptid desc;
– 示例:查询出所有员工,结果按照年龄从大到小排列
select * from emp order by birthday ASC;
– 示例:按照姓名升序排列(根据编码的的顺序进排序 ASCII)
select * from emp order by ename ASC;
– 示例:查询出所有的员工,结果按照工资升序排列如果工资形同按照姓名排列
select * from emp order by salary asc,ename asc;
– 示例:查询出所有的员工结果按照性别升序排序如果性别形同按照年龄从小到大排列
select * from emp order by sex asc,birthday desc;
– 7.条件查询 > < >= <= != =
– 其中null为一个特殊的存在,如果需要和null对比使用 is和 is not
– 示例:查询编号为5的学生
select * from emp where eid=5;
– 示例:查询出所有的女员工
select * from emp where sex=0;
– 示例:查询工资大于8000的人员
select * from emp where salary >8000;
– 示例查询出有明确部门的员工
select * from emp where deptid is null;
– 示例查询出有没明确部门的员工
select * from emp where deptid is not null;
– 示例:查询出工资在8000一下的男员工
select * from emp where salary<8000 and sex=1;
– 示例:查询工资小于8000或者大于10000的员工 or || 都可以
select * from emp where salary>8000 or sex=0;
select * from emp where salary>8000 || sex=0;
– 示例:查询20部门或者30部门的员工
select * from emp where deptid=20 || deptid=30;
select * from emp where deptid=20 or deptid=30;
select * from emp where deptid in(20,30);
– 示例:查询不再20部门和30部门的员工
select * from emp where deptid not in(20,30);
–8.模糊查询 经常用于 搜索功能
– 示例:查询出员工姓名中含有字母e的
– %是匹配任意数量的字符>=0
select * from emp where ename like '%e%';
– 示例:查询出员工姓名中以字母e结尾
select * from emp where ename like '%e';
– 示例:查询出员工姓名中倒数第二个字母是e的员工
– _是匹配任意一个字符相当于占位符
select * from emp where ename like '%e_';
– 9.分页查询 limit
– 查询结果太多,一次展示不完 需要知道一页显示几个数据 当前的页码
– 每页开始查询的值=(点钱页码-1)*每页的数据量
– select * from emp limit 开始查询的值,每页的数据量
– 示例 假设每页显示五条数据,查询出前4页得数据
– 第一页
select * from emp limit 0,5;
– 第二页
select * from emp limit 5,5;
–第三页
select * from emp limit 10,5;
– 第四页
select * from emp limit 15,5;
/*
注意事项:
(1)开始查询的值不能写运算,只能写最终的值
(2)开始查询的值和每页数据量,不能加引号
*/
– 练习:查询出工资在5000以上的男员工中,工资最高的前3个人
select * from emp where salary>5000 && sex=1 order by salary desc limit 0,3;
– 复杂查询
– 10.聚合查询/分组查询
– 聚合函数:
– count()/sum()/avg()/max()/min()
– 数量 求和 平均 最大 最小
– 示例:查询出所有员工的数量
select count(*) from emp;
– 练习:使用员工的编号列查询数量
select count(eid) from emp;
– 练习:使用员工所属部门编号列查询数量
select count(deptid) from emp;
– 练习:查询出所有男员工的工资总和
select sum(salary) from emp where sex=1;
– 练习:查询出20号部门的平均工资
select avg(salary) from emp where deptid=20;
– 练习:查询出10部门的最高工资
select max(salary) from emp where deptid=10;
– 练习:查询出年龄最大员工的生日
select min(birthday) from emp;
– 分组查询只能查询分组条件和聚合函数
– 示例:查询出男女员工的数量,工资总和分别是多少
select count(*),sum(salary),sex from emp group by sex;
– 练习:查询出各部门的员工的平均工资,最高工资,最低工资
select avg(salary),max(salary),min(salary),deptid from emp group by deptid;
– year() 获取日期中的年份部分
– 示例:查询出所有员工出生的年份
select year(birthday) from emp;
– 练习:查询出1993年出生的员工
select * from emp where year(birthday)=1993;
– 加密函数 md5()
select md5('123456'); -- e10adc3949ba59abbe56e057f20f883e
– 11.子查询:是多个查询命令的组合,把一个的结果作为另一个的条件
– 示例:查询出工资最高的员工
– 步骤1:查询出工资的最高值 —— 50000
select max(salary) from emp;
– 步骤2:查询工资最高值对应的员工
select * from emp where salary=50000;
– 综合:
select * from emp where salary=(select max(salary) from emp);
– 练习:查询出高于平均工资的员工有哪些
– 步骤1:查询出平均工资
select avg(salary) from emp; -- 12823.529412
– 步骤2:查询高于平均工资
select * from emp where salary>12823.529412;
– 综合
select * from emp where salary>(select avg(salary) from emp);
– 练习:查询出和xin同一个部门的员工
– 步骤1:查询出xin的部门编号 ———— 20
select deptid from emp where ename='xin';
– 步骤2:查询出部门编号下的员工
select * from emp where deptid=20 && ename!='xin';
– 综合:
select * from emp where deptid=(select deptid from emp where ename='xin') && ename!='xin';
– 练习:查询出和tom同一年出生的员工
– 步骤1:tom出生的年份 ———— 1990
select year(birthday) from emp where ename='tom';
– 步骤2:查询出这个年份下出生的员工
select * from emp where year(birthday)=1990 && ename!='tom';
– 综合:
select * from emp where year(birthday)=(select year(birthday) from emp where ename='tom') && ename!='tom';
– 12.多表查询 必须要两个表之间又关联
– 示例:查询出所有员工得姓名及其部门名称
select ename,dname from emp,dept where deptid=did;
select emp.ename,dept.dname from emp,dept where emp.deptid=dept.id;
– 内连接 inner join
select ename,dname from emp inner join dept on deptid=did;
以上sql命令已经足够前端人员在工作中使用,满足基本工作需求。