MySQL数据库笔记2

1.简单的查询语句(DQL)
   语法格式:select 字段名1,字段名2… from 表名;
   注意:
      (1)任何一条sql语句以“;”结尾。
      (2)sql语句不区分大小写。
      (3)字段可以参与数据运算。如:select ename,sal*12 as ‘年薪’ from emp;
      (4)标准sql语句中要求字符串使用单引号括起来,虽然mysql支持双引号,但尽量别用。
      (5)取别名时,as关键字可以省略。如:select ename,sal*12 ‘年薪’ from emp;
      (6)select * from emp; //实际开发中不建议使用*,效率较低。
2.条件查询
   语法格式:select 字段名1,字段名2… from 表名 where 条件;

支持如下运算符:
在这里插入图片描述
注意:
   (1)between…and…是闭区间,且在使用的时候必须左小右大。
   (2)between…and…还可以用在字符串方面,此时它属于左闭右开区间。如:select ename from emp where ename between ‘A’ and ‘D’;
   (3)在数据库中,NULL不是一个值,代表什么也没有,为空,其不等于0,不能用等号衡量,必须使用is null或者is not null。
   (4)and的优先级大于or,当运算符的优先级不确定的时候加小括号。
   (5)in等同于or,in后面的值不是区间,是具体的值。如:select ename,job from emp where job=‘SALESMAN’ or job=‘MANAGER’;等同于select ename,job from emp where job in(‘SALESMAN’,‘MANAGER’);
3.模糊查询like
   在模糊查询中,必须掌握两个特殊的符号,一个是‘%’,一个是‘_’。
   ‘%’代表任意多个字符,‘_’代表1个字符。
如:
(1)找出名字中第三个字母是A的?
   select ename from emp where ename like ‘__A%’;
(2)找出名字中带下划线的?
   select ename from emp where ename like ‘%\_%’;     //使用了转义字符
4.排序(升序、降序)
   asc表示升序,desc表示降序。order by默认升序。
(1)按照工资升序,找出员工名和薪资?
   select ename,sal from emp order by sal;    //order by默认升序
(2)按照工资降序,找出员工名和薪资?
   select ename,sal from emp order by sal desc;
(3)按照工资降序排列,当工资相同时再按照名字的升序排列?
   select ename,sal from emp order by sal desc,ename asc;    //越靠前的字段越能起到主导作用,只有当前面的字段无法完成排序的时候(相等的时候),才会启用后面的字段。
(4)找出工作岗位是SALESMAN的员工,并且要求按照薪资的降序排列?
   select ename,job,sal from emp where job=‘SALESMAN’ order by sal desc;    //先from,后where,再select,最后order
5.分组函数(多行处理函数)
分组函数一共只有五个:
在这里插入图片描述
记住:(1)所有的分组函数都是对“某一组”数据进行操作的。如:
找出工资总和?
   select sum(sal) from emp;
找出工资总和总人数?
   select count() from emp;
   select count(ename) from emp;
(2)分组函数自动忽略NULL。如:count不将值为NULL的计算在内,count(
)和count(某个字段)得到的结果可能不一样。
(3)多行处理函数:输入多行,输出一行;单行处理函数:输入一行,输出一行。
(4)sql语句中有一语法规则,分组函数不可直接使用在where子句当中。如:select ename,sal from emp where sal>avg(sal);这是错误的。改正:select ename,sal from emp where sal>(select avg(sal) from emp);
6.单行处理函数
ifnull()函数:可能为NULL的数据,被当做什么处理。
如:计算每个员工的年薪?
select ename,(sal+comm)*12 as yearsal from emp; //这是不当的,因为comm可能为NULL,所有数据库都是这样规定的:只要有NULL参与的运算结果一定是NULL
改正:select ename,(sal+ifnull(comm,0))*12 as yearsal from emp;
7.分组查询group by、having
      group by:按照某个字段或者某些字段进行分组。having:对分组之后的数据进行再次过滤。
(1)分组函数一般都会和group by联合使用,这也是为什么被称为分组函数的原因,并且任何一个分组函数都是在group by语句执行结束之后才会执行的,这也是为什么分组函数不能用在where中使用的原因(没有group by的sql语句中实际上存在一个缺省的group by语句)。当一条sql语句没有group by的话,整张表的数据会自成一组。如:找出每个工作岗位的最高薪资?
select max(sal) from emp group by job;
sql语句执行顺序
上图表示SQL语句中各子句的执行顺序。
(2)select ename,max(sal),job from emp group by job;这条sql语句在MySQL当中查询结果是有的,但是结果没有意义,ename结果是乱的,在Oracle数据库中会报错;Oracle的语法规则比MySQL语法规则严谨。记住:当一条语句中有group by的时候,select后面只能跟分组函数和参与分组的字段
(3) 多个字段可以联合起来一起分组。如:select max(sal),deptno,job from emp group by deptno,job;
(4)having的使用,建议:能够使用where过滤的尽量使用where,where的效率比较高。select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;这是不得不用having过滤的例子。

原创文章 2 获赞 2 访问量 71

猜你喜欢

转载自blog.csdn.net/weixin_44384631/article/details/106123182