zoukankan      html  css  js  c++  java
  • 数据约束

    默认值:

        create table student(

                 id int,

                 address=varchar(20) default '山东淄博'

                  )当不输入值时,就会使用默认值。同时允许值可以时null.

    非空:

        create table student(

                 id int,

                 gender varchar(2) not null

                  )必须要有值,并且不能输入null

    唯一:

      create table student(

                 id int unique,

                 gender varchar(2) 

                  )表示在这个字段中,不能出现相同的值,但是唯一字段可以插入Null,并且可以插如多个null.

    主键:

      create table student(

               id int(4) zerofill primary key auto_increment,

               name varchar(20)

                )1: 每一张表都要设置主键,最好选择id作为主键,并且主键需要满足非空加唯一

                2:自增长字段不需要赋值,会自动相加。并且删除一段数据之后,自增长依旧会+1,相加即使时1,3的排序。delete from 不可以删除约束,而truncate 可以删除约束的内容,但不可以删除约束的作用。

    外键:

       创建部门表

      create table  dept(
                              did int primary key auto_increment,
                    dname varchar(10),
                    mgr varchar(10)
            )
           创建员工表
            create table emp(
                    eid int primary key auto_increment,
                    ename varchar(10),
                    sal double,
                    sex char(5),
                    did int,
                    constraint fk_emp_dept foreign key(did)
                    references dept(did)
            ) 外键约束主要是用来解决表中一些重复的数据,分为2张表,为员工表的did字段添加一个外键约束。被约束的表是副表,约束别的表是主表,并且外键设置在副表上。主表的参考字段通用为主键。

      constraint 表示的声明。 fk_emp_dept表示的是外键的名字。foreign key 表示的是在这张表中谁是外键。references表示的是参照的是 dept 中的did.

      添加数据:先主在副。删除数据:先副在主。修改数据:先副在主

    交叉连接:

        select * from emp join dept 将2个表硬连接在一起,数据会混乱。

    内连接:

        语法:from  表1  [inner]  join  表2  on  表1.字段1=表2.字段2

        select * form emp join dept on emp.did=dept.did 将连个表连接在一起,数据没有多余且准确,将两个表符合条件的连接在一起。并且内连接后可以加 where 条件。

    左外连接:

        语法:from  表1  left  [outer]  join   表2   on  连接条件 连接条件与内连接相同

        select * form emp left join dept on emp.did=dept.did     左外连接表示的是在内连接的结果基础上,加上左边表中所有不符合连接条件的数据,相应放右边表的字段的位置就自动补为“null”值

    右外连接:

        语法: from  表1  right  [outer]  join   表2   on  连接条件

        select * from emp right join dept on emp.did=dept.did   右外连接表示的是在内连接的结果基础上,加上右边表中所有不符合连接条件的数据,相应本应放左边表的字段的位置就自动补为“null”值

        select * form 表1 join 表2 on 表1.id=表2.id join 表3 on 表2.id=表3.id  可以三个表连接。
     子查询:

         表示的是将一个查询的结果当成另一个查询的条件。

        select did from emp where ename='李四'

        select dname from dept where did=()

        select dname from dept where did=(select did from emp where ename='李四')  只需要查询完第一个时,将did里的条件改为第一个查询结果

        当查询的结果是多个时,可以使用in多为关键字,同时in不管是一个值,还是多个值都可以使用。

        select did from emp where sex='男'

        select mgr from dept where did in(1,2)

        select mgr from dept where did in(select did from emp where sex='男')     将()里的1,2替换为第一个查询结果,使用in作为关键字

    联合查询:

        语法:selcet 语句1   union    select  语句2  并且两个语句字段数目需要相等,且类型需要一样。

        select eid,ename from emp union select did,dname from dept

  • 相关阅读:
    51nod1238. 最小公倍数之和 V3(数论)
    LOJ565. 「LibreOJ Round #10」mathematican 的二进制(NTT)
    【LCA】BZOJ1776-[Usaco2010 Hol]cowpol 奶牛政坛
    【单调队列】BZOJ1342-[Baltic2007]Sound静音问题
    【并查集&&带权并查集】BZOJ3296&&POJ1182
    【DFS好题】BZOJ1999- [Noip2007]Core树网的核(数据加强版)
    【Floyd矩阵乘法】BZOJ1706- [usaco2007 Nov]relays 奶牛接力跑
    【搜索+DP】codevs1066-引水入城
    【扩展欧几里得】BZOJ1477-青蛙的约会
    【扩展欧几里得】codevs1200-同余方程
  • 原文地址:https://www.cnblogs.com/maxuefeng/p/13657549.html
Copyright © 2011-2022 走看看