Mysql复杂查询

查询出工资在8000以上的女员工的姓名、性别、生日,工资,结果集按照工资降序排列,显示前两个人。
SELECT ename,sex,birthday,salary FROM emp
WHERE salary>8000 AND sex=0
ORDER BY salary DESC
LIMIT 0,2;

2019-10-9 10:19 2019年10月19日
2019/10/9 10/9/2019

2019-1-1 0:0:0 存储距离计算机元年(1970-1-1 0:0:0)的时间 毫秒数
1秒=1000毫秒
49365246060*1000=1545264000000
性别 0/1
男/女 man/woman boy/girl

1.复杂查询
(1)聚合查询/分组查询
示例: 查询所有员工的数量
SELECT COUNT(eid) FROM emp; #推荐写法
SELECT COUNT(*) FROM emp; #推荐写法
练习: 使用员工的部门编号这一列计算员工数量
SELECT COUNT(deptId) FROM emp; #14
练习: 查询所有女员工的数量
SELECT COUNT(eid) FROM emp WHERE sex=0;
聚合函数
函数是一个功能体,提供若干个数据,得到结果——饺子机
COUNT()/SUM()/AVG()/MAX()/MIN()
练习: 查询所有员工工资的总和
SELECT SUM(salary) FROM emp;
练习: 查询出男员工的平均工资
SELECT AVG(salary) FROM emp WHERE sex=1;
SELECT SUM(salary)/COUNT(eid) FROM emp WHERE sex=1;
练习: 查询出工资最高的员工
SELECT MAX(salary) FROM emp;
练习: 查询出工资最低的员工
SELECT MIN(salary) FROM emp;
练习: 查询出年龄最大的员工生日
SELECT MIN(birthday) FROM emp;
分组查询: 只能查询分组条件和聚合函数
示例: 查询出每个部门的员工的平均工资
SELECT deptId,AVG(salary),ename FROM emp GROUP BY deptId;
练习: 查询出男女员工的数量,最高工资,最低工资
SELECT COUNT(eid),MAX(salary),MIN(salary),sex FROM emp GROUP BY sex;
year() 获取日期中的年份
练习: 查询出1991年出生的员工有哪些
SELECT * FROM emp WHERE YEAR(birthday)=1991;
(2)子查询
把一个SQL语句的查询结果作为另一个SQL语句的查询条件
示例: 查询研发部的所有员工
步骤1: 查询出研发部的部门编号——10
SELECT did FROM dept WHERE dname=‘研发部’;
步骤2: 查询出10号部门的员工
SELECT * FROM emp WHERE deptId=10;
综合:
SELECT * FROM emp WHERE deptId=(SELECT did FROM dept WHERE dname=‘研发部’);
练习: 查询出比tom工资高的员工有哪些
步骤1:查询出tom的工资是多少 ——6000
SELECT salary FROM emp WHERE ename=‘tom’;
步骤2:查询出比tom工资高的
SELECT * FROM emp WHERE salary>6000;
综合:
SELECT * FROM emp WHERE salary>( SELECT salary FROM emp WHERE ename=‘tom’);
练习: 查询出和tom同一年出生的员工有哪些
步骤1: 查询出tom出生的年份——1990
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’);
(3)多表查询/跨表查询
示例: 查询出所有的员工姓名及其部门名称
SELECT ename,dname FROM emp,dept;
避免笛卡尔积
SELECT ename,dname FROM emp,dept WHERE deptId=did;
以上查询的结果是SQL-92中的查询方法,无法查询中没有部门的员工,也无法查询出没有员工的部门,SQL-99中提出了新的多表查询语法
(1)内连接——和SQL-92查询结果一致
SELECT ename,dname FROM emp INNER JOIN dept ON deptId=did;
(2)左外连接——左侧表中所有记录都显示
SELECT ename,dname FROM emp LEFT OUTER JOIN dept ON deptId=did;
OUTER关键字可以省略
(3)右外连接——右侧表中所有记录都显示
SELECT ename,dname FROM emp RIGHT OUTER JOIN dept ON deptId=did;
OUTER关键字可以省略
(4)全连接
显示左侧和右侧表中所有的记录——FULL JOIN
mysql不支持全连接
UNION 合并相同的记录
UNION ALL 不合并相同的记录
SELECT ename FROM emp_cn
UNION
SELECT ename FROM emp_us;
把左外连接的结果和右外连接的结果合并
(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);

学习一门编程语言的基本步骤
(1)了解背景知识: 历史、现状、特点、应用场景
(2)搭建开发环境,编写hello world
(3)常量和变量
(4)数据类型
(5)运算符
(6)逻辑结构
(7)通用的小程序
(8)函数和对象
(9)第三方的框架、库
(10)实用的项目

程序员必做50题
https://wenku.baidu.com/view/af66e2f14afe04a1b071de42.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dev _

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值