数据库/JS基础/后端开发(Node.js)

       练习:查询出工资在8000以上的男员工的姓名,工资,生日,结果要求按照工资降序排列。

 select ename,salary,birthday from emp

 where salary>8000 and sex=1

 order by salary desc;

1.简单查询——分页查询

 查询的结果中有太多的数据,一次显示不完可以做成分页显示

 需要两个已知的条件:当前的页码、每页的数据量

每页开始查询的值=(当前的页码-1)*每页的数据量

 select * from emp  limit 开始查询的值, 每页的数据量;

 假设每页显示5条数据,查询出前4页

 第1页:select * from emp limit 0,5;

 第2页:select * from emp limit 5,5;

 第3页:select * from emp limit 10,5;

 第4页:select * from emp limit 15,5;

注意事项:开始查询的值和每页的数据量必须是数值型,不能加引号。

 练习:查询出工资在8000以上,工资最高的前3个员工

 select * from emp

 where salary>8000

 order by salary desc

 limit 0,3;

2.复杂查询

 (1)聚合查询/分组查询

  示例:查询出所有员工的数量

  select count(*) from emp;

  练习:使用员工的编号列查询数量

  select count(eid) from emp;  #推荐使用主键列

  练习:使用所属部门编号列查询数量

  select count(deptId) from emp;

函数:是一个功能体,需要提供若干数据,返回结果

聚合函数

count()/sum()/avg()/max()/min()

 数量   求和  平均   最大  最小

 练习:查询出所有男员工的工资总和

 select sum(salary) from emp where sex=1;

 练习:查询出10号部门的平均工资

 select avg(salary) from emp where deptId=10;

 练习:查询出年龄最小的员工的生日

 select max(birthday) from emp;

 练习:查询出10号部门的最低工资

 select min(salary) from emp where deptId=10;

分组查询通常只是查询聚合函数和分组条件

 示例:查询出男女员工的数量,平均工资各是多少

 select count(eid),avg(salary),sex from emp group by sex;

 练习:查询出各部门的工资总和,最高工资,最低工资

 select sum(salary),max(salary),min(salary),deptId from emp group by deptId;

year()  获取日期中的年份

 示例:获取2021-11-4中的年份

 select  year('2021-11-4');

 练习:查询出1993年出生的员工有哪些

 select * from emp where year(birthday)=1993;

 练习:查询出所有员工出生的年份

 select year(birthday) from emp;

 (2)子查询

是多个SQL命令的组合,将一个命令的结果作为另一个命令的条件

  示例:查询出工资最高的员工

   步骤1:查询出工资的最大值 —— 50000

   select max(salary) from emp;

   步骤2:通过最大值查询对应的员工

   select * from emp where salary=50000;

   综合:

   select * from emp where salary=(select max(salary) from emp);

  练习:查询出工资比king高的员工有哪些

   步骤1:查询出king的工资 —— 10000

   select salary from emp where ename='king';

   步骤2:查询出工资高于10000的员工

   select * from emp where salary>10000;

   综合:

   select * from emp where salary>(select salary from emp where ename='king');

  练习:查询出和tom同一年出生的员工有哪些

   步骤1:查询出tom 出生的年份

   select year(birthday) from emp where ename='tom';

   步骤2:查询出1990年出生的员工

   select * from emp where year(birthday)=1990;

   综合:

   select * from emp where year(birthday)=(select year(birthday) from emp where ename='tom') and ename!='tom';

 (3)多表查询

  要查询的列分布在多个表中,前提在创建数据表的时候,之间已经建立了关联

  示例:查询出所有员工的姓名及其部门名称

  select ename,dname from emp,dept where deptId=did;

  select emp.ename,dept.dname from emp,dept where emp.deptId=dept.did;

  内连接

  select ename,dname from emp inner join dept on deptId=did;

   和之前的查询结果一致

  左外连接

  select ename,dname from emp left outer join dept on deptId=did;

   显示左侧表所有记录,先写哪个表哪个就是左

  右外连接

   select ename,dname from emp right outer join dept on deptId=did;

   显示右侧表中所有记录,后写哪个表哪个就是右

   左外连接和右外连接中outer关键字可以省略

  全连接

   同时显示左侧和右侧表中所有的记录

   full join  on

   mysql不支持全连接

  联合

   union  联合后,合并相同的项

   union all   联合后,不合并相同的项

  (select ename,dname from emp left outer join dept on deptId=did)

  union

  (select ename,dname from emp right outer join dept on deptId=did);

解决方案:将左外和右外连接进行联合,联合后合并相同的记录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值