数据库 —— 浅谈主外键以及多表查询

  上一篇数据库的博客里只是把经常用到的SQL语句列了出来,并没有深入学习(当然,大多数也就是看一遍就会了)。自我感觉关于键的问题如果不熟悉的话,好像还是有点复杂,这里再提一下。

—————————————————————————————————————————————————————————

 

*    什么是主键?

 

主键是数据表的唯一索引,比如学生表中有学号、姓名之类的,姓名有可能有重名的,但是学号是唯一的,要查找学生的什么信息就有通过唯一的学号去查找。这就是主键。SQL语句中主键(自增长类型)通常设置方法为:

id int(10) not null primary key auto_increment ;

 

*    什么是外键?

 

学生表(学号,姓名,性别,班级) 

其中每个学生的学号是唯一的,学号就是一个主键 

课程表(课程编号,课程名,学分) 

其中课程编号是唯一的,课程编号就是一个主键 

成绩表(学号,课程号,成绩) 

成绩表中单个属性无法唯一标识一条记录,学号和课程号的组合才能唯一标识一条记录,所以学号和课程号的属性组是一个主键 

成绩表中的学号不是成绩表的主键,但是它和学生表中的学号相对应,并且学生表中的学号是其主键,则称成绩表中的学号是学生表的外键,同理,成绩表中的课程号是课程表的外键。

定义主键和外键是为了维护关系数据库的完整性:

1.主键是确定唯一一条记录的唯一标识,不会重复,比如一个人的身份证号确定年龄,性别,姓名等。

2.外键用于与另一张表的关联。能够确定另一张表记录的字段,用于保证数据的一致性和完整性。

 

*    主外键如何关联或者说约束呢?

 

    *    创建时添加:foreign  key  当前table(主键,如id)  references  关联table(对应标识,如id)

    *    创建后修改:alter  table  emp  add  foreign  key  当前表名(dno)  references  关联的表(did);

 

 

*    多表查询(必须要有主键以及外键):

 

    A,B为表,a,b分别为A,B的字段

    内连接:

        普通内连接示例:select * from A inner join B on A.a = B.b;

        隐式内连接示例(用得最多):select * from A,B where A.a = B.b;

                  数据库 —— 浅谈主外键以及多表查询_第1张图片

    外连接:

        左外链接(看左表,把左表所有的数据全部查询出来):

            select * from A left outer join B on A.a = B.b;

        右外链接(看右表,把右表所有的数据全部查询出来):

            select * from A right outer join B on A.a = B.b;

   数据库 —— 浅谈主外键以及多表查询_第2张图片

 

*    子查询( 查询的内容需要另一个查询的结果): 

 

    *    在sql语言中,select…from…语为一个查询块,将一个查询块嵌套在另一个查询块中作为条件称为嵌套查询,也称为子查询.

             select * from 表名 where 字段 > (select * from 表名 where 条件);

    *    外层的查询块称为父查询,内层的查询块称为子查询

    子查询常用运算符:

        any     任意
        all        全部
        >any    大于结果的最小值
        >all    大于结果的最大值

        >、>=、<、<=、=、<> 或 != (不等于)、in(范围)

 

关于多表联合查询,子查询的练习可以参考(https://blog.csdn.net/LIAO_7053/article/details/82662617)

你可能感兴趣的:(mysql)