SQL servr——基础篇之DML增删改查
DML:数据操作语言
用于添加、更新、删除和查询数据库中的语言
添加——insert语句
向数据表中插入新的行(记录)可多行可一行
语法:insert [into] 表名 [(column1,.....)] values(value1,value2......)【添加一行[]可省略】
【添加多行】
一、insert [into] 表名 [(column1,.....)]
select value1,vaule2,...union
....
select value1,vaule2,...
eg:insert into Employee (Name,Gender,Age,Rank)
select 'joy','男',23,'201' union
select 'moy','女',23,'201'
二、insert into Employee values(值列表)
eg:insert into Employee values('joy','男',23,'201' ),('moy','女',23,'201' )
更新——update语句
更新表中数据
更新表中全部数据
根据指定条件更新部分数据
语法:
update 表名
set 字段=值,... --需要更改的字段及值
[where 条件] --更新的条件,若省略则更新该表中指定字段的所有值
or:表示条件任意成立
and:表示条件要同时成立
删除——delete语句
删除表中数据
删除表中全部数据
删除表中指定条件的部分数据
语法
delete [from] 表名
[where 条件]--省略时则删除表中的所有内容
注意:delete后只会删除表中的内容,对表结构无影响,有条件的删除语句针对整行数据
truncate table 表名 --清除表内容
查询——select语句
select * from 表名 --查询表中所有数据
select 字段 from 表名 --查询某一个或多个字段的数据,多字段之间用逗号隔开
select 字段 as 别名 from 表名 --为字段添加表名
select * into 备份后的表名 from 原始表名 --备份数据表
select distinct 字段 from 表名 --过滤某字段中的重复行,distinct关键字:用于过滤重复行
运算符
算术运算符:+、-、*、/、%
比较运算符:=、<、>、<>或!=(不等于)、>=、<=、is null(判断是否为空)、is not null(判断是否不为空)
逻辑运算符
in:判断是否在指定集合内
between...and...介于两者之间可以时数组,字符,日期
like:模糊运算符
- %:匹配0至多个任意字符
- _:任意一个字符
- []:指定一个字符的集合,指定一个字符或范围中的任意一个
- [^]:取^后以外的范围([]中的字符不是通配符)
——排序
order by 字段 排序方式(asc:升序,默认;desc:降序;多列——从左至右)
top n:返回查询集合前的n行数据
eg:select top 5 * from 表名 --返回前5行数据
——分组查询
group by 子句
将数据划分到不同的组中,实现记录分组查询
作用:通过一定的队则将一个数据集划分为若干嘞,然后经过若干个小区域进行统计汇总
eg:select 字段 count(*) from 表名 group by 字段
注意:1.group by子句通常和聚合函数一起使用;2.查询列一般时分组列或聚合函数列;3.select子句中的非聚合函数列一定要出现在group by子句的分组字段列表中
多字段分组和having子句
优先级:从左至右
having子句:指定分组后的筛选条件,放在group by子句后,常包含聚合函数
with rullup:用于在分组之后加一条汇总语句
having子句和where子句的区别
where:对结果集进行筛选
having:对分组的结果进行筛选
——连接查询
连接类型有:交叉连接、内连接、简单多表连接、自连接
作用:将多表做为一张表出现,当检索数据时通过连接查询可检索出源于不用表的信息,提高用户的灵活性
交叉连接(cross join)
语法:select * from 表1 cross join 表2 [where 表1.pk=表2.pk]
若省略where语句则成笛卡尔积,返回的行数为两表行数的乘积,列数为两表列数之和
内连接(inner join)
前提条件:两表有存在公共列
返回结果:仅返回匹配的数据
语法:select 字段 from 表1 [inner] join 表2 on 连接条件 [where 条件] --where可用and代替
连接条件:eg:表1.字段=表2.字段;通常一个主键一个外键,如果有别名则用”别名.字段“
简单多表查询(两两相连)
语法:select 字段 from 表1 join 表2 on 表1.字段=表2.字段 join 表3 on 表2.字段=表3.字段 [where 条件]
自连接
物理上为同一张表,逻辑上为两张表
语法:select * from 表1 别名1,表1 别名2 where 别名1.关系字段=别名2.关系字段
——子查询