• mysql常见的使用语法


    mysql常见的适用语法

    几个重要关键字的执行顺序

    # 书写顺序
    select id,name from emp where id > 3;
    
    # 执行顺序
    from ==》 where ==》 select
    

    感觉sql语法很像英语的句子书写。

    where 关键字:筛选条件
    
    2.查询员工id在3和6之间。
    select * from emp where id >=3 and id<=6;
    
    select * from emp where id between 3 and 6;
    
    3 查询姓名中含有o的员工。
    select * from emp where name like "%o%";
    
    4.查询员工姓名是由4个字符组成。
    select * from emp where name like '____';
    select * from emp where char_length(name) = 4;
    
    5.查询id小于3或者大于6的员工信息
    select * from emp where id not between 3 and 6;
    
    6. 查询薪资不在20000,18000,17000范围的数据
    select * from emp where salary not in (20000,18000,17000);
    
    7.查询岗位描述为空的员工姓名和岗位名.针对null不用等号,用is。
    select name,post from emp where post_comment is NULL
    
    # group by 分组
    
    # 分组之后,最小的可操作单位应该是组,不是单个数据。
    # 按照什么分组就只能拿到分组,其他字段不能直接获取 需要借助一些方法
    # 聚合函数:max,min,avg,sum,count
    
    1. 按照部门分组
    select post from emp group by post;
    
    1. 获取每个部门的最高薪资:max
    select post,max(salary) from emp group by post;
    
    select post as '部门',max(salary) as '最搞薪资' from emp group by post;
    # as可以给字段起别名,也可以省略,到那时不推荐。
    
    2.获取每个部门的最低薪资:min
    select post,min(salary) from emp group by post;
    
    3.获取每个部门的平均薪资:avg
    select post,avg(salary) from emp group by post;
    
    4.获取每个部门的工资总和:sum
    select post,sum(salary) from emp group by post;
    
    5.获取每个部门的人数:count
    # 不能对含null的字段进行统计。
    select post,count(id) from emp group by post;
    
    
    
    6.查询分组之后各部门名称和每个部门所有的员工姓名
    # group_concat 不单单可以支持获取分组之后的其他字段值,还支持拼接操作
    
    select post,group_concat(name) from emp group by post;
    
    select post,group_concat(name,'_DSB') from emp group by post;
    
    select post,group_concat(name,":",salary) from emp group by post;
    
    

    分组注意事项:

    # 关键字where和group by同时出现的时候group by必须在where的后面。
    1. where先对整体数据进行过滤之后在分组操作.
    2. 聚合函数只能在分组之后使用,where筛选条件不能使用聚合函数。
    3. 不分组默认整体就是一组。
    
    2. 统计各部门年龄在30岁以上的员工平均薪资
    select post,avg(salary) from emp where age>30 group by post;
    
    

    having分组之后的筛选条件

    '''
    having的语法跟where是一致的
    只不过having是在分组之后进行的过滤操作
    即having是可以直接使用聚合函数的。
    '''
    通缉各部门年龄在30岁以上的员工平均工资并且保留平均薪资大于10000的部门。
    select post,avg(salary) from emp where age>30 group by post having avg(salary) > 10000;
    

    distinct去重

    '''
    一定要注意,必须是完全一样的数据才可以去重。
    '''
    select distinct id,age from emp;
    select distinct age from emp;
    
    

    order by排序

    # 默认之后跟着一个asc.默认是升序
    select * from emp order by salary; == select * from emp order by salary asc
    # 降序
    select * from emp order by salary desc;
    
    # 如果要是比的结构相同,那么可以在之后在增加比较条件。
    select * from emp order by salary,id;
    
    

    limit限制展示条数

    针对数据过多的情况,通常做分页处理、

    select * from emp limit 3;  # 只展示3条数据
    
    select * from emp limit 0,5;  # 第一个参数是起始位置,第二个参数是展示条数。
    

    正则

    select * from emp where name regexp '正则规律';
    

    拼表

    select * from emp,dep where emp.dep_id = dep.id;
    
    # 推荐使用这种语法
    1. 内连接 inner join
    2. 左链接 left join
    3. 右链接 right join
    4. 全链接 union
    
    1. inner join : 只拼接两张表中共有的数据部分
    select * from emp inner join dep on emp.dep_id = dep.id;
    
    2. left join :左表所有的数据都显示出来 没有对应的选项就用null
    select * from emp left join dep on emp.dep_id = dep.id;
    
    3. right join : 右表所有的数据都显示出来 没有对应的选项就用null
    select * from emp right join dep on emp.dep_id = dep.id;   
    
    4. union : 左右两表所有的数据都展示出来。
    左表
    union
    右表
        
    

    子查询

    子查询:就是分步骤解决问题。
    将一个查询语句的结果当做另外一个查询语句的条件去做。
    
    select name from emp where dep_id in (200,201);
    select id from dep where name='技术' or name = '人力资源';
    
    

    总结:
    表的查询结果可以作为其他表的查询条件
    也可以通过其别名的方式把它作为一张虚拟表跟其他表相连。

    作业:
    1.整理今日内容
    2.完成下列分组查询练习题(以课上建表代码为参考)
    	1. 查询岗位名以及岗位包含的所有员工名字
        select post,group_concat(name) from emp group by post;
    	2. 查询岗位名以及各岗位内包含的员工个数
        select post,count(id) from emp group by post;
    	3. 查询公司内男员工和女员工的个数
        select sex,count(id) from emp group by sex;
    	4. 查询岗位名以及各岗位的平均薪资
        select post,avg(salary) from emp group by post;
    	5. 查询岗位名以及各岗位的最高薪资
        select post,max(salary) from emp group by post;
    	6. 查询岗位名以及各岗位的最低薪资
        select post,min(salary) from emp group by post;
    	7. 查询男员工与男员工的平均薪资,女员工与女员工的平均薪资
        select sex,avg(salary) from emp group by sex;
    3.练习拼表操作并理解其意义
    4.理解子查询思路体会其意义
    
  • 相关阅读:
    go语言浅析二叉树
    Go语言冒泡、选择、插入、快速排序实战浅析
    go语言教程之浅谈数组和切片的异同
    实测Maven上传jar包到私服的方法归纳
    干货|Dubbo社区开发者日经验分享
    Go语言系列开发之延迟调用和作用域
    mysql中间件分享(Mysql-prxoy,Atlas,DBProxy,Amoeba,cobar,TDDL)
    时间操作
    大型网站架构设计方向初探
    C#输入法
  • 原文地址:https://www.cnblogs.com/liqianxin/p/12836825.html
Copyright © 2020-2023  润新知