1.数据的类型
归纳了比较常用的几种:具体可参照这个博客内容:https://blog.csdn.net/iteye_20659/article/details/82487398
数据类型 | 具体描述 | 占用字节 |
char( ) | 固定长度的字符串。最多 8,000 个字符。 | 一个字符占1个字节,尾端空白字符保留 |
varchar( ) | 可变长度的字符串。最多 8,000 个字符(4000个汉字) | 一个字符占1个字节,尾端空白字符删除 |
varchar(max) | 可变长度的字符串。最多 1,073,741,824 个字符。 | 一个字符占1个字节,尾端空白字符删除 |
nchar() | 固定长度的 Unicode 数据。最多 4,000 个字符。 | 一个字符占2个字节,尾端空白字符保留 |
nvarchar( ) | 可变长度的 Unicode 数据。最多 4,000 个字符。 | 一个字符占2个字节,尾端空白字符删除 |
binary( ) | 固定长度的二进制数据。最多 8,000 字节。 | 在存储时,sql server会另外增加4个字节,尾端空白字符会保留 |
smallint | 允许从 -32,768 到 32,767 的所有数字。 | 2 字节 |
tinyint | 允许从 0 到 255 的所有数字。 | 1 字节 |
datetime | 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒 | 8 字节 |
date | 仅存储日期YYYY-MM-DD。从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 | |
time | 仅存储时间hh:mm:ss[.nnnnnnn]。精度为 100 纳秒 | |
xml | 存储 XML 格式化数据。最多 2GB。 | |
sql_variant | 存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp。 |
一些解释 ~~:
1.定长或变长
定长就是长度固定,当要保存的数据长度不够时将自动在其后面填充英文空格,使长度达到相应的长度;有var前缀的,表示是实际存储空间是动态变化的,比如varchar,nvarchar变长字符数据则不会以空格填充。
2.Unicode或非Unicode
数据库中,英文字符只需要一个字节存储就足够了,但汉字和其他众多非英文字符,则需要两个字节存储。如果英文与汉字同时存在,由于占用空间数不同,容易造成混乱,导致读取出来的字符串是乱码。Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。而前缀n就表示Unicode字符。
varchar(20)存储字母20个 汉字存储10个
nvarchar(20)存储字母20个 汉字存储20个(一般就用它来存汉字内容)
varchar() 牺牲性能,节省空间;char()浪费空间,提升性能
一般应用的数据类型:
2.设置主键:
尽量选择单个为主键,主键设置以后这一列不允许为空,尽量选择数值更新少的列作为主键,若条件需要可设置多列同时作为主键
使用标识列 表中没有合适的列作为主键(一般尽量避免使用多列同时作为主列) 使用标识列作为主键,设置标识列的方法:插入一列设置为id,更改标识规范中的标识增量和标识种子(起始值)即可
3.外键的建立:
- 在建表的时候要注意,要建立关系的列的数据类型一定要相同
- 当主表中没有对应的记录时,不能将记录添加到子表
- 不能更改主表中的值而导致子表中的记录孤立
- 子表存在与主表对应的记录,不能从主表中删除改行
- 删除主表前,先删子表
4.一些约束:
检查约束的表达式
5.SQL的组成
DML(数据操作语言):插入 ,删除,修改数据库中的数据
DCL(数据控制语言):控制存取许可,存取权限
DQL(数据查询语言):查询数据库中的数据
DDL(数据定义语言):建立数据库,数据对象和数据表的列
运算符中 = 既表示等于又表示赋值
直接插入数据:
insert into Student(StudentID,Login,StudentName,Sex,Grade)
values('123344','湖北','小星','男',1)
将现有表中的数据添加到已存在的表中去:
insert into<已创建表的表名>(列名) 例:insert into AdressList(姓名,地址,电子邮件)
select<列名> select Sname,Saddress,SEmail
from<源表名> form Students
将现有表中的数据添加到新表中去:
select(列名) 例: select Students,Sname,Students,SAddress,Students,SEmail
into<表名> into AdderssList
from<源表名> from Students
合并数据进行插入:
insert into<表名>(列名) 例:insert students(SName,SGrade,SSex)
select<列名>union select '张可',7,1 union
select<列名>union select '王可',5,2 union
.....
select<列名>(最后一个不加union) select '惠子 ',9,3
使用update进行数据更新(修改):
update 表名 set 列名=更新值,列名=列新值,.....[where 更新条件]
例:update Student set Ssex = 0
update Students
set SAddress = ' 上海松江'
where SAddress = '上海黄浦'
update Scores
set Scores = Scores + 5
where Scores <= 95
数据库查询:
select < 列名>
from<表名>
[where<查询条件表达式>]
[order by<排序的列名>[asc表示升序或desc表示降序]]
列名称 | 表名 | 过滤条件 | 排序条件 |
select Scode SName SAdderss | form
Students | where
SSex = 0 | order by
SCode |
实现过程:
select SCode,SName,SAdderss,
from Students
where SSex = 0
order by SCode
查询全部的行和列(全部用*):
select * form Students
select * form Course
模糊查询:
like查询适用于字符串不适用于数字
通配符 | 解释 | 示例 | 符合条件的值 |
— | 一个字符 | a like 'c_' | cs,cd等 |
% | 任意长度的字符 | b like 'co%' | const,coke等 |
[ ] | 括号中所指定范围内的一个字符 | c like '0w0[1-2]' | 9w01或9w02 |
[^] | 不在括号中所指定范围内的一个字符 | d like '9wo[^1-2]' | 9w03或9w07 |
聚合函数:
COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
多个聚合函数一起使用进行查询:
select avg(SCore) as 平均成绩,max(Score) as 最高分,min (Score) as 最低分
from Score
where Score >= 60
sql server函数:
- 字符串函数
查询博客:https://blog.csdn.net/qq_34758475/article/details/81384389
- 日期函数
查询博客:https://blog.csdn.net/qq_36260310/article/details/79695613
- 数学函数
查询博客:https://blog.csdn.net/baidu_32731497/article/details/51470026
- 系统函数
查询博客:https://blog.csdn.net/baidu_32731497/article/details/51471745