SQL SERVER

我 的 笔 记

 

 

二维形式,多行多列,来组织数据的存储,时下流行的4种数据库都是关系型数据库,称之为关系型数据库,最后非关系数据库。

一张表,就是一张关系,一张关系就是一张表。

所有的列共同构成这张表的结构。

一张表分两个部分,一个是结构,另一个是数据。

除了结构以外,一行记录就是一个实体。

一列称之为一个字段。

一个数据库包含多张数据表

DBMS :DataBase Manager System 数据库管理系统、

DBS :DataBase System 数据库系统。包含数据库,数据库管理员还有人,三方。

CRUD 增删改查。

 

SQL server登入(.)代表的是本机。

 

以命令的方式来启动控制数据库的服务

 

步骤:停止服务 1.CMD 2.net stop mssqlserver

启动服务 1.CMD 2.net start mssqlserver

 

SSMS:数据库服务操作客户端。

 

数据库物理文件构成:

数据库就是一个物理磁盘文件。

 

数据文件.mdf或.ndf ,日志文件.ldf

 

一张表只记录现实生活中的一种事物

 

一个表只能设一个主键,每张表必有主键。

 

标识列的值由数据库自动维护

实际开发时标识列设为主键是常用的方式。

标识列必须是整形,整数,int类型

ID断档.

 

给数据完整性

保障表中数据正确的特性,叫做数据完整性,那么数据完整性是数据处理的前提。

数据的类型设定属于数据完整性的一部分。

完整性分为4种:

域完整性 实体完整性 引用完整性 自定义完整性

 

 

 

实体完整性:

1.保障表中每一条记录的唯一性,叫做实体完整性。通过主键约束,就可以起到实体完整性的约束。标识列同时可以作为主键。

2.唯一建的命名规范 uq_为前缀。

(一)唯一键于主键的异同:

4.相同点:都可以保证数据的唯一性。

5.不同点:主键永远只能有一个,而唯一键可以有多个。

 

 

域完整性:

1.通过进一步来限制字段的取值范围。

2.规格约束命名CK_开头。

 

引用完整性:

1. 通过一张表中的数据,去监控和他相关的另一张表中的数据是否合法,我们称之位引用完整性。

2.外键:某个字段在本表中不是主键,在另外一个表中却是主键,我们称之为外键。

3.引用外键的命名规范FK_开头。

引用完整性又称参照完整性

 

SQL=Structured Qurey Language=结构化的查询语言 第四代计算机语言(针对的是

DBMS发送指令)

 

SQL特点:

1.标准化(具有很高的统一性)

2.结构化--》使用时你没有必要要和C#一样详细告诉计算机每一步操作,你只需要告诉计算机你要做什么即可!

3.简单性

 

先解决一个问题:

在表的设计过程中如何去选择每个字段(列)对应的数据类型

数据库中主要类型:

1.数值类:

a.整形 :smallint int bigint

b.浮点型 float 没有double 定点类型:decimal(长度,小数的位数)

 

2.文本类型;

a.char=字符串, char相当于C#中的string

细分:

nchar(长度)

nvarchar(n)

char(n)

varchar(n)

text

ntext(n) 储存大文本(新浪的大片文章,小说,个人简历)

带n的表示采用unicon编码,不带n的采用默认的ASCII编码

unicon编码对于所有的内容(汉字 数字 字母 符号)均采用2个字节存储,而ASCII对于数字 字母 符号 采用一个字节 汉字采取两个字节. 推荐大家使用unicon编码,搜索提取效率高很多。

带var的表示可变长度,不带var的表示定长

定长的特点:浪费空间,节省时间

可变的特点:节省空间牺牲时间(效率)

3.bit---》C#中的boolean 1--》true 0---》false

4.日期类型Date ,Date Time

 

我们对一个表的数据操作只有 (增 删 改 查) 四个特点,简称是CRUD

 

DML(数据操作语言)

1.INSERT,UPDATE,DELTEE

DCL(数据控制语言)

1.GRANT,REVOK

DQL(数据查询语言)

1.SELECT

 

and=并且 or=或者 not=取反 is=是否 as=换名

 

SQL基本运算符:

算数运输:+-*/%,没有++

关系运算符:=,>,<,<>,<=,>=

区别C#相等比较== 而sql是一个=

C#中不等于!=而sql中有两种写法!=和<>(推荐)

 

C# SQL

&& and

|| or

! not

插入语法:

insert into studentinfo values(‘王五’,‘女’,‘139’,null,20,3)

insert into studentinfo (Name,Gender,Mobile,IsdangYuan,Age,Gread)

values(‘王五’,‘女’,‘13952350’,nu//ll,20,3)

INSERT[INTO]表名 [(列名)]VALUES(值列表)

表中有标识列,新增是不能给值的,一定会报错。

SQL中字符串是单引号,C#是双引号,数据库中的文本没有字符和字符串之分,所有文本统一使用单引号作为定界符,值列表中,多个值用逗号隔开。

 

注意:这条新记录的每个字段的值都要符合该字段的类型,长度

SQL注释是两个减号--单号注释,多行注释斜杠加星号,/*

is=是不是比较,而不是用=号比较

SQL语句不区分大小写。

TRUNCATE TABLE 这个命令删除记录后会标识列会重新编号。物理删除

使用UPDATE更新多列数据的时候只能使用一个SET并且用逗号隔开

 

 

SELECT查询语句:

1.查询语法

SELECT<列名>

FROM<表名>

[WHERE<查询条件表达式>] 筛选每一行的

[ORDER BY<排序的列名>[ASC或DESC]] asc升序,desc降序

 

2.如果查询某个表的多个列,列与列直接使用逗号间隔。

3.如果要查询每个表的所有列,没有必要一一列举,直接采用星号(*)代替,*==全选

4.一个查询语句中,只能写一个where。

5查询中的排序一定是对查询的结果进行顺序排列。

 

1.查询从subject表中查询所有学时50以上(包含)的所有课程,的课程名称和所对应的学时,并按照学时降序排序

2.查询s2阶段开设的课程全部信息

 

ORDER BY 排序的依据可以是列名,也可以写在这一列结果中的序号。

 

 

作业:

1.今天语法抄20遍,包括中文

2.针对学生表的查询 a.查询出学号为S1101003和S1101018的学号和姓名 性别 出生日期 四项内容

b.查询出九五年出生的学生全部信息

>='1995-01-01' and<='1995-12-31'

并按照出生日期升序排列

2.针对课程表的查询

查询Y2阶段学时小于40的课程的所有信息

 

更新语句:

UPDATE 表名 SET 列名 =更新值 [WHERE 更新条件]

 

删除语句:

DELETE FROM 表名 [WHERE 删除条件]

 

 

 

初学SQL四件套:

 

更新语句:

UPDATE 表名 SET 列名 =更新值 [WHERE 更新条件]

 

删除语句:

DELETE FROM 表名 [WHERE 删除条件]

 

插入语法:

insert into studentinfo values(‘王五’,‘女’,‘139’,null,20,3)

insert into studentinfo (Name,Gender,Mobile,IsdangYuan,Age,Gread)

values(‘王五’,‘女’,‘13952350’,nu//ll,20,3)

INSERT[INTO]表名 [(列名)]VALUES(值列表)

SELECT查询语句:

1.查询语法

SELECT<列名>

FROM<表名>

[WHERE<查询条件表达式>] 筛选每一行的

[ORDER BY<排序的列名>[ASC或DESC]] asc升序,desc降序

数据库中的NULL对应现实含有是不确定,不是C#中的空地址

 

别名的使用:

列明is 别名或者 ,别名=列名

 

常量列:

直接使用,'常量'

 

TOP 5 关键字 查询前五列 percent百分比

 

函数:

charindex(‘a’,abcda‘ 2)查找字符的下标

len(列名)查询长度 重要

upper(列名)查询大写

ltrm( ' ')去空格

right() 从右边截取

left(列名,1)='王' 从左边截取姓王的信息 重要

replace(列名,'河南','江西') 河南替换江西

stuff('abcdefg',3,5,'李')

 

日期函数: 重中之重

1.getdate

select getdate(); 无参

取得系统当前日期

2.dateadd

select dateadd (mm,4,'2017-9-13')有参

加上日期 mm=月份 yy=年 dd=日 hh=时 mi=分钟 ss=秒 dw星期

3.datediff

datediff(YY,'2017-3-11','2018-3-11')

计算日期

4.datename

select datename(dw,getdate())

指定部分的字符串

5.datepart

 

datepat (yy,brondate)=1995

 

 

数学函数

1.rand

返回0到1直接的随机值

2,abs

3ceiling

ceiling(23.1)

4.round(23.34560,0)

小数取值范围

5.floor

6,power(6.3)

6的三次方

7.sign(-900)

8.sqrt(49)

平方根

 

 

系统函数:

1.CONVERT

convert(varchar(6),123456)

字符串

注意:

只要用相连字符串的,优先进行算术运算

12+'34'=47

'12'+'34'=1234

 

2.CURRENT_USER

显示当前用户

3.DARALENGTH

 

4HOST_NAME

5.SYSTEM_USER

6.USER-NAME

 

 

where 编号 like '00[^8]%[AC]%'

like只实用于文本

 

NULL的值输入快捷键Ctrl+0

 

between:在两者之间

where 列名 between 60 and 80

 

in: 或者可以把or简写

in(1,2,3,4,5,6)

 

select 情况有两种 1.一一列出来. 2.运算该列比如 min(Score) 聚合运算

 

聚合运算:

min(Score);最小值

max(Score);最大值

count(Score);计算

num(Score);求和

avg(Score);求平均

 

多表连接查询:

需求:查询的信息分部在多个表中

1.多表连接需要满足一定的条件,主外键关联(这两个表一定要有主外键关联)

语法:

select 字段一,字段二,..........

form A表 inner join B表 on A表.公共字段=B表.公共字段

关键字:on ,join=连接 ,inner=内部的

 

笛卡尔积运算:对两个表中数据做相乘运算

 

 

GROUP group by分组

 

where条件是发生在分组之前的

 

having count(*)>22

having与where筛选 ,where是发生在分组前针对的是表中的每一条记录,having是发生在分组后针对的对象是每一组

having是与group by 依附配合使用

 

补充:1.insert into 表名 select ..........将查询的结果插入到指定的表中(注意:被插入的表必须事先创建好否则报错)

2.select 列表 into 表名..........

表示将某次查询的结果永久性的保存到一个新表中

(注意:保存查询结果的表必须是新表 否则报错)

3.select..........

uniom

select............

union

将多次查询的结果合并到一个结果中

(注意:这几个查询结果的结构必须完全一致,否则无法合并)

 

内部链接为默认 join

left join 左外连接

right join 右外连接

full join 全外连接

 

可以使用where来指定连接的条件,但是这个时候多表之间使用逗号间隔.(sql199的标准)

inner join(sql是2000标准 推荐使用)

 

别名:{

from subject s,grade g

where s.gradeid=g.gradeid

order by 1

}

在查询语句中,涉及到多表公共字段,必须明确指定是哪个表中的.

 

三表连接查询:

select 内容表列

from a表 inner join b表 inner join c表

on c的公共字段=b的公共字段

on b.公共字段=a的公共字段

注意:连接条件的书写顺序

 

SQL中 between and是包括边界值的,not between不包括边界值,不过如果使用between and 限定日期需要注意,如果and后的日期是到天的,那么默认为00:00:00 例如:and 后的日期为2013年3月24日,就等价于2013-3-24 00:00:00 ,那么2013-3-24 18:28:38的数据就差不到了,需要进行to_char处理。

本回答被提问者和网友采纳

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq2363894951

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

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

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

打赏作者

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

抵扣说明:

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

余额充值