您的位置:新葡亰496net > 网络数据库 > 旺旺老师笔记,数据库SQL语句的操作

旺旺老师笔记,数据库SQL语句的操作

发布时间:2019-10-20 23:50编辑:网络数据库浏览(160)

    SQLServer数据库的基础知识的纪念:

    生机盎然 :创造数据库

    1.暗许约束
    2.主键约束,(唯黄金年代约束 非空约束),
    设置了主键的字段在赋值的时候无法重新,stuID为主键则1,下二个就不能够为1
    3.唯豆蔻年华约束(允许黄金时代行为空),
    4.check约束
    5.主外建约束 (主表 子表)风流倜傥对多

    风华正茂:什么是数据库设计?

      1)主数据文件:*.mdf

    创建八个数据文件和二个日记文件(MySchool)

    丰硕完整性约束
    外键约束:
    学员为主消息表(主表)的学生编号是主键
    检查实验战绩表的上学的小孩子(子表)的编号是外键
    一个表在分化的关联合中学不只能够是主表又能够是子表
    主外建是后生可畏对多

    数据库设计便是将数据库中的数据实体以至那几个数量实体之间的涉及,举办典型和结构化的进度.

          2)次要数据文件:*.ndf

    create database MySchool
    on primary      --默许属于primary主文件组,可粗略
    (
    --数据文件的切实可行陈说

    ”数据字典“

    二:为何要实行数据库设计?

      3)日志文件:*.ldf

    name = 'MySchool_data'    --主数据库文件的逻辑名称
    filename = 'D:projectMySchool_data.mdf', --主数据库文件的物理名称
    size = 5MB,     --主数据库文件的以前大小
    maxsize = 100MB,     --主数据库文件增加的最大值
    filegrowth = 15%     --主数据文件的增进率

    哪八个是外键表,就给她丰富外建约束
    3个生机勃勃律:1 外键表外键与主键数据类型生机盎然致(语法三头)
    2 长度:外键>=主键表;长了也没风趣
    3 名称大器晚成致。

    1:优异的数据库设计能够使得的化解数量冗余的主题素材

      每一种数据库最少要含有几个文件:三个数据文件和三个日志文件

    )
    log on
    (
    --日志文件的求实描述,各参数含义同上

    要是sql语句写的乖谬非常多,只供给看率先行和末段后生可畏行错误。
    假若相当少,就精心看下。

    2:效率高

     怎么着查看SQL Server的救助==================急忙键F1

    name = 'MySchool_log',    --主数据库文件的逻辑名称
    filename = 'D:projectMySchool_data.ldf', --主数据库文件的大意名称
    size=2MB,     --主数据库文件的之前大小
    filegrowth = 1MB    --主数据文件的增速

    通配符----

    3:便于越发扩张

     

    )
    go

    select * from employee
    -- 插入一条忘记到场的字段 直接在表的背后添上add
    --alter table employee add emName varchar(20) not null
    alter table employee
    add constraint PK_emId primary key (emId)
    alter table employee
    add constraint CK_age CHECK(age between 20 and 55)
    alter table employee
    add constraint DF_address default('地址不详') for address
    alter table employee
    add constraint UQ_emName unique (emName)
    --外键表
    alter table employee
    add constraint FK_emtypeId
    foreign key(emtypeId) references mangertype(mantypeId)
    标示列能够不是主键,种子和自增量必需是int,标示列不可能编辑
    先自增,再作证,最终插入
    在数据涉嫌图里 带钥匙的郁郁苍苍方是主键表

    4:使得应用程序开辟变得轻便

    豆蔻梢头、创设文件夹 

     


    三:设计数据库的步子

    exec sp_configure 'show advanced options',1

    创设五个数据文件和三个日志文件(employees)
    旺旺老师笔记,数据库SQL语句的操作。create database employees
    on primary
    (
    --主数据库文件的实际汇报
    name='employee1',
    filename='D:projectemployee1.mdf',
    size=10,
    filegrowth=10%
    ),
    (
    --次要数据库文件的求实陈诉
    name='employee2',
    filename='D:projectemployee2.mdf',
    size=20,
    maxsize=100,
    filegrowth=1
    )          
    log on
    (
    --日志文件1的绘声绘色陈述
    name='employeelog1',
    filename='D:projectemployee1_log.ldf',
    size=10,
    maxsize=50,
    filegrowth=1
    ),
    (
    --日志文件2的呈报
    name='employeelog2',
    filename='D:projectempolyee2_log.ldf',
    size=10,
    maxsize=50,
    filegrowth=1
    )
    go

    插入(insert)
    1.匹配,
    2.多行数据
    备份表 select * into student1 from student
    就生成二个新的student1

    率先步    供给深入分析:  解析客商的事情和数目管理需要(收罗消息,标记实体,标志各个实体要求仓库储存的详细新闻,标志实体间的涉及)

    go

     

    select * into student1 from student
    select * from student1
    --将字段名备份,可是所建的自律未有
    select stuNoid,stuName,sex,age,address into student2 from student
    select * from student2
    --将字段名改变,加as就能够
    select stuNoid as haha,stuName as gaga,sex as hello,age,address into student3 from student
    select * from student3
    select * from student1
    use wangwang
    go
    create table employee
    (
    empId int identity primary key,
    empName varchar(20) not null,
    sex bit not null,
    age int ,
    address varchar(20)

    第二步    概要统一希图:  绘制E-LAND图,用于与顾客或集体成员的交换

    reconfigure

     

    )
    go
    select * from employee
    ---接下来将student1表中的数值插入到employee中
    /*insert into employee
    (empId,empName,sex,age,address)
    select
    (stuNoId,stuName,sex,age,address)
    from stdent1
    where age>20
    */
    ----插入多行数据union方法
    insert student1
    (stuNoId,stuName,sex,age,address)
    select--不扶助default关键字要用‘’括起来,当两行数据豆蔻年华致时,默以为意气风发行
    '1','liuzhao','1','31','default' union
    select
    '1','liu','1','28','default' union
    select
    '1','zhao','1','31','default'
    select * from student1

    其三步    详细安排:  将E-Rubicon图调换来多张表,举行逻辑设计,应用数据库设计的三大范式进行理并答复核,采取具体的数据库然后建库建表建约束,创制完毕伊始编写制定代码,开垦前端选择程序.

    go

    二:删除数据库
    usr master
    if exists(select * from sysdatabases where name='....')
    drop database ......

    select * from student1 order by age desc(asc)

    模糊查询
    alter table student add groupId int
    select * from student
    insert student
    (stuNoId,stuName,sex,age,address)
    select
    '5','zhaoliu','1','30','南昌路' union
    select
    '6','zhao','1','31','南路' union
    select
    '7','liu','1','32','昌路'

    ---模糊查询
    select * from student where address like '%南%'
    select * from student where stuName like 'wangwu[2-4]'
    select * from student where stuName like 'wangwu[^2-4]%'--取反
    --加上% 可以将wangwua查出来

    四:绘制E-R图

    exec sp_configure 'xp_cmdshell',1

     

    select * from student where stuName like 'wangwu[^2-4]%'

    use wangwang
    go
    create table person
    (
    perId int identity primary key,
    personId int not null--身份证
    )
    go
    --给居民身份证增加约束,倘若居民身份证多少人数字
    /*select * from person
    alter table person
    add constraint CK_personId CHECK(personId like [0-4],[0-4],[0-4],[0-4]旺旺老师笔记,数据库SQL语句的操作。,[0-4])
    go*/
    --更改
    update student set age=age 1
    select * from student where groupId=1
    update student set age=age 2,stuName=stuName 'mm'
    where groupId=1
    --删除
    delete from student where groupId=1
    select * from student

    delete from student-- 删除表

      (1) 什么是实业?

    go

     

    truncate table student--删除表(效率快 )

    SQL 结构化查询语言

          实体是指现实世界中有着区分其余东西的特性或品质并与任何实体有挂钩的实体(实体日常是名词)

    reconfigure

    三:创设和删除表

    T-Sql是SQL的抓实版

    查询:
    1.基础查询2.聚合函数3.链接查询4.子查询
    --更改
    update student set age=age 1
    select * from student where groupId=1
    update student set age=age 2,stuName=stuName 'mm'
    where groupId=1
    --删除
    delete from student where groupId=1
    select * from student

    delete from student-- 删除表
    truncate table student--删除表(效率快 )
    -------------------------------查询
    use wangwang
    go
    select * from student where address='南昌路'
    /*select
    colname1 as 别名,
    colname2 as 别名,
    from
    tableName
    where
    条件
    group by
    分组
    having
    分组后的筛选
    order by
    排序
    */
    --起别名

    select *,'姓名'=stuName from student
    select *,stuName as 'as用法' from student
    --给表起名
    select *,stuName as 'as用法' from student as Stu
    alter table student add haha varchar(20)
    select * from student
    update student set haha='mm' where age>31
    select * from student where haha is null
    --string a=null与a=''是不等同的 null与空
    select * from student where haha is null
    select * from student where haha=''
    select * from student order by stuNoId asc
    -------------------分页管理,关键字--top--percent
    select top 5 * from student--每页出现5行
    select top 50 percent * from student--每页出现总体的百分之n,进1法
    --排序
    select * from student order by age desc--降序号
    select * from student order by stuNoId asc--升序
    -----函数。
    select 'aaa' as '列明'
    --查询an在后头的法文中冒出的行列
    select CHARINDEX('an','my name is wangwang')
    --查询an在前面包车型地铁土耳其共和国(The Republic of Turkey)语中冒出的行列,前面17个不算,从第15初始查找
    select CHARINDEX('an','my name is wangwang',14)
    -----查询长度
    select LEN('123456')
    select address,LEN(address) as ' cahngdu' from student
    -----------ltrim()可取空格
    select * from student where ltrim(address)=' 天津路'--左空格
    select * from student where ltrim(ltrim(address))=' 圣Diego路'--俩边空各
    ---截取字符串right
    select PAJEROIGHT('sgdsggueui',4) as '截取后突显'
    select left('sgdsggueui',4) as '截取后出示'
    ----------替换
    select replace('sfsfhufhsh','sh','AA')--将sh换成AA
    select replace('sfsfhufhsh','s','9')--将sh换成AA
    ------------日期函数
    select GETDATE()--获得当前天子
    select DATEADD(DD,一千0,'93-07-22')--活20000天
    select DATENAME(DW,GETDATE())--明天星期几
    select DATENAME(WW,GETDATE())--明天是今年的第几周
    select * from student
    select convert(varchar(2),age) address as '新的列明' from student
    select age convert( int,address) as '新的列明' from student--有错误


    案例1
    create table card
    (
    cId int identity primary key,
    CaId varchar(20) not null
    )
    go
    insert card values ('fifuejf789io0i658')

    select * from card
    update card set CaId = replace(CaId,'i','1')

    --update replace(CaId,'i','1') from card

    select REPLACE(replace(CaId,'i','1'),'o','0') from card
    select * into card2 from card
    select * from card2

          严苛来讲,实体是指表中风姿浪漫行特定的数额,也时时把表称为四个实体

    go

    use MySchool    --在Myschool中创设表
    go

    update card2 set card=REPLACE(REPLACE(CaId,'i','1'),'o','0')

    SQL编程
    变量分为:1.局地变量,以@符号前缀,先评释再赋值
    赋值:set @变量名=值 select @变量名=值
    set @name=zhangsan
    select studentNo from student where studentName=@name
    李文才:
    declare @name varchar(8)
    set @name='李文才'
    select @No=studentNo from student where studentName=@name

    declare @No int//定义
    print'学号' @No
    查询出学号 -1的附近的同校。
    select * from student where student.studentNo=@No 1 or student.studentNo=@No-1


    insert into Class(GradeId,ClassID) values (4,'201')

      (2)什么是性质?

    exec xp_cmdshell 'mkdir E:新建文件'

    create table Student
    (
    StudentNo int not null.   --学号,int 类型,不允许为空
    LoginPwd nvarchar(50) not null,  --密码 nvarchar类型,不允许为空
    StudentName nvarchar(50) not null, --名字,nvarchar类型,步允许为空
    Sex bit not null,   --性别,取值0或1
    Email nvarchar(20)   --邮箱,可为空
    )
    go

    @@IDENTITY

    DECLARE @TAG VARCHAR(1)
    SET @TAG='*'
    PRINT @TAG @TAG
    PRINT @TAG @TAG @TAG
    PRINT @TAG @TAG @TAG @TAG
    ------DECLARE @xuehao int
    set @xuehao =20011
    select * from student where studentNo=@xuehao//学生记录查出来

    declare @year int
    set @year=DateDiff(DY,'1996-8-7',getdate())/365;年份
    select * from student where student.brondate=@year 1 or student.brondate=@year-1;


    create database MySchool
    on primary
    (
    name = 'MySchool_data',
    filename = 'D:projectMySchool_data',
    size = 10mb,
    maxsize = 100mb,
    filegrowth=15%
    )
    log on
    (
    name = 'MySchool_log',
    filename = 'D:projectMySchool_log',
    size = 3mb,
    maxsize = 20mb,
    filegrowth=1mb
    )

    if exists(select * from sysobjects where name = 'Student')
    drop table student
    create table dbo.Student(
    StudentNo int NOT NULL,
    LoginPwd nvarchar(50) NOT NULL,
    StudentName nvarchar(50) NOT NULL,
    sex bit NOT NULL,
    GradeId int NOT NULL,
    Phone nvarchar(50) NULL,
    Address nvarchar(255) NULL,
    BornDate datetime NOT NULL,
    Email nvarchar(50) NULL,
    IdentityCard varchar(18) NOT NULL
    )

    if exists(select * from sysobjects where name = 'Subject')
    drop table subject
    create table dbo.Subject(
    SubjectNO int IDENTITY(1,1) NOT NULL,
    SubjectName nchar(50) NOT NULL,
    ClassHour int NOT NULL,
    GradeId int NOT NULL
    )

    if exists(select * from sysobjects WHERE name = 'Result')
    drop table Result
    create table dbo.Result(
    StudentNo int NOT NULL,
    SubjectNo int NOT NULL,
    StudentResult int NOT NULL,
    ExamDate datetime NOT NULL
    )

    if exists(select * from sysobjects where name = 'Grade')
    drop table Grade
    create table Grade(
    GradeId int IDENTITY(1,1) NOT NULL,
    GradeName nvarchar(50) NOT NULL
    )

    --向Grade表插入数据
    INSERT INTO Grade VALUES('S1')
    --向Subject表插入数据
    INSERT INTO Subject VALUES('Winforms',20,1)

    --向Student表插入数据
    INSERT INTO Student VALUES('一千0','GuoJing','里卡多·高拉特',1,1,02088762106,'金奈市河西区','一九九〇-09-08 00:00:00','GuoJing@sohu.com',111111)

    --向Result表插入数据
    INSERT INTO Result VALUES('10001',2,70.6,'2013-02-15 00:00:00')


    USE master --设置当前数据库为master,以便访谈sysdatabases表
    GO
    IF EXISTS(SELECT * FROM sysdatabases WHERE name ='MySchool')
    DROP DATABASE MySchool
    GO

    CREATE DATABASE MySchool
    ON (
    name='MySchool_data',
    FILENAME='F:projectMySchool_data.mdf',
    SIZE=10mb, --主数据文件的始发大小
    MAXSIZE=100mb, --主数据文件增进的最大值
    FILEGROWTH=15% --主数据文件的增长率
    )
    LOG ON
    (
    /*--日志文件的具体陈说,各参数含义同上--*/
    NAME='MySchool_log',
    FILENAME='F:projectMySchool_log.ldf',
    SIZE=3mb,
    MAXSIZE=20mb, --日志文件拉长的最大值
    FILEGROWTH=1mb
    )
    GO

     

    /*--查询获得Student表的音讯--*/
    USE MySchool
    GO

    SELECT * FROM sysobjects

    /*--案例:使用SQL语句删除表Student学生--*/
    IF EXISTS(SELECT * FROM sysobjects WHERE name='Student')
    DROP TABLE Student
    /*--学时2--*/
    /*--案例:使用SQL语句创造Student表--*/
    CREATE TABLE [dbo].[Student](
    [StudentNo] [int] NOT NULL,
    [LoginPwd] [nvarchar](50) NOT NULL,
    [StudentName] [nvarchar](50) NOT NULL,
    [Sex] bit NOT NULL,
    [GradeId] [int] NOT NULL,
    [Phone] [nvarchar](50) NULL,
    [Address] [nvarchar](255) NULL,
    [BornDate] [datetime] NOT NULL,
    [Email] [nvarchar](50) NULL,
    [IdentityCard] [varchar](18) NOT NULL
    )
    GO

    /*--案例:使用SQL语句创制Subject科目表--*/
    IF EXISTS(SELECT * FROM sysobjects WHERE name='Subject')
    DROP TABLE Subject
    CREATE TABLE [dbo].[Subject](
    [SubjectNo] [int] IDENTITY(1,1) NOT NULL,
    [SubjectName] [nchar](50) NOT NULL,
    [ClassHour] [int] NOT NULL,
    [GradeId] [int] NOT NULL
    )
    GO
    /*--案例:使用SQL语句创立Result结果表--*/
    IF EXISTS(SELECT * FROM sysobjects WHERE name='Result')
    DROP TABLE ResultResult
    CREATE TABLE [dbo].[Result](
    [StudentNo] [int] NOT NULL,
    [SubjectNo] [int] NOT NULL,
    [StudentResult] [int] NOT NULL,
    [ExamDate] [datetime] NOT NULL
    )
    GO
    /*--案例:使用SQL脚本创设Student学生表--*/
    IF EXISTS(SELECT * FROM sysobjects WHERE name='Student')
    DROP TABLE Student
    CREATE TABLE [dbo].[Student](
    [StudentNo] [int] NOT NULL,
    [LoginPwd] [nvarchar](50) NOT NULL,
    [StudentName] [nvarchar](50) NOT NULL,
    [Sex] [bit] NOT NULL,
    [GradeId] [int] NOT NULL,
    [Phone] [varchar](50) NULL,
    [Address] [nvarchar](255) NULL,
    [BornDate] [datetime] NOT NULL,
    [Email] [varchar](50) NULL,
    [IdentityCard] [varchar](18) NOT NULL,
    )
    GO
    /*--案例:使用SQL脚本成立Grade年级表--*/
    IF EXISTS(SELECT * FROM sysobjects WHERE name='Grade')
    DROP TABLE Grade
    CREATE TABLE [dbo].[Grade](
    [GradeId] [int] IDENTITY(1,1) NOT NULL,
    [GradeName] [nvarchar](50) NOT NULL
    )
    GO
    alter table Student
    add Constraint pk_StudentNo primary key(StudentNo)
    --Student表中的唯旭日东升约束
    alter table Student
    add Constraint uq_IdentityCard unique(IdentityCard)
    --student表中的私下认可约束
    alter table Student
    add Constraint df_Address default('地址不详') for Address
    --student表中的检查约束
    alter table Student
    add Constraint ck_BornDate check(BornDate>'1980-01-01')
    --外键约束
    alter table Grade
    add Constraint pk_GradeId PRIMARY key(GradeId)
    alter table Student
    add Constraint fk_Grade foreign key(GradeId)
    references Grade(GradeId)
    go
    --向Subjiect增多封锁
    alter table Subject
    add Constraint pk_SubjectNo primary key(SubjectNo)
    alter table Subject
    add Constraint ck_ClassHour check(ClassHour>0)
    ALTE安德拉 TABLE Subject --非空约束(课程名称)
    ADD CONSTRAINT CK_SubjectName CHECK (SubjectName is not null)
    alter table subject
    add Constraint fk_GradeId foreign key(GradeId)
    references Grade(GradeId)
    go
    --使用SQL语句成立Result表的自律
    ALTEGL450 TABLE Result --主键约束(学号、科目号、日期)
    ADD CONSTRAINT PK_Result PRIMARY KEY
    (StudentNo, SubjectNo, ExamDate)

    ALTETiguan TABLE Result --暗中认可约束(日期为系统当下日期)
    ADD CONSTRAINT CK_ExamDate DEFAULT (getdate()) FOR ExamDate

    ALTE昂Cora TABLE Result --检查约束(分数无法超过100,小于0)
    ADD CONSTRAINT CK_StudentResult CHECK
    (StudentResult BETWEEN 0 AND 100)

    ALTECRUISER TABLE Result --外键约束(主表Student和从表Result建立关联)
    ADD CONSTRAINT FK_StudentNo
    FOREIGN KEY (StudentNo) REFERENCES Student (StudentNo)

    ALTEEvoque TABLE Result --外键约束(主表Subject和从表Result创设关联)
    ADD CONSTRAINT FK_SubjectNo
    FOREIGN KEY (SubjectNo) REFERENCES Subject (SubjectNo)
    GO


    DATEDIFF(DY, BornDate, GETDATE())/365
    DatePart()函数用于再次回到日期或然时间的单独部分,举个例子年、月、日、时辰、分
    例如 DatePart(YY,BornDate)
    回到出生年月首的年份

    能够因而DatePart()函数获得学号二零零零1的学生大学一年级岁和小三周岁的学生

    declare @year datetime
    select @year= BornDate from Student where StudentNo=20011
    select StudentName,sex,datepart(YY,BornDate) as BornDate from Student where StudentNo=20011 or datepart(YY,BornDate)= @year 1 or datepart(YY,BornDate)=@year-1

    --select * from Student where ABS(DATEDIFF(DAY,@year,BornDate))/365<=1

    --select * from Student where DATEDIFF(DAY,@year,BornDate)/365<=1 and DATEDIFF(DAY,BornDate,@year)/365<=1

          属性能够驾驭为实体的性状,属性对应表中的列

    go

    删除表
    use MySchool
    go
    if exists(select * from sysobjects where naem='Student')
    drop table Student
      
                                                                                                                                                                                                                                                                                                                                                                                                      
    四:创设和删除约束
    主键约束(Primary Key Constraint)
    非空约束(Not Null)
    唯大器晚成约束(Unique Constaraint)
    自己批评约束(Check Constaraint)
    暗许约束(Default Constaraint)
    外建约束(Foreign Key Constarint):用于在两表之间创设关系,供给钦定援用主表的哪一列

    --select * from Student

    --子查询 总是用小括号括起来,先实施螺号里面包车型地铁子查询,然后才实行外围的父查询
    --注意:将子查询和相比运算符联合使用,必得有限帮衬子查询的回来结果为二个。
    --查看比李思文小的学习者
    --declarre @date datetime
    --select BornDate as '李Sven的出生日期' from Student where StudentName='李Sven'
    --select * from Student
    --where BornDate > (select BornDate as '李Sven的出破壳日期' from

      (3)什么是关联?

     

    alter table 表名
    add constraint 约束名  约束类型  具体的自律表明

    Student where StudentName='李斯文')

    尖端查询
    轻巧子查询的用法
    declare @Birthday datetime
    select @Birthday = BornDate from student where studentName='李斯文';
    select studentName,sex from student where BornDate>@Birthday


    select StudentResult from Result
    where SubjectNo=(select SubjectNo from Subject where SubjectName='C# OOP') and
    ExamDate=(select max(ExamDate) from Result where SubjectNo=(select SubjectNo from Subject where SubjectName='C# OOP'))
    --select max(ExamDate) from Result where SubjectNo=(select SubjectNo from Subject where SubjectName='C# OOP')
    --1.从课程名称查询出课程编号,2.从学科编号查询出多年来(大)日期,从1和2协助进行查询出考试战表。
    --查询Java课程考试成绩为60分的学生名单--in 关键字:查询出来的结果大概是三个
    select StudentName from Student where StudentNo in
    (
    select StudentNo from Result where SubjectNo=(select SubjectNo from Subject where SubjectName='Java Logic')
    and
    StudentResult=60
    )


    --in 用法 查询结果有多个
    select StudentNo,studentName from Student where GradeId in (select

          联系是八个或多个实体之间的涉及关系(常常是动词)

    二、创立数据库

    例:
    --增多主键约束
    alter table Student
    add constraint PK_StudentNo Primary Key(StudentNo)

    GradeId from Grade where GradeName = 'S1')

    聚合函数:sum avg min max count(null列不总结在rpu内)
    分组:select groupId,avg(age) from student
    group by groupId
    having avg(age)<=30 刷选
    where 和 having的不相同:where 对表中的原来数据进行帅选,
    having对分组后选拔聚合函数计算后的多寡开展帅选

      (4)什么是炫酷基数?

    1.例子: 

    --增加唯龙腾虎跃约束
    alter table student
    add constraint UQ_IdentityCard unique(IdentityCard)

    having平时与group by结合使用

    视图
    视图名称
    creatview view_name(view_colum_name)
    As query_expression(查询表明式)

          映射基数是意味经过联系与该实体关联的其余实体的个数,具体有 风华正茂对生气勃勃 ,  如日中天对多,  多对意气风发,  多对多.

     --决断,假若有其大器晚成数据库则进行删减

    --增多暗中认可约束
    alter table Student
    add constraint DF_Address default('地址不详') for address

    [with check option](增加封锁原则)

    --分组查询 Group by 在select 语句询问的结尾。

    select studentResult ,sum(subjectNo) from Result group by studentResult
    --出现Group by 日常就能够现出聚合函数
    --查询学生每一门课程的平均成绩
    --要求出示学生姓名,课程名称,
    --科目ji的平分分--怎样将studentNo与studentName联系在协同?
    select SubjectNo , AVG(studentResult)From Result group by subjectNo --left on student.
    select SubjectName ,AVG(studentResult)from Result
    left join subject on
    subject.SubjectNO=result.subjectNo ///////left join 外表 on 俩表相等的字段
    group by SubjectName --学生的平均分

    --select studentNo ,AVG(studentResult) from Result where StudentNo=1000 group by studentNo
    --查询课程的成就 展现课程名称以至所对应的大成
    --left join 左链接!!!! 主从表的涉嫌侧边的是主表 on
    select SubjectNo , AVG(studentResult)From Result group by subjectNo
    select Result.StudentResult,SubjectName from Result
    Left join Subject on --left join 主表 on前面加俩个表一样的字段

      (5)什么是关乎实体图?

    if exists(select * from sysdatabases where name='MySchool')

    --增添检查约束
    alter table Student
    add constraint CK_BornDate checke(BornDate>='1980-01-01')

    subject.SubjectNO=result.subjectNo

    事务 视图 索引
    begin transaction
    declare @error int
    set @error=0
    update bank set currentmoney=currentmoney-1000 where customername='张三'
    set @error=@error @@error 错误音信 全局变量
    update bank set currentmoney=currentmoney 1000 where customername='李四'
    set @error=@error @@error
    给客户贰个可视化的结果,
    if(@error<>0)
    begin
    print '转账战败,重重新操作'
    rollback transaction 回滚
    end

    esle
    begin
    print '转账成功张三给李四转了一千'
    commit transaction 提交给数据库
    end
    go

    1.工作逻辑必要多少个T_SQL语句来进行

    create table bank
    (
    customername varchar(5)
    currentmoney int
    )

    职业属性:原子性(各种步骤不得以再分,要么都实行,要么都不实行)
    龙腾虎跃致性 当事务达成时,数据必得处于同大器晚成状态
    隔数离性 并发东西之间交互隔断,独立,不应信赖其余
    永久性
    千帆竞发作业: begin transaction
    交付业务:commit transaction
    回滚事务:roollback transaction

          E-PAJERO图以图片的主意将数据库的漫天逻辑结构意味着出来.     矩形表示实体集;椭圆代表属性;菱形表示维系集;

    begin

    --增加外键约束(Result是从表,Student是主表)
    alter table Result
    add constraint FK_StudentNo
    foreign key(StudentNo) references Student(StudentNo)
    go

    作业是缓和大概存在的难题

    begin transaction
    declare @error int
    set @error=0
    insert into Result values(113,2,150,GETDATE())
    set @error=@error @@error

    if(@error<>0)
    begin
    print '插入战败'
    rollback transaction
    end

    else
    begin
    print '插入成功'
    commit transaction
    end

           直线用来连接属性和实体集,也用来维系实体集和维系集.

    drop database MySchool

    除去约束
    alter table 表名
    drop constraint 约束名

    select * from Result

    目录:依据索引键查找定数据行
    华语字典中的汉字按“页”置放,经常都有普通话拼音的目录(索引),偏旁部首目录等
    sql中的数据也是按页寄放
    目录;shi sql编排数据的方法

     

    end 

    例:删除学生表中的私下认可约束
    alter tablte Student
    drop constraint DF_Address

    独一索引,主键索引,聚焦索引,

    储存进度
    系统存款和储蓄过用程的名字日常以sp_开头
    扩充存款和储蓄平时xp

    调用存款和储蓄
    execute 过程名 [参数] 或者 exec 过程名 [参数]

    create proc[edure] 存款和储蓄进度名
    @参数1 数据类型=暗许值 output
    。。。。。。。
    @参数n 数据类型=暗中同意值 output
    as
    sql语句
    go

     

    比如说,酒馆管理种类中E-奥迪Q5图:

     --创设数据库

    何以向已存在数量的表中增加约束
    alter table Employee with nocheck ( whit nocheck不向已存在的数量约束)
    add constraint

     

    create database MySchool

    向已存在的数码表中插入一列
    alter table 表名
    add 列名 数据类型  null

     

    on primary

     

    五:绘制数据库模型图

    (

     

    诸如:旅舍处理种类数据库模型图

    --数据文件的实际叙述

    在数据库中用SQL语句成立文件夹(例:在E盘成立五个project文件夹)

     

     name='MySchool_data',                 --主数据文件的逻辑名称 必得写

    exec sp_configure 'show advanced option',1

     

     filename='E:MySchool_data.mdf',   --主数据文件的情理名称 必需写

    go

     

     size=5mb,                                 --主数据文件的伊始大小

    reconfigure

    六:数据标准化

      maxsize=100mb,                      --主数据文件拉长的最大值

    go

    规范设计

      filegrowth=15%                       --主数据文件的增进率

    exec sp_configure 'xp_cmdshell',1

    率先范式: 

    )

    go

    首先范式的指标是保证每列的原子性,若是每列都以不足再分的一丝一毫单元(也称得上最小的原子单元),则满意第意气风发范式

    log on

    reconfigure

    其次范式:

     (

    go

    假使贰个提到满意第旭日初升范式,並且除主键以外的另外列,都注重于该主建,则满意第二范式,第二范式供给一张表只描述黄金时代件职业

    --日志文件的现实性描述,各参数含义同上

    exec xp_cmdshell 'mkdir D:project'

    其三范式:

    name='MySchool_log',

     

    万黄金年代叁个关乎满意第二范式,并且除了主键以外的另外列都不传递正视于主键列,则满意第三范式

     filename='E:MySchool_log.ldf',

     

     size=2mb,

    注:第二范式是其他列都信任于主键列可是没有申明是直接信任依然直接信任,相当于一向信任和间接信赖均可,但第三范式分明建议只好是直接信任,假如现身直接重视的情况,要独自创造一张表出来

    filegrowth=1mb

     

     )

    七:标准化和属性的涉及

     go

    为了知足某种商业目的,数据库品质比标准数据库更首要

    三、创建表

    切实计策和措施:

     2 use MySchool --将最近数据库设置为MySchool,以便在MySchool里创设表

    (1):通过在加以的表中增添额外字段,以多量削减须要从中寻觅消息所急需的小时

     3 go

    (2):通过在给定的表中插入总结列(比方成绩总分),以造福查询

     4 --决断是还是不是存在表,存在则删除

    在数据库规范时,要综合思索数据库质量.

     5 if exists (select * from sysobjects where name='Student')

     

     6 drop table Student

     

     7---创建Student表

     

     8 create table Student   

     

     9 (

     

    10  StudentNo int identity(1,1)  primary key not null,  --学号 自增 主键,非空

     

    11  loginpwd nvarchar(20) not null,

    意气风发 :创设数据库

    12  StudentName nvarchar(20) not null,

    创建二个数据文件和二个日志文件(MySchool)

    13  Sex bit default'女' not null,      --性别,取值0,1

    create database MySchool
    on primary      --暗中认可属于primary主文件组,可归纳
    (
    --数据文件的切切实实描述

    14  GradeId int not null,

    name = 'MySchool_data'    --主数据库文件的逻辑名称
    filename = 'D:projectMySchool_data.mdf', --主数据库文件的情理名称
    size = 5MB,     --主数据库文件的初叶大小
    maxsize = 100MB,     --主数据库文件拉长的最大值
    filegrowth = 15%     --主数据文件的增进率

    15  Phone nvarchar(50) null,

    )
    log on
    (
    --日志文件的维妙维肖描述,各参数含义同上

    16  Address nvarchar(100) null,

    name = 'MySchool_log',    --主数据库文件的逻辑名称
    filename = 'D:projectMySchool_data.ldf', --主数据库文件的物理名称
    size=2MB,     --主数据库文件的始发大小
    filegrowth = 1MB    --主数据文件的增速

    17  BornDate datetime not null,

    )
    go

    18  Email nvarchar(20) null,

     

    19  IdentityCard varchar(18) not null

    创办八个数据文件和多少个日志文件(employees)
    create database employees
    on primary
    (
    --主数据库文件的切实陈诉
    name='employee1',
    filename='D:projectemployee1.mdf',
    size=10,
    filegrowth=10%
    ),
    (
    --次要数据库文件的具体陈述
    name='employee2',
    filename='D:projectemployee2.mdf',
    size=20,
    maxsize=100,
    filegrowth=1
    )           
    log on
    (
    --日志文件1的切切实实描述
    name='employeelog1',
    filename='D:projectemployee1_log.ldf',
    size=10,
    maxsize=50,
    filegrowth=1
    ),
    (
    --日志文件2的描述
    name='employeelog2',
    filename='D:projectempolyee2_log.ldf',
    size=10,
    maxsize=50,
    filegrowth=1
    )
    go

    20  )

     

    21 go

     

    四、创立约束

    二:删除数据库
    usr master
    if exists(select * from sysdatabases where name='....')
    drop database ......

     

     

    语法:

     

     

    三:创制和删除表

     1 alter table 表名

    use MySchool    --在Myschool中成立表
    go

     

    create table Student
    (
    StudentNo int not null.   --学号,int 类型,不容许为空
    LoginPwd nvarchar(50) not null,  --密码 nvarchar类型,不容许为空
    StudentName nvarchar(50) not null, --名字,nvarchar类型,步允许为空
    Sex bit not null,   --性别,取值0或1
    Email nvarchar(20)   --邮箱,可为空
    )
    go

    2 add constraint 羁绊名 约束类型 具体的封锁表明 

    删除表
    use MySchool
    go
    if exists(select * from sysobjects where naem='Student')
    drop table Student
      
                                                                                                                                                                                                                                                                                                                                                                                                       
    四:创设和删除约束
    主键约束(Primary Key Constraint)
    非空约束(Not Null)
    唯如日方升约束(Unique Constaraint)
    自己争辩约束(Check Constaraint)
    私下认可约束(Default Constaraint)
    外建约束(Foreign Key Constarint):用于在两表之间确立关联,供给钦点引用主表的哪一列

     

    alter table 表名
    add constraint 约束名  约束类型  具体的自律表明

     

    例:
    --增添主键约束
    alter table Student
    add constraint PK_StudentNo Primary Key(StudentNo)

    例子:

    --增添唯生机勃勃约束
    alter table student
    add constraint UQ_IdentityCard unique(IdentityCard)

     

    --增添私下认可约束
    alter table Student
    add constraint DF_Address default('地址不详') for address

    1、加多私下认可约束(默许'地址不详')

    --加多检查约束
    alter table Student
    add constraint CK_BornDate checke(BornDate>='1980-01-01')

     

    --增多外键约束(Result是从表,Student是主表)
    alter table Result
    add constraint FK_StudentNo
    foreign key(StudentNo) references Student(StudentNo)
    go

    1 alter table Student

    去除约束
    alter table 表名
    drop constraint 约束名

     

    例:删除学生表中的私下认可约束
    alter tablte Student
    drop constraint DF_Address

    2 add constraint df_address default('地址不详') for address

    怎么着向已存在多少的表中增添约束
    alter table Employee with nocheck ( whit nocheck不向已存在的数量约束)
    add constraint

     

    向已存在的数额表中插入一列
    alter table 表名
    add 列名 数据类型  null

     

     

    2、增加检查约束(须要出生在一九九八年四月十二日)

     

     

    在数据库中用SQL语句创立文件夹(例:在E盘创设贰个project文件夹)

    1 alter table Student

    exec sp_configure 'show advanced option',1

     

    go

    2 add constraint ck_BornDate check (BornDate >='1996-10-26')

    reconfigure

     

    go

     

    exec sp_configure 'xp_cmdshell',1

    3、加多唯大器晚成约束(居民身份证全世界只有贰个)

    go

     

    reconfigure

     1 alter table Student

    go

     

    exec xp_cmdshell 'mkdir D:project'

    2 add constraint uq_IdentityCard unique (IdentityCard) 

     

     

     

     

     

     

     

    4、增添主键约束

     

     

     

     1 alter table Student

    动用变量 数据类型调换 逻辑调整语句(begin ...end; case...end; if...else; while)

    一:变量

    变量分为局地变量和全局变量  (全局变量是系统自定的,是不行手动给值的,若想和睦定义全局变量可思虑创设全局一时表!)

    部分变量的概念:  declare @变量名  数据类型    (局地变量只好用于同一群管理个中!!!!!!!)

    全局变量: @@

    @@error        最终二个T-SQL语句错误的大谬不然号

    @@identity     最后一遍插入的标志值

    @@rowcount   受上一个SQL语句影响的行数

    @@servicename   该Computer上SQl服务器的名目

    @@version    SQL Server的版本新闻

    @@transcount   当前接连打开的事务数

    @@timeticks    当前Computer上每刻度的飞秒数

    @@max_connections 能够创造的,同有时间连接的最大数据

    @@language     当前应用的语言的名号

     二:给变量赋值  (set  和seklect)

    set和select的区别

    1:set不帮助多少个变量赋值,select扶持

    2:表明式再次回到四个值时,set出错,select重回最终一条数据

    3:表明式未回来任何值时,set赋值为null(未有) select 保持不改变

     

    三:输出语句

    print @变量名 或

    select @变量名

    诚如从数据库中检索数据后赋值使用select赋值方法

    四:数据类型调换

    隐式调换: 类型同样或相相配,自动转变

    显式调换: 类型差别,可用convert 函数 或 cast 函数

    一样点: 都用于某种数据类型的表明式转变为另风度翩翩种数据类型

    分歧点: 在改变日期的时候,convert能够转账为钦赐的格式

    cast (变量名 as 数据类型)

    convert(数据类型, 变量名)

    五:逻辑调节语句

    流程序调整制语句  begin....end  

    万般选择在if剖断和while循环中,也正是C#中的 {}

    分层协会   if..else  或

         case ...end(多种选取)

    eg:

      select 成绩=case

            when 条件一  then 结果一

            when 条件二  then 结果二

            else 其余结果(可粗略)

     

     

    2 add constraint pk_StudentNo primary key(StudentNo) 

     

     

    5、加多外键约束(主表 Student 和从表 REsult建构关系,关联列StudentNo)

     

    1 alter table Result

     

    2 add constraint fk_StudentNo

    3     foreign key(StudentNo) references Student (StudentNo)

     

    五、sql操作数据库数据的兑现(增、删、查、改)

     

    (黄金时代)插入数据

     

    语法:

     

            insert  into  目标表(新表)

     

            select '列名' union

     

    eg

     

            insert  into  card(ID,password)

     

            select  ‘0023-ABC’,‘ABC’  union

     

    (二)增扩充少

     

    语法:

     

        insert   into   表名

     

        values (‘   ’,‘     ’)

     

    eg

     

        insert  into  card

     

        values (‘0023-ABC’,‘ABC’)

     

    (三)修改数据

     

    语法:

     

         update   表名     set    行名

     

         where     列名

     

    eg

     

        update   card    set     password=‘pwd’

     

        where ID=‘0023-ABE’

     

    (四)删除数据

     

    语法:

     

         delete   from   表名

     

         where   行名

     

    eg

     

        delete   from   card

     

        where   ID=‘0023-ABE’

     

    (五)查看数据

     

    语法:

     

         select  *   from   表名  

     

    eg

     

        select  *   from  student

     

    本文由新葡亰496net发布于网络数据库,转载请注明出处:旺旺老师笔记,数据库SQL语句的操作

    关键词: