mysql 简单查询和聚合查询部分方法

这篇博客介绍了MySQL的基本查询操作,包括查询特定列、所有列、给列起别名、显示不同记录、查询时执行计算、结果排序、条件查询、模糊条件查询、分页查询以及聚合查询。通过实例演示了如何使用SELECT语句进行各种查询,如查询员工编号、姓名、部门,使用别名,按条件和排序显示结果,以及计算年薪等。此外,还讲解了如何进行分组查询、子查询和多表查询,帮助读者掌握MySQL查询技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-- 1.查询特定的列
-- 实例:查询出所有员工的编号和姓名    
    select eid,ename from emp;
-- 练习:
    select ename,sex,birthday,salary from emp;
    
    
--2.查询所有的列
    select * from emp;
    select eid,ename,sex,birthday,salary,deptid from emp;
    
    
-- 3.给列起别名名:使用as设置别名,as关键字可以省略
-- 实例:查询出所有员工的编号,姓名,使用一个字母作别名
    select eid as a,ename as b from emp;
-- 练习
    select ename as 姓名,sex as 性别,salary as 工资 from emp;
    -- 简写:删除as
    select ename  姓名,sex  性别,salary  工资 from emp;
    
    
    --4. 显示不同的记录
-- 示例:查询出员工都分布在那些部门
    select distinct deptid from emp;
-- 练习:查询出都有那些性别的员工
    select distinct sex from emp;
    
--5.查询时执行计算
--示例: 查询出所有员工的姓名及其年薪
    select ename,salary*12 as 年薪 from emp;

-- 练习:
    select ename 姓名,(salary+2000)*12+30000 年薪 from emp;
    
    
-- 6.查询的结果排序
-- 默认排序规则是升序,如果按照字符串排序,是按照字符编码排列
-- asc->ascendant  升序的 默认就是升序排列
-- 示例:查询出所有的部门,结果按照部门编号升序排列
    select * from dept order by did asc;
-- 示例:查询出所有的部门,结果按照部门编号升序排列
-- desc->descendant 降序的
-- desc->describe  描述
    select * from dept order by did desc;
-- 练习:查询出所有的员工,结果按照工资的降序排列
    select * from emp order by salary desc;
-- 练习  查询出所有的员工结果按照年龄从大到小排列
    select * from emp order by birthday asc;
-- 练习: 查询出所有的员工,结果按照姓名的升序排列
    select * from emp order by ename;   -- 升序可以省略asc
    
-- 示例:查询出所有的员工,结果按照工资降序排列,如果工资相同按照姓名排列
    select * from emp order by salary desc,ename;
-- 练习:查询出所有的员工,要求结果按照性别的升序排列,如果性别相同按照年龄从大到小排列
    select * from emp order by sex,birthday;


-- 7.条件查询
-- 示例:查询出编号为5的员工
    select * from emp where eid=5;
-- 练习:查询姓名为King的员工
    select * from emp where ename='King';
-- 练习:
    select * from emp where sex=0;
    select * from emp where deptid=20;
    select * from emp where salary>=8000 order by salary asc;
    
-- 比较运算符:> < >= <= = !=(不等于)
-- 练习:查询出不在20号部门的员工
    select * from emp where deptid!=20;  -- 没有找到为null的
-- 练习:查询出没有明确出部门的员工
    select * from emp where deptid is null;
-- 练习:查询出有明确部门的员工
    select * from emp where deptid is not null;
    
-- is null 查找值为null的
-- is not null 查找值不为null的
-- 练习 查询出工资在8000~10000之间的员工有哪些
    select * from emp where salary>=8000 && salary<=10000;
-- 练习:8000以下男员工
    select * from emp where sex=1 && salary<8000;
    select * from emp where sex=1 and salary<8000;   -- 另一种写法
-- 练习: 查询出10000以上或者8000以下的员工有哪些
    select * from emp where salary>10000 || salary<8000;
-- 练习:查询出20号部门或者30号部门的员工有哪些
    select * from emp where deptid=20 || deptid=30;
    select * from emp where deptid=20 or deptid=30;   -- 另一种写法
    select * from emp where deptid in(20,30);
-- 练习:查询出不再20号部门并且不在30号部门的员工
    select * from emp where deptid not in(20,30);

-- 练习
    select * from emp where salary>=6000 && salary<=10000 && sex=1 order by salary desc;

-- 8.模糊条件查询
-- 示例:查询出姓名中含有字母e的员工
-- % 匹配符号,匹配任意个字符 >=0
    select * from emp where ename like '%e%';
-- 练习:查询出姓名中以e结尾的员工
    select * from emp where ename like '%e';
 -- _ 匹配符号,匹配任意一个字符
    select * from emp where ename like '%e_';

-- 9.分页查询
/* 
因为查询的结果有太多,一次显示不完
需要有两个已知的条件:当前页码,每页的数据量
每页开始查询的值=(当前的页码-1)*每页的数据量
语法:
select * from emp limit 开始查询的值,每页的数据量;
*/
-- 练习 :假设每页显示5条数据,查询前4页
-- 第一页 
    select * from emp limit 0,5;
-- 第二页
    select * from emp limit 5,5;
 -- 第三页
    select * from emp limit 10,5;
 -- 第四页
    select * from emp limit 15,5;
    
    -- 注意事项 limit后不能写运算,必须是数字,不能加引号。

-- 1.聚合查询,需要一组聚合函数
-- count()  sum()  avg()  max() min()
--  数量     总和   平均    最大   最小
-- 示例: 查询出所有员工的数量
select count(*) from emp;
select count(eid) from emp;        -- 结果16
select count(deptid) from emp;  -- 结果15 null 统计不了,推荐使用主键列 主键列不允许为空
select distinct deptid from emp;
-- 统计有几个部门
select count(distinct deptid) from emp;

-- 查询出所有女员工的工资总和
    select sum(salary) from emp where sex=0;
-- 练习:查询出20号部门的平均工资
    select avg(salary) from emp where deptid=20;
-- 练习: 查询出10号部门的最高工资
    select max(salary) from emp where deptid=10;
-- 练习:查询出年龄最大的女员工
    select min(birthday) from emp where sex=0;


-- 分组查询
-- 通常查询聚合函数和分组条件
-- 示例:查询出男女员工的数量,工资总和分别是多少
select sex,count(eid),sum(salary) from emp group by sex;
-- 练习:查询出各部门的平均工资,最高工资,最低工资
select deptid,avg(salary),max(salary),min(salary),sum(salary) from emp group by deptid;

-- 函数:year() 获取日期中的年份部分
    select year('2022-9-1');  -- 2022
-- 示例:查询出1990年出生的员工
    select * from emp where year(birthday)=1990;
--练习:查询出每个员工的姓名及出生年份
    select ename,year(birthday) from emp;

-- 2.子查询:多个查询命令的组合,把一个查询结果作为另一个的查询条件
-- 示例:查询出年龄最大的女员工是谁
select min(birthday) from emp where sex=0;
select * from emp where birthday=(select min(birthday) from emp where sex=0);
-- 练习:查询高于平均工资的员工有哪些
    select avg(salary) from emp;
    select * from emp where salary>(select avg(salary) from emp);
-- 练习:查询和xin同部门的员工
select deptid from emp where ename='xin';
 select * from emp where deptid=(select deptid from emp where ename='xin')  && ename !='xin';
-- 练习:查询和tom同一天出生的员工
select year(birthday) from emp where ename='tom';
select * from emp where year(birthday)=(select year(birthday) from emp where ename='tom') && ename!='tom';

-- 3.多表查询:要查询的列分布在多个表中
-- 前提:表之间已经建立了关联
-- 示例:查询出所有员工的姓名及其部门名称
select ename,dname from emp,dept where deptid=did;
select emp.ename,dept.dname,emp.salary from emp,dept where emp.deptid=dept.did;
-- 内连接
select ename,dname from emp inner join dept on deptid=did;*

    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值