SQL server学习笔记

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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小半、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值