SQL简单查询语句

1.总体查询

  select * from 表名

2.where查询

  a.and or查询

    select * from 表名 where   条件1 and 条件2                        

    (条件1和条件2同时满足)

    select * from 表名 where 条件1 or 条件2                     

    (条件1和条件2只要一个满足)

    注意:and 的优先级高于or 即:

      select * from 表名 where 条件1 or 条件2 and 条件3                

    (优先执行条件2和条件3,若是要先执行条件1和条件2的关系,则加一个括号就好) 

  b. like in 查询

    like也称为模糊查询

    select * from 表名 where 列表 like "%x%"                    

    (查询出表中含有字段x的列表)

    select * from 表名 where 列表 like "%x"                     

    (查询讯出表 以x结尾的列表)

    select * from 表名 where 列表 like "x%"                      

    (查询讯出表中以x开头的列表)

    select * from 表名 wher e 列表 like "_x"                     

    (查询讯出表中以x为第二个字符开头的列表)

    select * from 表名 where 列表 like "x_"                      

    (查询讯出表中以x为最后两个字符结尾的列表)

    in查询

    select * from 表名 where 列表 in (条件1,条件2)                  

  (in是可以替代or,和or的关系是一样的)

   注意:like 和 in 均可以反向操作,即在他们的前面加一个NOT

  c.正则表达式(regexp)

    select * from 表名 where 列表 regexp "^[A-Z]"                    

    (查询出以大写字母开头的列表) 

    select * from 表名 where 列表 regexp "^[a-z]"                     

   (查询出以小写字母开头的列表)

    select * from 表名 where 列表 regexp "[汉字]"                      

   (查询出含有汉字的列表)

    select * from 表名 where 列表 regexp "^[0-9]"                   

   (查询出以数字开头的列表)

    select * from 表名 where 列表 regexp "[A-Z]s"                   

   (查询出以大写字母结尾的列表)

  d.去重(distinct)

    select distinct  * from 表名 where 条件                      

   (去除筛选出来出现重复的)

    select distinct  字段1,字段2  from 表名 where 条件               

   (去除字段1和字段2出现重复的)

  e.改名(as)

    select 字段1 as 新字段1 , 字段2 as 新字段2 from 表名                

    select 字段1 新字段1 , 字段2 新字段2                        

   (在修改列名的时候可以将as省去)

  f.限制数据显示的数量(limit)

    select * from 表名 where 条件 limit n,m                      

    (n代表开始的行的数,m代表能够显示的数量)

  g.排序 (order by)

    select * from 表名 where 条件 order by 字段                                                                         

      (表中字段按照从低到高排列)

    注意:order by 默认的排列方式为从低到高,若是要从高到低则在字段后面加desc

3.函数

  a.统计(count) 

    select count(*) from 表名                             

   (统计表中所有的行数)  

    select count(1)  from  表名                             

    (统计表中所有的行数)

  注意:以上两者的能达成一样的效果,但是count(1)效果更好,速度更快

    select count(字段名) from 表名                           

   (统计表中不为空的行数)

  b.最大值(max)和最小值(min)

    select max(字段),min(字段) from  表名

  c.平均值(avg)和求和(sum)  

    select avg(字段),sum(字段) from 表名

4.分组(group by)

    select * from 表名 group by 字段                              

   (按照字段分组)

    select * from 表名 group by 字段 having 条件                          

   (筛选出满足条件的组)

   注意:分组后的信息只能显示某个具体的信息,但不能显示组内所有信息

   大体语句:select * from 表名 where 条件 group by having 条件

5.多表查询(join)

  a.内连接

    select * from 表名1  inner join 表名2 on 表名1.字段=表名2.字段

  b.外链接     

    左连接

      select * from 表名1 as 表名1  left join 表名2 as 表名2 on 表名1.字段=表名2.字段          

      ( 以表1为准,左右两张表通过字段相同的链接在一起,但若是表1中有表2存在的字段,则还是会出现,不过某些字段却为NULL,若是表2存在表1的字段则会自动pass掉 。同时里面的as+表名也是可以省略不写)

    右连接

      select * from 表名1 as 表名1  right join 表名2 as 表名2 on 表名1.字段=表名2.字段   

    全连接

      select * from 表名1 as 表名1  full join 表名2 as 表名2 on 表名1.字段=表名2.字段  

6.子查询或者叫嵌套查询(in)

   select * from 表名1 where 字段1 in (select 字段1 from 表名2 where 字段2 in  (select 字段2 from 表名3 where 条件))   

   其等效的效果为:

   select * from 表名1 inner join 表名2 on 表名1.字段1=表名2.字段1 inner join 表名3 on 表名2.字段2=表名3.字段2 where 条件

  注意:在使用的时候,尽可能的使用英文,因为中文可能会出现乱码情况。且in会出现长度限制,但inner join却不会,而且inner join查询的结果可能会更多更全面,这个要根据自己需要

7.连接查询(union all)

  select 字段1 ,字段2,"xx"  from 表名1

  union all

  select 字段1 ,字段2,"xx" from 表名2                                  (将两张表连接起来,且表头为第一张的字段)

  注意:在使用union all的时候一定要保证两张表所查询出来的字段数量相等,且select all默认不去重 ,若是需要去重则讲all去掉,若是要将查询出来的字段标记则是需要在字段x的后面加逗号和双引号,引号里面则是你想要备注的值

8.时间查询(date)

  select  now();                          

  (查询当前时间)

  select current_timetamp                     

  (查询当前时间)

  注意:两者是一样的,只不过是不同版本

  select  date_sub(now(),interval 1month)              

  (按照当前时间提前一个月)

  select date_sub('2017-9-15',interval 1minth)            

  (查询2017-8-15 即按照2017-9-15提前一个月)

  select date_format(now(),"%Y")                 

  (格式化当前时间至年这个点)

  select date_format(now(),"%y")                 

  (格式化当前时间至年这个点)

  注意:这两个的差别是前面y一个输出4位(2017)后面则输出两位(17)

  select date_format(now(),'%m')                  

  (格式化当前时间的月,输出为9)

  select date_format(now(),'%d')                

   (格式化当前时间的日,输出为15) 

  select date_format(now(),'%T')                

  (格式化当前时间的时间,输出为13:52:12)

  select date_format(now(),'%Y-%m-%d-%T')          

   (格式化当前时间的月,输出为2017-9-15-13:52:12)

  

  

 

 

 

  

  

      

  

        

 

posted @ 2017-09-15 14:01  咫尺~~天涯  阅读(206)  评论(0)    收藏  举报