zoukankan      html  css  js  c++  java
  • sql查询语句

    select *from table where ......  #先执行的是from   后执行的是 where

    查询有很多种,select 、where  、group by、 having、oder by、limit 、regexp、like、

    1.where

      #筛选id大于3 小于6 

      select * from table where id > =3 and id < =6;

      #筛选出 id 等于 1 或者  等于2 或者等于3 

      select * from table where id = 1 or id = 2 or id = 3;

      #筛选出 id 等于 1 或者  等于2 或者等于3 

      select *from table where id in (1,2,3);

      #筛选出id在3到6之间的

      select *from table where id betweem 3 and 6;

      #筛选 id不在 元组中的数的

      select *from table where id not in (1,3);

      #筛选 含有名字含有a的

      select *from table  where name like '%a%';

      #筛选名字中为4个字符的

      select *from table  where name like '____'; 

      select *from table  where char_length(name) = 4;

      #查询为空的

      select * from table where name is null

    #  补充:

      mysql  对大小写不敏感的,%意味着 0或多个字符,而 _意味着1个字符

      char_length()  可以查询数据的长度

    2.group by  # 顾名思义,是用来 分组

      select  * from table group by post ;#按部门分

      在没有开启严格模式是可以执行的

      设置严格模式  set  global sql_mode = ‘strict_trans_tables,only_full_group_by'

      分组不能拿单独的数据了

      select post from table group by post;

      #获取部门的最高薪资,

      select post ,max(salary) from table group by post;

      select post as '部门' ,max(salary) as '薪资' from table group by post;

      最先 min  平均  avg  总和  sum

      #统计部门人数

      select port ,count(id)  from table group by port

      #获取分组后,字段的值

      select post ,group_concat(name,':',salary) from table group by post;

      #注意: 可以拼接 group_concat(name,salary ,'_haha');

      !!!cancat  不分组的时候用的,默认起始为一组,

       as  可以给表临时起名

      #select  t1.id ,t1.name from bjadjkabdjah as t1 ;   当表名字很长的时候

      #查询年薪  12  薪

      select name ,salary* 12 from table ;  可以数字运算   

      !!!!!! 分组注意点: where group by 同时出现,group by 要在where 后面;

        聚合函数,只能在from前面;

      #统计 各部门 年龄在30以上,的员工平均薪资;

      select post ,avg(salary) from table where age >30 group by post;

    3.having #分组之后的筛选条件

      #having 的语法和where 一样,只不过是在分组后的过滤操作,即having 是可以直接用聚合函数的

      select port avg(salary) from table where age > 30 group by post having avg(salary) > 1000;

    4.dictinct 去重

      #一定是完全一样的数据,才能去重,不要忽视主键 id 的存在;

      select dintinct id,age from table;

      select dintinct age from table;

    5. order by#排序

      select *from table  order by salary #默认是升序

      #升序  asc  降序   desc order by 可以添加多个;

      select *from table order by desc ,salary asc;

    6.limit #限制展示的数据,分页;

      select *from table limit 3;#只显示3条;

      select *from table limit(n,m) #起始位置n,开始取m条数据;

    7.正则

      select *from where name regexp '^j.*(n|y)$'   #以j开头,n或者y结尾的

    连表

      四种,inner join    left join ,right join , union

      inner 只显示都存在的

      left  显示 左边

      right  显示右边

      union 显示 两边

    子查询 就是我们解决问题的步骤,

      select *from emp where dep_id in (select id from dep where name = '技术' or name = '人力资源')

    总结:

      表的查询结果,可以作为其他表的查询条件;

      也可以通过别名的方式把它作为一个虚拟表很其他表关联

    永远不要高估自己
  • 相关阅读:
    maven插件安装与使用
    java面试题
    关于java的GC
    技术人员要树立自己的品牌
    为什么IT公司都应该鼓励开源
    你应该坚持写博客 即使没有读者
    计算机基础
    收藏 | 产品经理不可不知的 7 种技术思维
    我讨厌你公事公办的样子
    子序列问题【LIS、LCS、LCIS】
  • 原文地址:https://www.cnblogs.com/liqiangwei/p/13871586.html
Copyright © 2011-2022 走看看