2020924王杉
学习内容:
MySQL:
-
查询数据:
1.简单查询:
查询特定的列 select eid,ename from lfemp;
查询所有的列 select * from lfemp;
给列起别名 select eid as 编号,ename 姓名 from lfemp;
合并相同的项 select distinct sex from lfemp;
查询时执行计算 select ename,salary*12 from lfemp;
结果集的排序 select * from lfemp order by salary asc/desc;
条件查询 select * from lfemp where salary >=5000;
模糊查询 select * from lfemp where ename like '%e_';
分页查询 select * from lfemp limit m,n;
2.复杂查询:
复杂查询
聚合查询/分组查询
聚合函数
1.获取数量
select count(*) from lfemp;
2.求总和
select sum(salary) from lfemp;
3.求平均数
select avg(salary) from lfemp where sex=1;
4.求最大、最小值
select max(salary) as 最高工资,min(salary) as 最低工资 from lfemp where sex=0;
5.获取当前数据中的年份数值
select year(birthday) from emp;
6.获取当前数据中的月份数值
select month(birthday) from emp;
分组查询
group by
实例
select avg(salary),max(salary),min(salary),sex from lfemp group by sex;
注意:分组查询只能查询聚合函数和分组条件
子查询
子查询就是把一个sql语句的查询结果作为另一个sql语句的查询条件
实例
select * from lfemp where salary>(select salary from lfemp where ename='tom');
多表查询(跨表查询)
内连接
inner join...on...
实例
select ename,dname from lfemp inner join lfdept on deptId=did;
问题:无法查询出没有部门的员工,也无法查询出没有员工的部门
其他写法问题
1.select ename as 姓名,dname as 部门名称 from lfemp,lfdept;
问题:发生错误,笛卡尔积
2.select ename as 姓名,dname as 部门名称 from lfemp,lfdept where deptId=did;
问题:多表查询避免产生笛卡尔积,给查询添加条件(外键),但是无法查询出没有部门的员工,也无法查询出没有员工的部门
左外连接
left outer join .....on....
查询左侧表中的所有数据
实例
select ename,dname from lfemp left outer join lfdept on deptId=did;
右外连接
right outer join...on
查询右侧表中的所有数据
实例
select ename,dname from lfemp right outer join lfdept on deptId=did;
全连接
union 合并相同的项
(select ename,dname from lfemp left outer join lfdept on deptId=did)
union
(select ename,dname from lfemp right join lfdept on deptId=did);
union all 不合并相同的项
(select ename,dname from lfemp left outer join lfdept on deptId=did)
union all
(select ename,dname from lfemp right join lfdept on deptId=did);
注意:mysql不支持 full join ..on..ES6(promise):
-
定义:Promise是一个构造函数,它跟JS中的Date、Array等构造函数类似,都是使用new操作符实例化之后就可以通过传参和调用方法的形式来完成某些特定的功能。Promise是专门用来实现多个异步函数,必须先后顺序执行的技术
-
作用和需要使用的要求:避免callback hell(回调地狱);当有要求,下一个函数必须在前一个函数执行后,才能开始执行时,就使用promise
-
使用:
- 第一步:将异步函数使用new Promise包裹,并返回该new Promise,同时与下一项任务相连
- 第二步:在new Promise() 内的异步任务内部,设置前一项任务需要决定何时调用的函数,只要前一项任务内部调用了这个函数,就会通知下一项任务开始执行
-
第三步:调用前一项任务,然后调用 .then() 连接下一项任务
-
promise语法:
-
Promise的参数中是一个函数:封装了原函数的正常的逻辑 函数有两个回调函数参数:①resolve 正常执行后调用 .then() ②reject 在出错时,调用 .catch()
-
使用new操作符实例化Promise构造函数,与其它构造函数不同的是Promise接受一个函数作为参数。该函数又接收两个参数,分别是resolve、reject,它们连个也是函数(JavaScript内置的)作用不同。
-
Promise三个状态:pending(挂起/等待)、fulfilled(成功)、reject(失败)
状态切换:
①执行new Promise()时,异步任务执行完之前,promise对象处于pending状态
②当异步任务执行成功,我们调用resolve()时,整个promise对象就变成fulfilled状态,就自动调用.then()中的下一项任务
③当异步任务执行过程中出错,我们调用reject()时,整个promise对象就变成rejected状态,就不再调用.then(),而是转向调用结尾的.catch()
-
ES7 async await :使用async 声明函数,在async函数内使用await,await 会输出Promise对象resolve/reject后的值,只有Promise被resolve/reject之后,async函数才会往下走,如果调用了then,await输出then返回值。
-
学习心得:
今天学习了数据库的操作方法和一些基本数据库知识,然后学习了promise,主要还是对异步的处理,有些东西还是需要好好理解,挺绕的。还需要学习的东西还多,加油!
近期评论