楼主: WXnKEuJ
1167 1

[学习笔记] 【学习笔记】-- 空值查询 -- 查询mgr为空的记录 select * from emp where mgr ... [推广有奖]

  • 1关注
  • 1粉丝

等待验证会员

硕士生

51%

还不是VIP/贵宾

-

威望
0
论坛币
340 个
通用积分
35.0543
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
770 点
帖子
130
精华
0
在线时间
0 小时
注册时间
2019-11-26
最后登录
2020-2-20

楼主
WXnKEuJ 发表于 2019-12-10 17:43:26 来自手机 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
-- 空值查询
-- 查询mgr为空的记录
select * from emp where mgr is null;


-- 查询comm不为空的记录
select * from emp where mgr is not null;


-- 查询每位员工的实发工资(基本工资+提成,将comm空值填充为0)
#空值不能跟其他任何值进行运算;会影响数据分析
select *,sal+ifnull(comm,0) from emp;


-- 设置别名
select *,sal+ifnull(comm,0) as 实发工资 from emp;

select *,sal+ifnull(comm,0) 实发工资 from emp;


-- 练习:查询每位员工的年薪
select *,sal*12 as 年薪 from emp;


-- 模糊查询
-- 查询姓名以a开头的员工信息
select * from emp where ename like \'a%\';


-- 查询姓名中包含a的员工信息
select * from emp where ename like \'%a%\';


-- 查询姓名中第二个字符为a的员工信息
select * from emp where ename like \'_a%\';

-- 练习:查询员工姓名不以s开头的员工信息
select * from emp where ename not like \'s%\';


-- 查询结果排序
-- 单字段排序:查询所有员工信息按sal降序显示
select * from emp order by sal desc;


-- 多字段排序:查询所有员工信息按deptno升序、sal降序显示
-- 默认是升序
select * from emp order by deptno asc,sal desc;


-- 限制查询结果数量
-- 查询基本工资最高的前5位员工
select * from emp order by sal desc limit 5;


-- 查询基本工资第6到10名的员工(偏移量以第一行为基准)
-- limit(偏移量,需要展示的总行数)
select * from emp order by sal desc limit 9,6;

select * from emp order by sal desc limit 6 offset 9;

-- 练习:查询最后入职的5位员工
select * from emp order by hiretime desc limit 5;


-- 聚合运算
-- 查询emp表中员工总数、最高工资、最低工资、平均工资及工资总和
select count(*)员工总数,max(sal)最高工资,min(sal)最低工资,avg(sal)平均工资,sum(sal)工资总和 from emp;


-- 分组查询
-- 查询各部门的平均工资
select deptno,avg(sal)平均工资
from emp
group by deptno;

-- 查询各部门不同职位的平均工资
select deptno,job,avg(sal)平均工资
from emp
group by deptno,job;


-- 练习:查询各部门的员工数
select deptno,count(empno)员工数
from emp
group by deptno;


-- 练习:查询各部门不同职位的人数
select deptno,job,count(empno)
from emp
group by deptno,job;


-- 分组后筛选
-- 查询各部门clerk的平均工资
-- 先分组再筛选
-- 分组之后只能显示分组字段和求值字段
SELECT
    deptno, job, AVG(sal) 平均工资
FROM
    emp
GROUP BY deptno , job
HAVING job = \'clerk\';

-- 先筛选再分组
SELECT
    deptno, job, AVG(sal) 平均工资
FROM
    emp
WHERE
    job = \'clerk\'
GROUP BY deptno , job;


-- 查询各部门平均工资大于3000的职位
SELECT
    deptno, job, AVG(sal)
FROM
    emp
GROUP BY deptno , job
HAVING AVG(sal) > 3000;

SELECT
    deptno, job, AVG(sal)
FROM
    emp
WHERE
    AVG(sal) > 3000
GROUP BY deptno , job;
-- 报错:where字句不能用聚合函数


-- 练习:查询平均工资在2000元以上的职位,并按照平均工资降序显示
SELECT
    deptno, job, AVG(sal)
FROM
    emp
GROUP BY deptno , job
HAVING AVG(sal) > 2000
ORDER BY AVG(sal) DESC;


-- 日期函数
select month(now());

-- 查询每位员工的入职年份
select year(hiretime) from emp;


-- 查询每位员工的工龄
select datediff(curdate(),hiretime)/365 工龄 from emp;


-- 将员工入职日期转换为时间戳
select *,unix_timestamp(hiretime) from emp;

select from_unixtime(345830400);


-- 将每位员工的入职日期加上一年
select adddate(hiretime,interval 1 year) from emp;


-- 练习:查询员工姓名、入职日期和试用截止日期
select * from emp;
select ename,hiretime,adddate(hiretime,interval 3 month) from emp;


-- 字符串函数



-- 将每位员工的职位转换为大写
select upper(job) from emp;


-- 将员工姓名与职位合并
select concat(ename,job) from emp;


-- 练习:将每位员工的姓名首字母转换为大写
select concat(upper(left(ename,1)),lower(mid(ename,2))) from emp;


-- 分组合并函数
-- 查询各部门的员工姓名
select deptno,group_concat(distinct ename order by sal desc)
from emp
group by deptno;



-- !!!!!! 练习:查询上层管理者工号及其对应的下属员工姓名
select * from emp;

select mgr,group_concat(ename)
from  emp
group by mgr;


-- 逻辑函数
-- if函数:查询每位员工的工资级别:3000及以上为高,1500-3000为中,1500以下为低
select *,if(sal>=3000,\'高\',if(sal>=1500,\'中\',\'低\')) from emp;


-- 逻辑表达式 case when ...then... else ... end
select *,case when sal>=3000 then \'高\'
                          when sal<=1500 then \'低\'
              else \'中\'
                        end 工资级别
from emp;



-- 多表连接查询
select * from emp;
select * from dept;

-- 内连接
-- 英文句号表示限定符号
select * from emp inner join dept on emp.deptno=dept.deptno;


-- 左连接
select * from emp left join dept on emp.deptno=dept.deptno;


-- 右连接
select * from emp right join dept on emp.deptno=dept.deptno;


-- 多表查询练习
select * from emp;
select * from dept;
select * from salgrade;

-- 查询每位员工的ename,dname,sal
select ename,dname,sal
from emp
left join dept
on emp.deptno=dept.deptno;


-- 查询manager的姓名、所属部门名称和入职日期:ename,dname,job,hiretime
select ename,dname,job,hiretime
from emp left join dept on emp.deptno=dept.deptno
where job=\'manager\';


-- 查询每位员工的工资等级;empno,ename,sal,grade
select empno,ename,sal,grade
from emp left join salgrade on sal between minimum and maximum;


-- 查询每个工资等级的员工数
select grade,count(empno) 员工数
from emp left join salgrade on sal between minimum and maximum
group by grade;


-- 查询所有管理者姓名及其下属员工姓名
-- (自连接、笛卡尔积连接)
-- 通过设置别名,区分同一张表
select 领导表.ename,员工表.ename
from emp 领导表 inner join emp 员工表 on 领导表.empno=员工表.mgr;

-- 笛卡尔积连接
select 领导表.ename,员工表.ename
from emp 领导表,emp 员工表
where 领导表.empno=员工表.mgr;

-- 查询入职日期早于其直属领导的员工:empno,ename,dname
select 员工表.empno,员工表.ename,dname
from emp 领导表 inner join emp 员工表 on 领导表.empno=员工表.mgr
join dept on 员工表.deptno=dept.deptno
where 领导表.hiretime>员工表.hiretime;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Select Elect Where HERE 学习笔记

沙发
jessie68us 发表于 2020-1-4 00:55:11 来自手机

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
扫码
拉您进交流群
GMT+8, 2026-1-22 14:20