1、 基础sql语句
sql语句字符串用单引号,字段名关键字是大小写不敏感的,但是字段值还是区分大小写的。
分类 DDL(数据定义语言) DCL(数据控制语言) DML(数据操作语言)
DDL: 数据定义语言,主要包括create ,alter ,drop 语句。
DCL: 数据控制语言,主要包括grant ,revoke语句,用于控制用户对数据的访问权限
DML: 数据操作语言,主要包括select ,insert,update,delete语句,用来对数据进行选择,添加,
更新,删除,是我们最常用的一些语句
select 语法 用来从数据库中查询符合条件的数据
select 字段名1,字段名2
from 表名
where 查询条件
insert语句,用来向数据库中插入数据
insert into 表名(字段名1,字段名2)
values (值1,值2)
注意 ,表名后的字段列表和values后的值列表必须是一一对应的,如果我们没有写字段名,则默认是向
表中的所有字段添加数据,那么值列表必须和数据库表中的字段顺序一致。
update语句 用来更新数据库中的数据
update 表名
set 字段名1 = 值1 , 字段名2 = 值2
where 查询条件
delete语句 删除数据
delete from 表名
where 删除条件
注意,如果省略了where条件,那么就会删除表中的所有语句 , 慎用
delete和drop的区别在于,delete值删除数据,并不删除表,drop则是将表本身删除。
空值处理 null
null值代表不知道,并不是0 ,也不是‘’空字符串,null值参与任何运算得到的结果都是null
2、select 语句加强
列别名 as
select 字段名1 as 别名1 ,字段名2 as别名2
from 表名
where 查询条件
聚合函数 select中的字段名不仅可以直接显示,还可以参与各种运算,我们可以使用各种聚合函数
sum()取字段中符合查询条件的所有值的和
count()取和服查询条件的总行数
max() min()取字段中符合查询条件的额最大值与最小值
排序 order by 对查询结果进行排序 desc代表降序,asc代表升序
注意 order by 后面的字段名必须在select 列表中出现过,另外,order by 后面的 字段可以不一定只有一个,可以有多个,并可以单独指定他们的排序方式,另外 ,order by 语 句必须出现在where语句之后
select 字段名1,字段名2.。。。 from 表名
where 查询条件
order by 字段名 [desc|asc]
通配符过滤 like
单字符匹配 _ 比如 _aaa 表示以任意字符开头,后面为aaa的字符
多字符匹配 % 比如 %aaa 表示以0或任意多个字符开头,以aaa结尾的字符
数据分组 group by
select 字段名1,字段名2.。。。 from 表名
where 查询条件
group by 字段名 1,字段名2
注意 select列表中的字段必须全部出现在group by 的字段列表中,当然,select列表中的 聚合函数除外 ,group by 也要出现在where字句后,但要在order by 之前
group by 还用到了一个having字句 having字句用来对分组后的数据进行选择,having字句中 可以出现聚合函数,而where字句是不能出现聚合函数的。和group by 后面的字段列表相同, having字句中出现的字段名必须也在select列表中出现,
having字句一般是紧随group by字句出现的。
限制结果集的行数
可以使用top 行数选取结果集中的前几行。
如 select top 5 * from 表名 where 查询条件; 这条语句将会输出满足查询条件的前5条 数据
也可以使用ROW_NUMBER()函数 ,
语法如下
select ROW_NUMBER( partition by 字段名1 order by 字段名2)from 表名 where 查询条件
partition by 字段名1表示将符合where条件的结果集按照字段名1来分组。
order by 字段名2 表示将分组后的数据按字段名2来排序。
上面这条语句的完整意思就是根据where查询条件选出结果集,然后将结果集按照字段名1分组 ,分组内按照字段名2排序,并给每条记录产生一个序号。
我们使用产生的这个序号和子查询就可以来进一步筛选结果集中的任意范围内的数据。
抑制重复数据 distinct
dintinct用于将结果集中的重复行删除。
select distinct 字段1,字段2 from 表名 where 查询条件;
注意 distinct紧跟在select关键之后面,是对所有查询字段的组合来判断是否重复,比如上 面这条语句,是将所有字段1和字段2都相同的行进行删除重复行,只有字段1相同,字段2不同 不会被判断为重复行
结果集的联合 union 和union all
union和union all 用来联合两个结果集,产生一个新的查询结果集,两个结果集的字段个 数和字段类型必须相同,字段名可以不同,他们的不同之处在于,union会自动删除两个结果 集中的重复行 ,而unnion all 不会删除重复行。
3、系统函数
数学函数
abs() 求绝对值
ceiling() 舍入到最大整数 即舍入到大于参数的最小整数 如ceiling(3.88)返回4
floor() 舍入到最小整数 即舍入到小于参数的最大整数 floor(3.88)返回3
round() 四舍五入 第二个参数表示精度,表示要保留几位精度。
字符串函数
len() 计算字符串的长度
lower() upper() 转换大小写
ltrim()删除左边空格,rtrim() 删除右边空格;
substring(string,startposition,length)取子字符串,string表示被取得字符串,
startposition表示开始位置,length表示截取的长度。
日期函数
getdate() 获取 当前日期
dateadd(datepart,number ,date)计算增加以后的日期
datepart表示计量单位 ,是年,月还是日,number表示增量,而date表示待计算的日 期
datediff(datepart,startdate,enddate)计算两个日期之间的差额,datepart的取值和 dateadd()函数中类似,startdate开始日期,enddate结束日期
datepart(datepart,date)返回一个日期的特定部分。
类型转换函数
cast(expression as data_type) 将expression的值转换为data_type类型
convert(data_type,expression)将expression的值转换为data_type类型
空值处理函数
isnull(expression,value),如果expression为空,则返回value,如果不为空,则返回自己。
流控函数
case expression
when value1 then returnvalue1
when value2 then returnvalue2
when value3 then returnvalue3
else returnvalue4
end
或者
case
when expression then returnvalue1
when expression then returnvalue2
when expression then returnvalue3
else returnvalue4
end
4、索引 index
索引的好处是有可能提高查询效率,但是会占用空间,在insert update时可能降低效率。
CREATE INDEX 索引名
ON 表名 (字段名1[ASC|DESC][, 字段名2 [ASC|DESC], ...])