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

猜你喜欢

转载自blog.csdn.net/qq_42179526/article/details/82953569