我 的 笔 记
二维形式,多行多列,来组织数据的存储,时下流行的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处理。
本回答被提问者和网友采纳