集合运算符
1、Union(并集)
两个数据进行Union操作时需注意以下的查询要求:
-
两个查询中列的数量必须相同
-
相应列的数据类型必须相同或兼容
Union自带去重效果,Union all则不会去重,Union all指查询并集所有
2、Intersect(交集)
SELECT
city
FROM sales.customers
INTERSECT
SELECT
city
FROM
sales.stores
ORDER BY
city;
查询的是两组数据中相同的数据
3、差积
Except比较两个查询的结果集,并返回第一个查询中不是由第二个查询输出的不同行。换句话说,Except从一个查询结果中减去另一个查询的结果集。
查询的结果集的规则:
-
两个查询中列的数量和顺序必然相同
-
相应列的数据类型必须相同或兼容
修改数据
1、Insert语句,新增
Insert语句中向表中添加新行
Insert into 需要添加的表名(需要添加的字段)
values (需要添加的数据)
例子:
insert into sales.promotions(promotion_name,discount,start_date,expired_date)
values(‘zhangsan’,0.22,’2022-01-01,‘2022-12-12’)
创建新表
create table 类型.表明(
xxxxxx int(数据类型) primary key(主键) identity(1,1),
xxxxxx varchar(255)(数据类型为varchar类型拥有255个字符) not null(不为空),
xxxxxx numeric(3,2) default 0,
xxxxxx date(日期类型) not null(不为空),
xxxxxx date(日期类型) not null(不为空)
)
Insert,新增多行数据
要一次向表中添加多行,请使用以下形式的 INSERT 语句:
INSERT INTO table_name (column_list)
VALUES
(value_list_1),
(value_list_2),
...
(value_list_n);
INSERT INTO 表名(column_list)
VALUES
(数据行1),
(数据行2),
...
(数据行n);
在此语法中,不使用单个值列表,而是使用多个以逗号分隔的值列表进行插入。
使用此形式的 INSERT 语句,一次可以插入的行数为 1000 行
Insert Into select语句
将其他表中的数据插入另一个表中,就可以使用Insert Into select语句
INSERT [ TOP ( expression ) [ PERCENT ] ]
INTO target_table (column_list)
select_query
INSERT [TOP(expression)[PERCENT]]
INTO 被插入的表名(返回column_list中指定对应的数据)
select_query
update语句,更新
update 表名
set 需要更新的行的名称 = 需要更新的行的名称+1,
需要更新的行的名称 = 需要更新的行的名称+1
dalete语句,删除
-
首先,指定要从中删除数据的表的名称
-
其次,在where子句中指定条件以选择删除的行,where子句是可选的。如果不指定where子句,则表中所有行都将被删除
delete from sales.taxes where state='Alabama'
delete from 需要删除的表名 where 删除的条件
merge语句
一个语句干完三件事情,它可以完成更新、插入、删除
merge
merge sales.category t using sales.category_staging s
on s.category_id = t.category_id
when not matched(不匹配情况下) /*匹配到的数据,按照新表的数据进行更新*/
then update set t.category_name=s.category_name,t.amount=s.amount
when not matched by target /*目标表中匹配不到的数据,在这插入*/
then insert(category_id,category_name,amount) /*插入时没有写向那个表插入,默认向目标表插入*/
values(s.category_id,s.category_name,s.amount)
when not matched by source /*源表中找不到的数据,在这里删除*/
then delete;
数据定义
SQL server数据类型
Character字符串:
数据类型 | 描述 | 存储 |
---|---|---|
char(n) | 固定长度的字符串。最多8000个字符 | |
varchar(n) | 可变长度的字符串。最多8000个字符 | |
varchar(max) | 可表长度的字符串。最多1073,741,824个字符 | |
text | 可表长度的字符串。最多2GB字符数据 |
Unicode字符串:
数据类型 | 描述 |
---|---|
nchar(n) | 固定长度的Unicode数据。最多4000个字符 |
nvarchar(n) | 可变长度的Unicode数据。最多4000个字符 |
nvarchar(max) | 可表长度的Unicode数据。最多536,870,912个字符。 |
ntext | 可表长度的Unicode数据。最多2GB字符数据 |
varchar与nvarchar比较
比较项 | varchar | nvarchar |
---|---|---|
字符数据类型 | 可变长度的非Unciode字符 | 可变长度,Unicode和非Unicode字符,比如:中文,日语和韩语 |
最大长度 | 最多8000个字符 | 最多4000个字符 |
字符大小 | 每个字符占用1个字节 | 每个Unicode/非Unciode字符占用2个字节 |
使用 | 当数据长度为可变长度列且,实际数据始终小于容量时使用 | 仅限存储,仅在需要Unciode支持时使用,例如:汉字,日语或韩文字符 |
Binary类型:
数据类型 | 描述 |
---|---|
bit | 允许0、1或NULL |
binary(n) | 固定长度的二进制数据,最多8000字节 |
varbingary(n) | 可变长度的二进制数据,最多8000字节 |
varbinary(max) | 可变长度的二进制数据,最多2GB |
image | 可变长度的二进制数据,最多2GB |
Number数字类型:
数据类型 | 描述 | 存储 |
---|---|---|
tinyint | 允许从0到255的所有数字 | 1字节 |
smallint | 允许从-32,768到32,767的所有数字 | 2字节 |
int | 允许从-2,147,483,648到2,147,483,647的所有数字 | 4字节 |
bigint | 允许介于-9,223,372,036,854,775,808和9,223,372,036,854,775,807之间的所有数字 | 8字节 |
decimal(p,s) | 固定精度和比例的数字。允许从-10^38+1到10^38-1之间的数字。p参数指示可以存储的最大位数(小数点左侧和右侧)。p必须是1到38之间的值。默认是18。s参数指示小数点右侧存储的最大位数。s必须是0到p之间的值,默认是0 | 8字节 |
numeric(p,s) | 固定精度和比例的数字。允许从-10^38+1到10^38-1之间的数字。p参数指示可以存储的最大位数(小数点左侧和右侧)。p必须是1到38之间的值。默认是18.s参数指示小数点右侧存储的最大位数。s必须是0到p之间。默认是0 | 5-17字节 |
smallmoney | 介于-214,748.3648和214,748.3647之间的货币数据 | 4字节 |
money | 介于-922,337,203,685,477.5808和922,337,203,685,477.5807之间的货币数据 | 8字节 |
float(n) | 从-1.79E+308到1.79E+308的浮动精度数字数据。参数n指示该字段保存4字节还是8字节。float(24)保存4字节,而float(53)保存8字节。n的默认值是53 | 4或8字节 |
real | 从-3.40E+38到3.40E+38的浮动精度数字数据· | 4字节 |
Date类型
数据类型 | 描述 | 存储 |
---|---|---|
datetime | 从1753年1月1日到9999年12月31日,精度为3.33毫秒 | 8bytes |
datetime2 | 从1753年1月1日到9999年12月31日,精度为100纳秒 | 6-8bytes |
smalldatetime | 从1900年1月1日到2079年6月6日,精度为1分钟 | 4bytes |
date | 仅存储日期,从0001年1月1日到9999年12月31日 | 3bytes |
time | 仅存储时间。精度为100纳秒 | 3-5bytes |
datetimeoffset | 与datetime2相同,外加时区偏移。 | 8-10bytes |
timestamp | 存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp基于内部时钟,不对应真实时间,每个表只能有一个timestamp变量 |
delete from sales.visits
用delete from删除的数据可以通过日志找回
truncate table sales.visits
用truncate tabl可以删除表内所有值并重置标识值,但是表内的数据将
其他数据类型(了解)
数据类型 | 描述 |
---|---|
sql_variant | 存储最多8000字节不同数据类型的数据,除了text、ntext以及timestamp |
uniqueidentifier | 存储全局标识符 |
xml | 存储xml格式化数据。最多2GB |
cursor | 存储对用于数据库操作的指针的引用 |
table | 存储结果集,供稍后处理 |