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)

浙公网安备 33010602011771号