SQL语句 任何一条sql语句以";"结尾 sql语句不区分大小写 标准sql语句中要求字符串使用单引号括起来 完整的DQL语句: select 5 ... from 1 ... where 2 ... group by 3 ... having 4 ... order by 6 ... 1.简单查询语句(DQL) 1)select 字段名1,字段2,字段3,......from 表名; mysql> select EMPNO,ENAME from emp; 2)查询员工的年薪(字段可以参与数学运算) mysql> select ename,sal*12 from emp; 3)给查询结果的列重命名 select ename,sal*12 as yearsal from emp; 或select ename,sal*12 as '年薪’ from emp; 2.条件查询 分类: =、<>或!=、<、<=、>、>=、between……and……、is null、and、or、in、not、like select 字段1,字段2,...... from 表名 where 条件; 执行顺序:先from,然后where,最后select 如:1)查询工资等于5000的员工姓名 mysql> select ename from emp where sal=5000; 2)查询SMITH的工资 mysql> select sal from emp where ename='smith'; //字符串需要用单引号括起来 3)找出工资高于3000的员工 mysql> select ename from emp where sal>3000; 4)找出工资在1000和3000之间的员工 mysql> select ename from emp where sal between 1000 and 3000; between……and……是闭区间(必须左小右大) 或mysql> select ename from emp where sal>=1000 and sal<=3000; 5)找出哪些人没有津贴 mysql> select ename from emp where comm is null; 注: 在数据库中NULL不是一个值,代表什么也没有,为空 必须使用is null 或者is not null 6)找出哪些人津贴不为null mysql> select ename from emp where comm is not null; 7)找出哪些人没有津贴 mysql> select ename from emp where comm is null or comm=0; 8)找出薪资大于1000的并且部门编号是20或30部门的员工 mysql> select ename,sal,deptno from emp where sal>1000 and (deptno=20 or deptno=30); 注: and的优先级大于or 当运算符的优先级不确定的时候加小括号 9)找出工作岗位是manager和salesman的员工 mysql> select ename,job from emp where job='manager' or job='salesman'; mysql> select ename,job from emp where job in('manager','salesman'); 注: in等同于or in后面括号里的参数是具体的值,不是区间 10)找出名字中含有o的 mysql> select ename from emp where ename like '%o%'; 注: %代表任意多个字符,_代表任意一个字符 11)找出名字中第二个字母是A的 mysql> select ename from emp where ename like '_a%'; 12)找出名字中有下划线的 mysql> select name from t_user where name like '%\_%'; 注: 表示转义字符 13)找出名字中最后一个字母是t的 mysql> select name from t_user where name like '%t'; 3.排序查询 1)按照工资升序,找出员工名和薪资 mysql> select ename,sal from emp order by sal; 或mysql> select ename,sal from emp order by sal asc; 注: 默认升序,asc表示升序,desc表示降序 2)按照工资降序排序,当工资相同的时候再按名字的升序排序 mysql> select ename,sal from emp order by sal desc,ename asc; 注: 越靠前的字段越能起到主导作用,只有当前面字段无法完成排序时,才启用后面字段 3)找出工作岗位是salesman的员工,并且要求按照薪资的降序排列 mysql> select ename,sal,job from emp where job='salesman' order by sal desc; 4.分组函数 count 计数 sum 求和 avg 平均值 max 最大值 min 最小值 注: 所有的分组函数都是对“某一组”数据进行操作的 分组函数自动忽略null SQL语句中,分组函数不可以直接使用在where中 1)找出工资总和 mysql> select sum(sal) from emp; 2)找出最高工资 mysql> select max(sal) from emp; 3)找出总人数 mysql> select count(ename) from emp; 或mysql> select count(*) from emp; 4)找出工资高于平均工资的员工 mysql> select ename,(sal+ifnull(comm,0))*12 as yealsal from emp; //mysql> select ename,(sal+ifnull(comm,0))*12 as yealsal from emp; 出现以上错误信息:无效的使用了分组函数 原因:SQL语句中,分组函数不可以直接使用在where中 解释: 因为group by是在where执行之后才会执行 解决: 第一步:mysql> select avg(sal) from emp; 第二步:mysql> select ename,sal from emp where sal>2073.214286; 或 mysql> select ename,sal from emp where sal>(select avg(sal) from emp); 5)count(*)和count(具体的某个字段)的区别 count(*):不是统计某个字段中数据的个数,而是统计总记录条数(和某个字段无关) count(comm):表示统计comm字段中不为null的数据总数量 5.单行处理函数 注: 只要有null参与的运算,结果一定是null,所有数据库都是这样规定的 1)计算每个员工的年薪 mysql> select ename,(sal+ifnull(comm,0))*12 as yealsal from emp; 注: ifnull(可能为null的数据,被当作什么处理):属于单行处理函数 6.group by 和 having group by:按照某个字段或者某个字段进行分组 having:对分组过后的数据进行再次过滤 注: 当一条语句包含group by,select后面只能跟参加分组的字段以及分组函数 如:1)找出每个工作岗位的最高薪资 mysql> select max(sal) from emp group by job; 注: 分组函数一般都会和group by联合使用,这也是为什么它被称为分组函数的原因 并且任何一个分组函数都是在group by语句执行结束之后才会执行 当一条SQL语句没有group by时,整张表的数据会自成一组 2)找出每个工作岗位的平均薪资 mysql> select job,avg(sal) from emp group by job; 3)找出每个部门不同工作岗位的最高薪资 mysql> select deptno,job,max(sal) from emp group by deptno,job; 4)找出每个部门的最高薪资,要求显示薪资大于2900的数据 第一步:mysql> select deptno,max(sal) from emp group by deptno; 第二步:mysql> select deptno,max(sal) from emp group by deptno having max(sal)>2900; //效率低 或 mysql> select deptno,max(sal) from emp where sal>2900 group by deptno; //效率高 5)找出每个部门的平均薪资,要求显示薪资大于2000 mysql> select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;