MySQL数据库中的多方面查询语句

 -- 分组查询

-- 聚合函数     语法:select 聚合函数(字段名称) from 表明;

-- 1、统计企业员工数量,按照username字段计算;使用方法
                select count(username) FROM tb_emp;
                select count(*) FROM tb_emp;
-- 2、统计企业中入职最早的员工
                select min(entrydate) from tb_emp;
-- 3、统计企业中入职最晚的员工
                select max(entrydate) from tb_emp;
-- 4、统计企业中员工id的平均值
                select avg(id) from tb_emp;
-- 5、统计企业员工的id之和
                select sum(id) FROM tb_emp;

-- 6、根据性别分组,统计男性和女性员工的数量

                select gender,count(*) from tb_emp GROUP BY gender ;

-- 7、查询入职日期在2024-01-01之前的员工,按照职位分组,获取员工职位数大于等于2的职位
                select job,count(job) from tb_emp where entrydate<'2024-01-01' GROUP BY job HAVING count(job)>=2;

-- 排序查询

-- 1、跟据入职时间,对员工进行升序排序
                select * from tb_emp order by entrydate asc;
                select id,name,entrydate from tb_emp order by entrydate asc;
-- 2、根据入职时间,对员工进行降序排序
                select * from tb_emp order by entrydate DESC;
                select id,name,entrydate from tb_emp order by entrydate DESC;
-- 3、跟据入职时间,对员工进行升序排序,入职时间相同,按照更新时间进行降序排序
                select * from tb_emp order by entrydate asc,update_time desc;
                select id,name,entrydate,update_time from tb_emp order by entrydate asc,update_time desc;

-- 分页查询

-- 1、从起始索引0开始查询员工信息,每一页展示5条数据
                select * from tb_emp LIMIT 0,5;
-- 2、查询第1页员工信息,每一页展示5条数据
                select * from tb_emp LIMIT 0,5;
-- 3、查询第2页员工信息,每一页展示5条数据
                select * from tb_emp LIMIT 5,5;
-- 4、查询第3页员工信息,每一页展示5条数据
                select * from tb_emp LIMIT 10,5;

-- 查询第一页,每页展示10条数据;姓名为张,性别男,入职时间2020-01-01/2024-12-31
 

SELECT
    * 
FROM
    tb_emp 
WHERE
    NAME LIKE '张%' 
    AND entrydate BETWEEN '2020-01-01' 
    AND '2024-12-31' 
ORDER BY
    update_time DESC 
    LIMIT 10;

多表查询的使用

-- 查询表1id 等于 表2id 的数据(普通查询,会把两个表中所有的数据都展示出来)

        SELECT * from '表1','表2' where 表1.id=表2.id;

-- 查询学生表student.class_id等于课表class.id相等的数据

        select * from tb_student,tb_class where tb_student.classid=tb_class.id;

-- 使用连接的方式进行多表查询(内连接-----外连接[左外连接-----右外连接])

        -- 隐式内连接(多表查询)

                select tb_emp.id,tb_emp.`name`,tb_dept.`NAME` from tb_emp,tb_dept where tb_emp.dept_id=tb_dept.id ORDER BY tb_emp.id ASC;

        -- 显示内连接(多表查询)

                select tb_emp.id,tb_emp.`name`,tb_dept.`NAME` FROM tb_emp INNER JOIN tb_dept ON tb_emp.dept_id=tb_dept.id ORDER BY tb_emp.id ASC;

        -- 左外连接(多表查询)

                -- 查询员工表 所有的 员工 姓名 和部门名称的信息

                        select tb_emp.id,tb_emp.`name`,tb_dept.`NAME` from tb_emp left outer join tb_dept on tb_emp.dept_id=tb_dept.id ORDER BY tb_emp.id ASC;

        -- 右外连接(多表查询)

                -- 查询部门表 所有的 部门 名称,和员工名称的信息

                        select tb_emp.id,tb_emp.`name`,tb_dept.`NAME` from tb_emp right outer join tb_dept on tb_emp.dept_id=tb_dept.id ORDER BY tb_emp.id ASC;

        内连接和外连接的区别主要区别与 内连接只会把连接条件所关联的数据显示出来,而外连接会把所有的数据展示出来

-- 子查询(子查询的返回值为单个数值)

-- 查询 教研部 部门的所有员工信息
-- 			1、首先查询教研部部门的id
select tb_dept.id from tb_dept where tb_dept.`NAME`='教研部';
--  		2、在查询该部门id下的员工信息
select * FROM tb_emp where tb_emp.dept_id=2;
--      3、合并起来就是
select * FROM tb_emp where tb_emp.dept_id=(select tb_dept.id from tb_dept where tb_dept.`NAME`='教研部');


-- 查询员工中,入职比 方东白 晚的员工信息
select *from tb_emp where entrydate >(SELECT entrydate FROM tb_emp WHERE tb_emp.`name`='方东白')

列子查询(子查询中返回值为单列多行的值)    in

-- 查询 教研部 和 咨询部 的所有员工
select * FROM tb_emp where dept_id in (select tb_dept.id from tb_dept where tb_dept.`NAME`='教研部' or tb_dept.`NAME`='咨询部');

-- 行子查询

-- 查询与布奇的入职日期和职位相同的员工信息

    select entrydate from tb_emp where name='布奇';

    select job from tb_emp where name='布奇';

    select * from tb_emp where entrydate='2007-01-01'and job=2;
-- 下面的sql语句可以通过但是使用了多次子查询,性能低


    select *from tb_emp where entrydate=(select tb_emp.entrydate from tb_emp where tb_emp.`name`='布奇') and job=(select tb_emp.job from tb_emp where tb_emp.`name`='布奇);

-- 使用行子查询

    select * from tb_emp where (entrydate,job)=(select tb_emp.entrydate,tb_emp.job from tb_emp WHERE tb_emp.`name`='布奇');

-- 表子查询

-- 查询表中在2006-01-01入职之后的员工信息以及部门信息
    -- 查询表中入职时间在2006-01-01之后的员工信息
	    select * from tb_emp where entrydate>'2006-01-01';

    select e.*,d.`NAME` from (select * from tb_emp where entrydate>'2006-01-01') e,tb_dept d where e.dept_id=d.id;

索引

-- 创建索引,为tb_emp表的name字段建立一个索引
create index idx_name on tb_emp(name);
-- 查询索引,查询tb_emp表的索引信息
show index from tb_emp;
show index from tb_dept;
-- 删除索引,删除tb_emp表中name字段的索引
drop index idx_name on tb_emp;

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值