当前位置: 代码迷 >> 综合 >> sqlsever
  详细解决方案

sqlsever

热度:52   发布时间:2023-11-20 22:40:54.0

 

Table(表):关系

Column也叫列或者字段FIELD,

Row(行)元祖

主键(Primary Key)

主键就是数据行的唯一标识

特点:不能重复

            不允许为null

一个表中只能有一个主键。

如何选择主键:

1.不允许为空的列

2.没有重复的列

3.与实际业务没有关系的列(逻辑主键)

4。稳定的列。

5.选择单列作为主键。

6.尽量选择数字类型和比较小的列作为主键。

7.每一种表中都应该有主键。

外键(ForeignKey)

当把数据拆分成两张表来存储的时候,每个表中都有自己的主键。

引用另一张表中的列的“外键列”,有外键列的表叫做主键表。

常用数据类型:

1.image类型,用来存储二进制数以byte[]的形式

2.binary,用来存储二进制数

2.字符串类型

char(3)长度只能为3个字节

nchar(3)长度只能为3个字符,可以存储所有双字节字符。

varchar(3)长度小于3个字节,长度可变,

nvarchar(3)长度小于3个字符,长度可变,可以存储所有双字节字符。建议只要有中文就使用nvarchar。

text,存储一篇文章,以字节的形式,2005之后一般使用varchar(max)代替。

ntext,存储一篇字符文章,以字符的形式

varchar(max),长度为4个G的字节类型

nvarchar(max),长度为4个G的字符类型

SQL主要分类:

    DDL:(数据定义语言,建表、建库等语句):create drop alter 

    DML:(数据操作语言):select insert update delete等语句

    DCL:(数据控制语言):GRANT 授权、RECOKE取消授权。

                

 

常用SQL命令语句:

 

 

1.create database mytest(创建数据库)

    drop database mytest(删除数据库)

2.create table student(创建表)

    drop table student(删除表)

3.使用(if exists ---creat table---)语句创建表 

3.alter table 表名(修改表结构)

修改表列的信息:

为表的列添加约束:

 

一次添加多个约束

创建表的时候添加约束:

 

为表的列删除所有约束:

 

表中数据操作

1.插入数据 (向表中列插入数据)

格式:insert into 表名

插入所有值的时候可以省略列名:

向自动编号列插入值的功能:(注意:插入之后,之后的编号是以插入的值为基础,自动编号不会往回走)

如果数据库默认排序规则不是中文的话,那么插入中文就会乱码,如何解决?

2.更新数据:

更新表中数据的语句(update 表名.......set......where 条件)

3.删除数据:

delete 表名:(自动编号并没有恢复到默认,任然继续编号)

格式:delete 表 where 条件

删除所有:

条件删除:

truncate table 表名:

4.查询数据:

 

格式(select XX from 表 where 条件)

给列起别名as:两种方式

 

 

查询前几行top以及去重查询distinct

 

distinct:

top:

排序(order by 名)

asc升序排序、desc降序排序

语句的先后顺序:

按照表达式进行排序:

 

条件查询:

模糊查询:

 

通配符:

空值null处理:

5.聚合函数:

max(最大值)、min(最小值)、avg(平均值)、sum(求和)、count(记数)

当求得的平均值是小数的时候,可以在求和之前*1.0,这样的话就可以求得小数平均值了。

group by (分组)

需要注意的是:分组之后,表中的列只有分组之后的那一列可以存在select 中。不可以存在其他的列。

HAVING(对分组之后的每一列数据进行筛选)

 

 

语句的执行顺序:

类型转换(cast convert):

 

cast(expression as data_type) 

convert(data_type,expression,[style])

联合结果集

union

union all

案例:

查询平均分,最高分,最低分的三个表现形式:

像表中一次插入多条数据三种方法:

约束:

常见约束:

 

自增长约束:identity(种子,增量)在mysql中是auto_increment

                        

 

局部变量:

声明局部变量语法:

DECLARE @variable_name DataType

其中 variable_name为局部变量的名称,DataType为数据类型。

给局部变量赋值有两种方法:

1、SET @variable_name=value

2、SELECT @variable_name=value

两者的区别:

SET赋值语句一般用于赋给变量一个指定的常量,

SELECT赋值语句一般用于从表中查询出数据然后赋给变量。

 

 

 

 

函数:

 

字符串函数:

日期函数:

 

 

 

 

 

 

 

 

 

 

inner join 、left join 、right join、full join之间的区别?

假设有A和B两张表

内连接:inner join   表示把AB表的记录相符都显示出来,把AB表不符合条件的都排除

外连接分三种,左连接(LEFT OUTER JOIN)、右连接(RIGHT OUTER JOIN)、全连接(FULL OUTER JOIN),

1.A LEFT OUTER JOIN B表示把A表的记录都显示出来,把B表符合条件的结果集显示出来,不符合条件的用NULL表示。

2.A RIGHT OUTER JOIN B表示把B表的记录都显示出来,把A表符合条件的结果集显示出来,不符合条件的用NULL表示。

3.A FULL OUTER JOIN B 表示把A表和B表的记录都显示出来,不符合条件的用NULL表示。

 

 

 

 

 

如何连接数据库?

打开运行输入services.msc回车,找到下面这条,启动。