From 777ff79db9e612f2bdcf6b7b4609f7d736c4bf64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9C=E6=B1=9F=E5=98=89=E5=85=B4=E2=80=9D?= <“1994738974@qq.com”> Date: Fri, 2 Sep 2022 10:28:32 +0800 Subject: [PATCH] 0 --- ...72\350\241\250\345\273\272\345\272\223.md" | 149 ++++++++++++++++++ ...76\344\270\211\350\214\203\345\274\217.md" | 39 +++++ 2 files changed, 188 insertions(+) create mode 100644 "44\346\261\237\345\230\211\345\205\264/\347\254\224\350\256\260/8.31\347\254\254\344\270\200\350\212\202\350\257\276\345\244\215\344\271\240\350\257\276\345\273\272\350\241\250\345\273\272\345\272\223.md" create mode 100644 "44\346\261\237\345\230\211\345\205\264/\347\254\224\350\256\260/9.1\347\254\254\344\272\214\350\212\202\350\257\276\344\270\211\350\214\203\345\274\217.md" diff --git "a/44\346\261\237\345\230\211\345\205\264/\347\254\224\350\256\260/8.31\347\254\254\344\270\200\350\212\202\350\257\276\345\244\215\344\271\240\350\257\276\345\273\272\350\241\250\345\273\272\345\272\223.md" "b/44\346\261\237\345\230\211\345\205\264/\347\254\224\350\256\260/8.31\347\254\254\344\270\200\350\212\202\350\257\276\345\244\215\344\271\240\350\257\276\345\273\272\350\241\250\345\273\272\345\272\223.md" new file mode 100644 index 0000000..a93fe02 --- /dev/null +++ "b/44\346\261\237\345\230\211\345\205\264/\347\254\224\350\256\260/8.31\347\254\254\344\270\200\350\212\202\350\257\276\345\244\215\344\271\240\350\257\276\345\273\272\350\241\250\345\273\272\345\272\223.md" @@ -0,0 +1,149 @@ +### 1.建表建库 + +1,创建数据库 create database+数据库名称 + +2,使用数据库 use +数据库名称 + +3,创建表 create table +表名 字段1+数据类型+属性+约束 ...... ==(不为空not null;不重复unique;默认default;检查check 主键 primary key 外键 references) + +### 2,增加 insert (into)...values... + +1,插入数据库 insert (into)+表名(字段1,....) values('字段1',.....) + +2,增加外键 外键字段+数据类型+foreign key ==references==+外键表名(外键字段) + +3,排序 select *from +表名+order by +字段+==desc(降序)(默认升序asc)== + +4,消除重复行 select distinct +字段 from +表名 + +### 3,删除 + + ==drop table +表名== + +### 4,修改update + +update + 表名称 + set + 列名称 = 新值 where 列名称 = 旧值 + +update + 表名称 + set +add+ 列名 +类型 +约束 + +update + 表名称 + set +drop +column+列名 + +### 5.查询 + +#### 1.基础查询 + +#### 2.条件查询 + +3.**SQL中常用运算符** + +``` +=:等于,比较是否相等及赋值 +!=:比较不等于 +>:比较大于 +<:比较小于 +>=:比较大于等于 +<=:比较小于等于 +IS NULL:比较为空 +IS NOT NULL:比较不为空 +in:比较是否在其中 +like:模糊查询 +BETWEEN...AND...:比较是否在两者之间 50-100 BETWEEN 50 AND 100 +and:逻辑与(两个条件同时成立表达式成立) +or:逻辑或(两个条件有一个成立表达式成立) +not:逻辑非(条件成立,表达式则不成立;条件不成立,表达式则成立) +``` + +#### 4.模糊查询 + +模糊查询使用like关键字和通配符结合来实现,通配符具体含义如下: + +``` +%:代表匹配0个字符、1个字符或多个字符。 +_:代表匹配有且只有1个字符。 +[]:代表匹配范围内 +[^]:代表匹配不在范围内 +``` + +#### 聚合函数 + +SQL SERVER中聚合函数主要有: + +``` +count:求数量 +max:求最大值 +min:求最小值 +sum:求和 +avg:求平均值 +``` + +ROUND函数用法: + +``` +round(num,len,[type]) +其中: +num表示需要处理的数字,len表示需要保留的长度,type处理类型(0是默认值代表四舍五入,非0代表直接截取) +select ROUND(123.45454,3) --123.45500 +select ROUND(123.45454,3,1) --123.45400 +``` + +#### 5.SQL中常用的时间函数 + +``` +select DATEDIFF(day, '2019-08-20', getDate()); --获取指定时间单位的差值 +SELECT DATEADD(MINUTE,-5,GETDATE()) --加减时间,此处为获取五分钟前的时间,MINUTE 表示分钟,可为 YEAR,MONTH,DAY,HOUR +select DATENAME(month, getDate()); --当前月份 +select DATENAME(WEEKDAY, getDate()); --当前星期几 +select DATEPART(month, getDate()); --当前月份 +select DAY(getDate()); --返回当前日期天数 +select MONTH(getDate()); --返回当前日期月数 +select YEAR(getDate()); --返回当前日期年数 + +SELECT CONVERT(VARCHAR(22),GETDATE(),20) --2020-01-09 14:46:46 +SELECT CONVERT(VARCHAR(24),GETDATE(),21) --2020-01-09 14:46:55.91 +SELECT CONVERT(VARCHAR(22),GETDATE(),23) --2020-01-09 +SELECT CONVERT(VARCHAR(22),GETDATE(),24) --15:04:07 +Select CONVERT(varchar(20),GETDATE(),14) --15:05:49:330 +``` + +**时间格式控制字符串:** + +| 名称 | 日期单位 | 缩写 | +| ------------ | ----------- | --------- | +| 年 | year | yyyy 或yy | +| 季度 | quarter | qq,q | +| 月 | month | mm,m | +| 一年中第几天 | dayofyear | dy,y | +| 日 | day | dd,d | +| 一年中第几周 | week | wk,ww | +| 星期 | weekday | dw | +| 小时 | Hour | hh | +| 分钟 | minute | mi,n | +| 秒 | second | ss,s | +| 毫秒 | millisecond | ms | + +#### 6.分组查询 group by + +#### 7.连接查询 inner join on + +- 内连接(自连接) select +表1.列1 from 表1 inner join 表2 on 表1.列=表2.列 ..... (where+条件;group by+字段;having+条件;order by+字段) +- 左连接 select +表1.列1 from 表1 left join 表2 on 表1.列=表2.列 left join 表3 on 表2.列=表3.列 ..... +- 右连接 select +表1.列1 from 表1 right join 表2 on 表1.列=表2.列 right join 表3 on 表2.列=表3.列 ..... + +#### 8.并集查询(用于两个select查询之间) + +select ...... 1,union (不允许有重复列) 2,union all (允许有重复列) select...... + +- 交集查询(用于两个select查询之间) select..... intersect(将两个结果集中相同的记录取出来成为一个新的结果集) select..... +- 减集查询(用于两个select查询之间) select.... except(比较两个结果集,将except关键字前的结果集除去交集部分而组成的新的集合) select.... + +#### 9.子查询 + +子查询;一个select-from-where语句称为一个查询块,将一个查询块嵌套在另一个查询块的 where字句或者having子句短语的条件中的查询称为子查询(嵌套查询)。 注意; + +- 可以使用子查询的位置:where,select,having,from +- 不可以使用子查询的位置:group by +- 主查询和子查询可以不是同一张表 +- 一般不在子查询中使用排序(但是在top-n问题分析中必须对子查询使用排序) +- 一般先执行子查询,再执行主查询(相关子查询除外) +- 单行子查询只能使用单行操作符;多行子查询只能使用多行操作符 +- 注意:当子查询为null值的问题 \ No newline at end of file diff --git "a/44\346\261\237\345\230\211\345\205\264/\347\254\224\350\256\260/9.1\347\254\254\344\272\214\350\212\202\350\257\276\344\270\211\350\214\203\345\274\217.md" "b/44\346\261\237\345\230\211\345\205\264/\347\254\224\350\256\260/9.1\347\254\254\344\272\214\350\212\202\350\257\276\344\270\211\350\214\203\345\274\217.md" new file mode 100644 index 0000000..9018de5 --- /dev/null +++ "b/44\346\261\237\345\230\211\345\205\264/\347\254\224\350\256\260/9.1\347\254\254\344\272\214\350\212\202\350\257\276\344\270\211\350\214\203\345\274\217.md" @@ -0,0 +1,39 @@ +# 1.三范式 + +## 1.第一范式:列不能再分 + +1.每一列属性都是不可再分的属性值,确保每一列的[原子性](https://so.csdn.net/so/search?q=原子性&spm=1001.2101.3001.7020) + +2.两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据 + +## 2.第二范式(2NF)(字段)属性完全依赖于主键 + +第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主键 + +## 3.第三范式(3NF)(字段)属性不依赖于其它非主属性 属性直接依赖于主键 + +数据不能存在传递关系,即每个属性都跟主键有直接关系而不是间接关系。像:a-->b-->c 属性之间含有这样的关系,是不符合第三范式的。 + +# 4.E-R 图简介 + +E-R :Entity Relationship Diagrams(实体关系模型) +E-R图:实体-联系图 +E-R图可以认为是关系模型的雏形,每个实体是一张表,实体与实体之间的关系可以合并到其中一个实体中,也可以是另外一张表,关系表和相关的实体表是通过主键或外键来联系的。 + +## 1.E-R图3个要素:实体,属性,关系。 + +实体:用矩形表示,矩形框内写明实体名。 + +属性:用椭圆形表示,椭圆内写明属性名称,并用连线与实体连接起来。如果属性较多,为使图形更加简明,有时也将实体与其相应的属性另外单独用列表表示。 + +联系:用菱形表示,菱形框内写明联系名,并用连线分别与有关实体连接起来,同时在连线旁标上联系的类型。 + +连线:实体和属性之间、实体与联系之间、联系与属性之间用直线连接,并在直线上标注联系的类型。(注意:对于1:1的联系,要在两个实体连线方向各写1,1:n关系的,要在一的方向写1,多的方向写N;对于N:M关系的,则要在两个实体连线方向各写N,M) + +## 2.E-R图设计步骤 + +确定所有的实体集合 +选择实体集应包含的属性 +确定实体集之间的联系 +确定实体集的关键字,用下划线在属性上表明上表明关键字的属性组合 +确定联系的类型,在用线将表示联系的菱形框联系到实体集时,在线旁注明1或N来表示联系的类型 -- Gitee