数据库基本操作—表

作者: bc6911a2840b | 来源:发表于2019-01-24 17:05 被阅读8次

    一、创建表

    (先简单说一下什么是表,表是一种结构化的文件,可以用来存储特定类型的数据。另外,在一个数据库中,表的名称是唯一的,不能重复。)

    1、表约束

    ①主键约束 (primary key):主键可以由一个字段或多个字段构成,但是设置为主键的字段在表中通常是唯一的值,并且不能随便修改也不能为空。
    ②唯一约束(unique) :该列的值是惟一的,且可以为空
    ③检查约束 (check): 规定该列的取值范围,格式限制等,比如年龄的取值范围,邮件的格式等等
    ④默认约束(default): 设置该列的默认值
    ⑤外键约束(foreign key) :用于两个表之间建立关系,需要规定引用主表的那列,定义外键的那张表称之为子表,另一张表称之为主表,在表的创建过程中,应该先创建主表,后创建子表。

    2、创建表

    说完了表约束,万事俱备,只欠一张表了。
    语法格式:

    create table 表名(
    列名称 类型 约束, 
    列名称 类型 约束,
    .........
    )
    

    例如我们建一张学生表,再加上约束:

    create table Student(
    studentid int primary key,      --主键
    name varchar(20) not null,      --不能为空
    age int check(age between 1 and 120),  --检查约束(年龄在1-120之间)
    gender varchar(2) check(gender='男' or gender='女'), --检查约束
    address varchar(50) default 青岛市,      --默认约束
    idcard char(18) unique,      --唯一约束
    classid int foreign key references Class(classid)  --外键约束
    )
    

    上面这种方式是在创建表时直接给字段添加约束,当然还可以在表创建好了之后再添加约束:

    主键:
    alter table 表名 add constraint PK_字段名 primary key (字段名)
    唯一:
    alter table 表名 add constraint UQ_字段名 unique (字段名)
    检查:
    alter table 表名 add constraint CK_字段名 check (条件表达式)
    默认:
    alter table 表名 add constraint DF_字段名 default '默认值' for 字段名
    外键:
    alter table 表名 add constraint FK_字段名
    foreign key(字段名) references 关联的表名(关联的字段名)
    

    已上就是创建表的一些操作,既然能创建这些约束,那也肯定可以删除
    alter table 表名 drop constraint 约束名(约束名就是在前面创建的,如 “PK_字段”)
    注:如果约束是在创建表时创建的,则不能用这种命令删除,只能在企业管理器里面删除

    3、添加、修改字段

    添加字段:
    Alter table [表名] add [列名] 类型
    修改字段类型:
    Alter table [表名] alter column [列名] 类型

    二、临时表和表变量

    1、先说说如何声明和插入数据

    表变量:

    声明:
    DECLARE @tb_table TABLE(
    ........
    ........
    )
    插入:
    insert into @tb_table 
    select name from Student
    

    临时表:

    声明:
    create table #tb_table ((
    ........
    ........
    )
    插入:
    insert into #tb_table 
    select name from Student
    

    2、区别

    平时用的最多的地方就是在存储过程里,简单说一下他俩的区别。临时表是利用了硬盘(tempdb数据库) ,表变量是占用内存,因此小数据量当然是内存中的表变量更快。当大数据量时,就不能用表变量了,太耗内存了。大数据量时适合用临时表。表变量在执行完批处理语句后就会自动清理,而临时表需要手动删除。

    三、多表连接查询

    前面既然提到了外键约束,那我们就来说说如何查询多张存在关联的表

    1、内连接(inner join)

    先直接上sql语句吧:

    select a.name,a.age,b.classname from Student a 
    inner join Class b on a.classid=b.classid where studentid=0001
    

    这是关联学生和班级表,查询出学号为0001的学生的姓名、年龄、班级。这两张表是通过classid这个字段关联的,所以用a和b来区分这两张表(a,b相当于一个代号),在select后查询的字段最好是加上这个代号,因为如果查询的字段在两张表中都存在时,它无法区分你查的是哪张表里的,所以会报错。

    2.外链接

    它所连接的两张表是主表与次表的关系,主表的数据,必须全部显示,次表的数据,只在与主表中的数据有关联的才能显示。
    ①左外链接:左边的表是主表,必须全部显示,右边的表是次表,关联上才可以显示。

    select a.name,a.age,b.classname from Student a 
    left outer join Class b on a.classid=b.classid where studentid=0001
    

    ①右外链接:右边的表是主表,必须全部显示,左边的表是次表,关联上才可以显示。

    select a.name,a.age,b.classname from Student a 
    right outer join Class b on a.classid=b.classid where studentid=0001
    

    ③完全外链接:两张表都是主表,不管是否关联上,都要显示

    select a.name,a.age,b.classname from Student a 
    full outer join Class b on a.classid=b.classid where studentid=0001
    

    尾声

    我是一个18年应届生,最近和朋友们维护了一个公众号,内容是我们在从应届生过渡到开发这一路所踩过的坑,以及我们一步步学习的记录,这里有前端、安卓、Java、C#,如果感兴趣的朋友可以关注一下,一同加油~


    个人公众号:咸鱼正翻身

    相关文章

      网友评论

        本文标题:数据库基本操作—表

        本文链接:https://www.haomeiwen.com/subject/sglujqtx.html