zoukankan      html  css  js  c++  java
  • 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.理解子查询思路体会其意义
    
  • 相关阅读:
    每天一道LeetCode--141.Linked List Cycle(链表环问题)
    每天一道LeetCode--119.Pascal's Triangle II(杨辉三角)
    每天一道LeetCode--118. Pascal's Triangle(杨辉三角)
    CF1277D Let's Play the Words?
    CF1281B Azamon Web Services
    CF1197D Yet Another Subarray Problem
    CF1237D Balanced Playlist
    CF1239A Ivan the Fool and the Probability Theory
    CF1223D Sequence Sorting
    CF1228D Complete Tripartite
  • 原文地址:https://www.cnblogs.com/liqianxin/p/12836825.html
Copyright © 2011-2022 走看看