网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

SQL基础

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
第一课:
    1.什么是数据库?
    数据库它是用来存放数据仓库。
    它是一组相关数据的集合。
    数据库由表,关系和操作对象组成。
    2.数据存储的发展历史:
    a.原始时期,甲骨文
    b.奴隶社会,大脑
    c.封建社会,纸
    d.计算机,磁盘的方式存放
    3.数据库发展:
    a.萌芽阶段--磁盘的方式存放数据
    b.初级阶段--层次,网状模型
    c.中级阶段--关系型数据库SQLServer2005
    d.高级阶段--关系对象型Oracle
    4.SQLServer的发展:
    3家公司(IBMSybaseMS)
    1988--》1992--》IBM--》1995--》2008
    5.数据库的数据的存放:
    表--行和列
    行--记录元祖实体(客观存在,可以被描述的事物)
    列--字段属性域
    6.如何管理数据库:
    SQLServer2005数据库管理系统(DBMS)
    a.打开服务。(建立数据库管理系统与磁盘数据库文件的联系)
    b.打开数据管理工具(身份验证)
    windows用户房东老板
    sa密码为空租房人
    7.如何创建数据库。
    很简单
    8.数据库的分类:
    系统数据库:
    master主要数据库存放的是数据库系统本身的一些配置信息。
    model模板数据库是创建其他数据库的模板,默认路径,默认大小,都是以model作为模板
    msdbms微软的意思,微软自己开发一系列的函数,存储过程。
    tempdbtempdb临时数据库,保存了一些操作时的临时文件
    用户数据库:
    用户自定义的数据库。
    9.数据库文件的分类:
    数据库文件(主要数据文件mdf,次要数据文件ndf)
    日志文件(ldf)
    创建一个默认的数据库,只会有两个文件一个mdf,ldf
    mdf主要文件:主要用来存放数据信息
    ndf次要文件:次要数据文件用来分担主要文件的压力的
    ldf日志文件:存放一些日志信息(用户的操作的跟踪)
    
    在一个数据库中,每个文件的个数:
    主要文件有且仅有一个
    次要文件可有可无
    日志文件必须要有一个,可以有多个
    10.数据库的创建时的配置:
    初始大小,
    自动增长,
    路径,
    数据库文件类型,
    数据库名称
    11.--GO代表批处理,它可以将GO语句以上的代码
    --作为一个批次传递给DBMS执行
    --作用:1.提高代码的执行效率2.控制代码的优先级
    --GO一般用在每一条建库建表的语句之后
    12.如何建表
    SQLServer里面的数据类型:
    数值类型:
    int4
    smallint2
    bigint8
    float8双精度注意:sqlserver中没有double
    real4单精度
    字符类型:
    char(8)'abcd'固定长度的数据类型。浪费空间
    varchar(8)'abcd'可变长度的数据类型。节约空间
    5000字节上限
    text大文本类型
    nchar,nvarchar,ntext
    以上三种:可以用来多存储一个编码格式:unicode编码。
    时间类型:
    datetime类型时间类型的存储格式:2011-9-179\17\2011
    bit类型:
    bit类型0,1注意:在数据库中没有true/false
    二进制类型:
    image
    货币类型:
    money
    usemaster--为什么首先要使用master数据库
    go
    ifexists(select*fromsysdatabaseswherename='emp')
    dropdatabaseemp
    go
    createdatabaseemp
    on--on代表数据文件组
    (
    name='emp_mdf',--逻辑名称
    filename='c:\emp.mdf',--物理名称
    size=3mb,--初试大小
    maxsize=10mb,--上限
    filegrowth=1mb--每次增长1Mb
    ),
    (
    name='emp_ndf',
    filename='c:\emp.ndf',
    size=3mb,
    maxsize=10mb,
    filegrowth=10%
    )
    logon
    (
    name='emp_ldf',
    filename='c:\emp.ldf',
    size=3mb,
    maxsize=10mb,
    filegrowth=10%
    )
    go
    第二课:
    数据的完整性:
    准确性+有效性=完整性
    怎么去维护数据的完整性呢?
    约束分类:
    1.实体完整性约束:(实体,行)
    a.主键约束:(单一主键,复合主键)唯一,非空
    举例:(编号都可以建主键)
    注意:在一张表只能有一条主键,但是主键可以建在多个列上。
    b.唯一约束:唯一。
    举例:(身份证,电话)
    c.标识列约束做了自动增长的限制(标识种子,递增量)
    注意:标识列不允许插值,他是自动增长的。
    2.域完整性约束:(域,列)
    a.数据类型约束。
    b.非空约束。
    c.默认值约束。
    d.检查约束。check约束eage>0andeage<100
    
    3.引用完整性约束:(两表之间关系的准确有效)
    
    外键约束:确保在子表中的数据,必须要来自于主表。
    empexam(eidint,escoreint)
    建了外键之后,在删除的时候,必须先删子表再删主表。
    4.自定义完整性约束:
    5.代码实现所有约束。
    useemp
    go
    ifexists(select*fromsysobjects
    wherename='studentexam')
    droptablestudentexam
    go
    ifexists(select*fromsysobjects
    wherename='studentinfo')
    droptablestudentinfo
    go
    createtablestudentinfo
    (
    stuidintidentity(1,1),
    stunamevarchar(20),
    stusexvarchar(20),
    stuageint,
    stucardvarchar(18),
    stujointimedatetime
    )
    go
    altertablestudentinfo--alter修改
    addconstraintpk_stuidprimarykey(stuid)
    go
    altertablestudentinfo
    altercolumnstunamevarchar(20)notnull
    go
    altertablestudentinfo
    addconstraintdf_stusexdefault'男'forstusex
    go
    altertablestudentinfo
    addconstraintck_stuage
    check(stuage>0andstuage<100)
    go
    altertablestudentinfo
    addconstraintuq_stucardunique(stucard)
    go
    altertablestudentinfo
    addaddressvarchar(200)--添加列
    go
    altertablestudentinfo
    altercolumnaddresstext--修改列
    go
    altertablestudentinfo
    dropcolumnaddress--删除列
    go
    createtablestudentexam
    (
    stuidint,
    stuscoreint
    )
    go
    altertablestudentexam
    addconstraintfk_stuidforeignkey(stuid)
    referencesstudentinfo(stuid)--添加外键
    go
    --references引用了studentexam
    第三课:
    --1.数据的导入导出
    --2.数据冗余:数据出现重复的现象。
    --数据冗余带来的问题就是:浪费磁盘的空间
    --但是这是一个矛盾问题。
    --3.sql代码:
    --sql结构化查询语言structedquerylanguage
    --sql1979IBM
    --sql语言行业标准,标准sql
    --Oralepl-sql
    --sqlservert-sqltransaction
    --基于事物的结构化查询语言
    --T-sql语言的分类:
    --DDL数据库定义语言defination
    --createdropusealter
    --DML数据库操作语言manager
    --insertdeleteupdateselect
    --DCL数据库控制语言control
    --grant授予revoke收回
    --其他一些功能函数,流程控制的语法
    --T-sql语言中运算符:
    1.关系运算符
    <,>,<=,>=,
    注意:赋值单等=,比较=
    不等于!=,<>
    2.逻辑运算符
    在java中与&;&;或||非!
    sql与and或or非not
    优先级:not>and>or
    3.通配符
    下划线'张_'一个任意字符
    百分号'张%'代表任意长度的字符
    中括号'张[0-9]'某个返回的任意一个字符
    中括号取非'张[^0-9]'不在0-9之内的任意一个字符
    
    card='湘A[0-9][0-9][0-9][0-9][0-9]'有问题
    注意:一定要使用like
    正确的写法:
    cardlike'湘A[0-9][0-9][0-9][0-9][0-9]'
    4.添加数据的语法:
    a.insertinto表名values(值,值,值,值)
    createtablestudentinfo
    (
    stuidintidentity,
    stunamevarchar(20),
    stusexvarchar(8)default'男',
    stuageint,
    stucardvarchar(18),
    stujointimedatetime
    )
    droptablestudentinfo
    select*fromstudentinfo--*号代表所有的列
    insertintostudentinfovalues
    ('zx','男',29,'43112345','2011-9-1')
    insertintostudentinfovalues
    ('mzh',default,20,'43012345','2011-9-1')
    --插值的时候要注意:
    1.标识列不要插值的。
    2.数据类型要一一对应,字符串和日期类型要单引号
    3.个数(列和值的个数)要对应
    4.如果有默认值的情况请使用default关键字
    5.添加的数据要满足先前定义好的约束
    b.insertinto表名(列,列,列,列)
    values(值,值,值,值)
    insertintostudentinfo
    (stuname,stusex,stuage,stucard,stujointime)
    values('yl','女',20,'43023456','2011-9-1')
    --修改语法
    update表名
    set列=列值
    where列=列值
    --请修改zx同学的性别为女,身份证为430110、
    updatestudentinfo
    setstusex='女',stucard='430110'
    wherestuname='zx'
    select*fromstudentinfo
    --请修改身份证以430开头的所有学员的性别为女
    updatestudentinfo
    setstusex='女'
    wherestucardlike'430%'
    --删除语法:
    deletefrom表名--删除所有数据
    deletefrom表名where列=列值--根据条件删除
    --删除学员编号为1的同学:
    deletefromstudentinfowherestuid=1
    select*fromstudentinfo
    --请删除性别为女,而且在2011-9-1号入学的同学
    deletefromstudentinfowherestusex='女'
    andstujointime='2011-09-01'
    insertintostudentinfo
    values('wjq','女',20,'43011111','2011-9-1')
    --标识列是一个消耗品,不能被恢复的
    --但有个语法可以恢复标识列
    truncatetablestudentinfo--删除
    --类似于格式化
    truncate和delete的区别
    效率高低
    清空种子可以不可以
    能否操作主表不能可以
    但是truncatetable最致命的缺点在于:
    truncatetable后面不能接条件,意味着它只能整表删除
    如果只能整表删除,意味着它不能删主表
    --查询
    usepubs
    --查询的语法
    --select*fromtitles
    --查询所有的列来自哪张表
    select*fromtitles
    --请查询titles表中的前3条记录
    selecttop3*fromtitles
    --请查询titles表中前一半的记录
    selecttop50percent*fromtitles
    --排序(升序和降序):
    select*fromtitlesorderbypriceasc
    select*fromtitlesorderbyprice--默认是升序
    select*fromtitlesorderbypricedesc
    --按两个列排序先按第一个列排,如果有重复,
    --在这个范围内排第二个列
    selectpub_id,pricefromtitles
    orderbypub_iddesc,pricedesc
    --请查询价格最贵的书籍的信息
    selecttop1*fromtitlesorderbypricedesc
    select*fromtitles
    whereprice=(selectmax(price)fromtitles)
    --为表来取别名:3种方式
    selecttitle_idas'书籍编号',
    title'书籍名称',
    '书籍类型'=[type]
    fromtitles
    --注意:type是关键字,又是列名
    --如果一个字既是关键字,又是列名请使用[]带区分
    --请查询价格为空的书籍的信息
    select*fromtitleswherepriceisnull
    select*fromtitleswherepriceisnotnull
    --请查询书籍名称以The开头的书籍信息
    select*fromtitleswheretitlelike'The%'
    --请查询书籍价格在10到20块之间的书籍信息
    select*fromtitleswhereprice>=10andprice<=20
    select*fromtitleswherepricebetween10and20
    between10and20包含了10和20这两个值
    注意:10和20,必须小的写前面,大的写后面
    --请查询出版时间在2000年到1998年出版的书籍信息
    select*fromtitleswherepubdate
    between'1998-1-1'and'2000-1-1'
    --请查询出版社为0736和0877出版的所有书籍的信息
    select*fromtitleswherepub_id='0736'or
    pub_id='0877'
    select*fromtitles
    wherepub_idin('0736','0877')
    --刚才讲的查询中
    --1.isnull
    --2.betweenand
    --3.like
    --4.in这四个语法是模糊性查询
    第四课:
    --简单的查询
    usepubs
    select*fromtitles
    selecttitle_idas'书籍编号',
    title'书籍名称',
    '书籍类型'=[type]
    fromtitles
    selecttop3*fromtitles
    selecttop30percent*fromtitles
    select*fromtitlesorderbypricedesc
    --按出版的价格总量来排序
    select*fromtitlesorderbyprice*royaltydesc
    --请查询价格在10到20之间的书籍的信息
    select*fromtitleswherepricebetween10and20
    --价格未定的书籍信息
    select*fromtitleswherepriceisnull
    --请查询价格最贵的书籍信息
    selecttop1*fromtitlesorderbypricedesc
    select*fromtitleswhereprice=
    (selectmax(price)fromtitles)
    --请查询出版日期在1991年到2000年之间的书籍信息
    select*fromtitleswherepubdatebetween
    '1991-01-01'and'2000-01-01'
    --书籍名称以The开头的书籍信息
    select*Fromtitleswheretitlelike'The%'
    --请查询0736和0877出版的所有书籍的信息
    select*fromtitleswherepub_idin('0736','0877')
    1.日期函数
    selectgetdate()--获取当前时间
    --datediff(时间的类型,小的时间,大的时间)求两个时间差
    selectdatediff(yy,getdate(),'2012-8-8')
    --时间的计算dateadd(时间类型,量,某个时间)
    selectdateadd(day,200,getdate())
    --获得某个时间的部分--返回整型
    selectdatepart(mm,getdate())
    --获得某个时间的部分的名称--返回字符类型
    selectdatename(mm,getdate())
    selectdatepart(dw,getdate())
    selectdatename(dw,getdate())
    --请查询出版了已经5年的书籍信息
    select*fromtitles
    wheredatediff(mm,pubdate,getdate())>5*12
    字符串函数:
    selectlen('zhaoxin')--返回一个字符串的长度
    selectdatalength('赵鑫')--返回一个字符串字节的长度
    --replace(操作字符,把什么,替换成什么)
    selectreplace('我日你','日','**')--替换函数
    selectreplace('zhaoxin','','')
    --stuff(操作字符,哪里开始,几位,替换字符)
    selectstuff('zhaoxinge',1,4,'a')--截取并替换
    --注意:数据库中的字符的下标从1开始数起
    --substring(操作字符,从哪开始,截取几位)
    selectsubstring('zhaoxinge',5,3)--截取函数
    selectleft('zhaoxin',4)--左截取
    selectright('zhaoxin',3)--右截取
    --去空格
    selectltrim('zhaoxin')
    selectrtrim('zhaoxin')
    selectrtrim(ltrim('zhaoxin'))
    --转大写,转小写
    selectupper('zhaoxin')
    selectlower('ZHAOXIN')
    --查询某个字符在某个字符串中的索引位置
    selectcharindex('@','zhaoxin@163')
    数学函数
    --求绝对值函数
    selectabs(-123)
    --求平方根
    selectsqrt(9)
    --求幂的函数
    selectpower(5,3)
    --四舍五入?如果要去掉后面0,该怎么办?
    selectround(3.1455926,2)
    --向上取整,向下取整
    selectceiling(3.000001)
    selectfloor(3.9999999)
    --随机函数(取值范围0--1)
    selectrand()
    --请给我获得一个0到10之间的随机整数
    selectfloor(rand()*10)
    --请获得一个11-22之间的随机整数
    rand()*(大-小)+小
    selectfloor(rand()*11+11)
    系统函数
    select123+123
    select'123'+'123'
    select123+'123'--内置有个转换
    select123+'abc'--+号两边的数据类型一定要统一
    --convert(目标类型,操作数)
    selectconvert(varchar(4),123)+'abc'
    selectconvert(numeric(3,2),round(3.1415926,2))
    注意:
    select123+null
    select'abc'+null
    --null加任何数都为空
    --聚合函数
    --max()求最大值
    --min()最小值
    --avg()平均值
    --sum()求和
    --count()记录的条数
    selectmax(price)fromtitles
    selectmin(price)fromtitles
    selectavg(price)fromtitles
    selectsum(price)fromtitles
    selectcount(*)fromtitles--count(*)不会忽略空值
    聚合函数两大特点:
    1.返回值只有一行一列。
    2.所有的聚合函数忽略空值。
    createtablestudentexam
    (
    stuidint,
    stuscoreint
    )
    insertintostudentexamvalues(1,98)
    insertintostudentexamvalues(2,96)
    insertintostudentexamvalues(3,null)
    selectavg(stuscore)fromstudentexam
    --聚合函数的作用为了做统计。
    --请查询,每类书籍的平均价格
    select*fromtitles
    select[type],avg(price)fromtitlesgroupby[type]
    business13.7
    mod_cook11
    popu_com12
    --请查询,每个出版社出版的最低的书籍价格
    --出版社编号,最低价格
    selectpub_id,min(price)fromtitlesgroupbypub_id
    --请查询每个国家有多少个出版社
    select*frompublishers
    --国家数量
    selectcountry,count(*)frompublishers
    groupbycountry
    --请查询每个月,每个出版社,出版的最贵的书籍价格
    selectdatepart(mm,pubdate)as'月份',
    pub_idas'出版社',max(price)as'价格'
    fromtitles
    groupbydatepart(mm,pubdate),pub_id
    --在分组聚合的情况下,在select后面的列中,
    --没有使用聚合函数的列,一定要出现在groupby中
    第五课:
    1.having筛选
    2.select语句的完整结构和执行顺序
    3.连接查询。
    连接查询是用一条sql语句查询多张表的数据的方式。
    连接查询的分类:
    a.内连接innerjoin
    b.外连接(有3种)
    A.左外连接leftjoin
    B.右外连接rightjoin
    C.全外连接fulljoin
    c.交叉连接crossjoin
    做连接查询有一个前提条件,两张表之间要有公共字段。
    公共字段要有两个要求
    1.数据类型要一致。
    2.这两个字段必须代表相同类型的实体。
    
    连接查询语法
    select列,列,列from表1innerjoin表2
    on表1.公共字段=表2.公共字段
    
    select列,a.列,b.列from表1asainnerjoin表2asb
    ona.公共字段=b.公共字段
    innerjoin内连接,返回的是两张表公共字段的交集。
    leftjoin左外连接。
    左外连接是以左表为基准,左表中的数据首先显示出来,
    然后到右表中找匹配项,如果能找到则显示,如果找不到
    则以空代替。
    
    请查询商业书籍被哪些出版社出版过?
    select*fromtitles
    select*frompublishers
    使用什么连接首先看,已知条件:
    已知条件:商业书籍business
    
    selectdistinctb.*fromtitlesasaleftjoinpublishersasb
    ona.pub_id=b.pub_id
    wherea.type='business'
    
    注意:左表在join关键字前面的表,
    右表在join关键字后面的表。
    distinct去掉重复的数据。
    请查询1991年出版过书籍的出版社信息。
    已知条件:年份1991.
    selectdistinctb.*fromtitlesasaleftjoinpublishersasb
    ona.pub_id=b.pub_id
    wheredatepart(year,a.pubdate)='1991'
    右外连接:
    是以右表为基准,右表的数据先显示,然后到左表中找
    匹配,如果有显示出来,如果没有用空代替。
    请查询新月书店出版过一些什么书籍?
    selectdistincta.*fromtitlesasarightjoin
    publishersasbona.pub_id=b.pub_id
    wherepub_name='NewMoonBooks'
    请查询每个出版社,出版过基本书籍?
    要求:pub_name,出版数量。
    selectpub_name,count(*)as'出版数量'
    fromtitlesasarightjoinpublishersasb
    ona.pub_id=b.pub_id
    groupbypub_name
    全外连接:
    全外连接两表都是准心,两表中的数据全部出来,互相找匹配
    找得到就显示,找不到以空代替。
    全外连接返回两表数据的并集。
    fulljoin
    交叉连接:
    又名笛卡尔积,没有实际项目意义。
    交叉连接的数量为两表数量的乘积。
    注意:交叉连接不需要写公共字段。
    
    selectsname,a.studentsid,courseid,score
    fromstudentsasacrossjoinscoreasb
    三表连接的写法:
    union的两种用法。
    复制表的3种写法。
    --聚合分组。
    --分组的目的是为了做聚合运算的。
    select列名,*4
    from表名1
    where条件表达式2
    groupby列--分组3
    having条件表达式--筛选5
    orderby列desc/asc6
    --查询每类书籍的平均价格
    select*fromtitles
    select[type],avg(price)fromtitlesgroupby[type]
    select*frompublishers
    --请查询每个国家对应的出版社数量
    selectcountry,count(*)frompublishersgroupbycountry
    --请查询每个月每个出版社出版的最贵的书籍的信息。
    selectpub_id,datepart(mm,pubdate)as'月份',
    max(price)as'最高价格'
    fromtitles
    --wheremax(price)>10
    groupbypub_id,datepart(mm,pubdate)
    havingmax(price)>10
    --在之前的基础上,去除最高价格在10块以下的书籍的信息
    3.聚合函数不能出现在where条件中
    --连接查询
    --联合union
    select*fromaa
    union--union是纵向的联合会去重复的
    select*fromcc
    select*fromaa
    unionall--unionall不去重复的纵向联合
    select*fromcc
    两表做联合要满足
    1.表结构要一致。
    2.数据类型要兼容。
    最后产生的新的结果集的列名以第一张表的列名为主
    insertintoaa
    select3,3union
    select4,4union
    select5,5union
    select6,6
    --一次性插入多条数据的语法。
    --复制表:
    select*fromtitles
    --将现有的表复制到一张新表中
    select*intowoyunfromtitles
    --1.创建了一张与原本相同结构的表
    --2.把数据复制到这个新表中
    --注意:woyun这张表一定要是一张新表。
    select*fromwoyun
    deletefromwoyun
    --将现有的数据复制到一张相同结构的表中
    insertintowoyunselect*fromtitles
    --注意:woyun表必须是已存在的表。
    select*intowokaofromtitleswhere1<>1
    --用来复制表结构。
    第六课:
    1.权限控制:
    --sqlServer有3重安全级别
    --1.登录用户:
    sp_addlogin'jym','jqx'
    --注释:‘jym’是用户名,‘jqx’是密码,表示创建了一个叫‘jym’的用户
    --2.数据库用户:
    useMySchool
    sp_grantdbaccess'jym','mll'
    --注释:‘ml’是‘jym’的别名,表示可以查看数据库,但不能操作表
    --3.为数据库用户授予权限:
    grantinsert,delete,update,select
    onclasstomll--数据库级别权限
    grantcreatetabletomll--系统级别权限
    --注释:授予增、删、改、查的权限
    --收回权限:
    revokeinsert,delete,update,selectfrommll
    --角色:
    --是一种权限的集合
    useMySchool--切换到数据库
    sp_addrole'znl'--注释:创建角色
    grantinsert,delete,update,selectonclass
    toznl
    grantinsert,delete,update,selectonlesson
    toznl
    --为角色授予权限
    sp_addlogin'lyq','wjq'
    sp_addlogin'wjq','lyq'
    useMySchool--切换到数据库
    sp_grantdbaccess'lyq','sl'
    sp_grantdbaccess'wjq','xs'
    sp_addrolememberznl,lyq--将角色加入到
    sp_addrolememberznl,wjq
    denyinsert,delete,update,selectonclasstolyq
    --禁用某个用户在角色中的权限
    2.数据库设计:
    --1.为什么要设计数据库?
    不设计数据库可能产生一些问题:
    1.数据冗余
    2.添加异常
    3.删除异常
    4.更新异常
    --2.软件开发的生命周期:
    a.可行性及需求分析:
    需求分析(常用方式:座谈式,诱导式,原型式):数据分析,业务分析
    注意:需求分析做好,撰写需求文档,交给客户签字。
    b.概要设计阶段:
    1.标识实体2.确立实体之间的关系3.标识实体的属性
    绘制E-R图,Entity-RelationShip
    c.详细设计阶段:
    将E-R图,转换成数据库,对数据库的合理性进行评定
    使用数据库规范理论(三大范式理论)
    d.代码编写阶段:
    实现项目的所有功能。
    e.软件测试阶段:单元测试,集成测试,压力测试,用户测试(培训用户使用)
    f.安装部署阶段:
    --3.绘制E-R图:
    方形:表示实体(名词)椭圆形:表示属性(名词)棱形:表示关系(动词)
    确立关系:
    1对1,1对多,多对1,多对多
    确立关系中的重点:在项目中不允许有多对多的关系
    如何处理:把多对多拆成两个1对多
    --4.使用三大范式理论来评定数据库设计:
    三大范式:
    第一范式:要求表中的每一个列都必须具有原子性(每个列都不可分割)
    解决办法:拆
    第二范式:在满足第一范式的基础上,去除部分函数依赖
    1.一般来说,一个表如果有复合主键,绝对不满足第二范式
    2.表是否描述一件事情
    解决办法:拆
    第三范式:在满足第二范式的基础上,去除传递函数依赖
    解决办法:拆
    部分函数依赖:表中的非主键列,部分依赖主键列
    传递函数依赖:表中的非主键列传递的依赖于主键列
    
  • 上一篇资讯: sql复习大全——精品(1)
  • 下一篇资讯: SQL基础(2)
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师