一、检索
多条SQL语句必须以分号;分隔
SQL语句不区分大小写
SQL语句可分成多行
*符号为通配符
检索单个列:
select 列名称 from 表名称
检索多个列
select 列1,列2,列3 from 表名称
检索所有列
select * from 表名称
检索不同值:列名称前加 distinct,distinct适用于其后的所有列。
select distinct 列名称 from 表名称;
检索部分行(不同数据库实现方案不同),以mysql为例:limit 5(检索行数) offset 5(从哪开始)表示从第5行起的5行数据。注意:第一个被检索的是第0行,所以limit 1 offset 1会检索第二行。另外mysql和sqlite支持简化版语句,limit 3 offset 4对应limit3,4
select 列名称 from 表名称
limit 5 offset 5;
注释:
1)
select 列名称 from 表名称 --这是注释
2)
#这是注释
select 列名称 from 表名称
3)代码形式的注释
/*代码*/
select 列名称 from 表名称
二、排序检索
使用order by子句,且需要作为select语句中最后一条子句。且order by用费检索的列排序数据也是合法的。
select 列名称 from 表名称
order by 列名称;
按多个列(有相同值)按需求排序
select 列1,列2,列3
from 表名称
order by 列2,列3;
按列位置排序:先按第二个列排,再按第三个列排(数量多容易搞混)
select 列1,列2,列3
from 表名称
order by 2,3;
指定排序顺序:降序关键字desc(descending缩写)desc只应用到直接位于其前面的列名,如果在多个列上进行降序排列,必须每一列指定desc关键字。升序关键字:asc(默认)
select 列1,列2,列3
from 表名称
order by 列2 desc,列3;
三、过滤数据
where子句:智能搜索条件,在from子句表名之后给出。下语句是只返回列2值为XXX的行。同事用order by和where子句时,where置前。
如果只与字符串类型的列进行比较,需要限定引号,比如where topid<>‘nmnc01’
select 列1,列2,列3
from 表名称
where 列2=XXX;
范围值检查:between,值用and分隔(闭区间)
select 列1,列2,列3
from 表名称
where 列2 between 2 and 9;
空值检查:null
select 列1
from 表名称
where 列1 is null;
四、高级数据过滤
组合where,用and或or关联。可以用多个and或or
select 列1,列2,列3
from 表名称
where 列2=XXX and 列3<=4;
select 列1,列2,列3
from 表名称
where 列2=XXX or 列3<=4;
组合and和or:圆括号有更高优先级,使用圆括号进行明确分组
select 列1,列2,列3
from 表名称
where (列2=XXX or 列3<=4)and 列4>='nmnc';
in语句:和or效果相同
select 列1,列2,列3
from 表名称
where 列2=XXX or 列3<=4;
等同于
select 列1,列2,列3
from 表名称
where 列2 in(XXX,列3<=4);
not操作符:否定其后所跟的任何条件。一般不单独用,和in等语句组合用
select 列1,列2,列3
from 表名称
where not 列2=XXX;
五、用通配符进行过滤:
like操作符
通配符%:'fish%'检索任意以fish起头的词,不管后面多少字符;'%fish%'检索匹配任何位置上包含文本fish的值。适用于搜索模式,且还能匹配0个字符,但需要注意后面所跟的空格。%无法匹配null的行。
select 列1,列2,列3
from 表名称
where 列2 like '%fish%';
select 列1,列2,列3
from 表名称
where 列2 like 'f%h';
通配符_:用途同%,但只匹配单个字符(因此可能会有遗漏)。
select 列1,列2,列3
from 表名称
where 列2 like '_ kg cow';
同
select 列1,列2,列3
from 表名称
where 列2 like '% kg cow';
通配符[]:用来指定一个字符集,必须匹配指定位置(只有access和SQL sever支持)
如,找出某列中以a或b开头的行。
select 列1
from 表名称
where 列1 like'[ab]%'
order by 列1;
否定集合:^作用同not,但可以简化语法
select 列1
from 表名称
where 列1 like'[^ab]%'
order by 列1;