多表设计及查询

表约束

唯一约束:unique,声明该字段是唯一的

非空约束:not null,声明该字段非空

主键约束:primary key,声明某一列为主键,具有唯一性、非空性和被引用的特性

主键的自增长 auto_increment

create table stu(

       id int primary key auto_increment,

       username varchar(20)

       );

插入语句时,主键可以写null,也可以自定义

insert into stu values(null,'meimei');

insert into stu values(null,'xiaofeng');

insert into stu values(4,'xiaofeng');

   

多表约束(外键)

外键约束的目的:保证数据的完整性。

  外键语法:foreigh key(外键字段) references 表名(主键);

多表的设计

表结构设计的三种方式:一对一、一对多(重点)、多对多(重点)

一对多:部门和员工/用户和订单

结构设计:两张表,主表(一方)  从表(多方)

建表原则:在多方表中添加字段,把该字段设置为外键,指向一方表的主键

多对多:用户和角色,一个用户可以有多个角色,一个角色可以被多个用户所拥有。

建表原则:三张表,用户表、角色表、中间表(存储数据关系)

 多对多可以拆分成两个一对多的场景

用户表(一) ----中间表(多)

角色表(一) ----中间表(多)

多表查询

内链接

内链接有普通内链接和隐士内链接两种,通常使用隐士内链接。

语法:select * from tablename1, tablename2 where tid = gid;

或者 select * from tablename1 t, tablename2 s where t.tid = s.gid;

外链接

外连接分左外链接和右外链接两种。

左外链接:select * from tablename1 t left (outer) join tablename2 s on t.tid = s.gid;

右外链接:select * from tablename1 t right (outer) join tablename2 s on t.tid = s.gid;

内链接和外链接的区别

内链接查询的是2张表交集数据,主外键关联的数据;

左外链接查询的是左表中所有的数据和2张表主外键关联的数据;

右外链接查询的是右表中所有的数据和2张表主外键关联的数据;

  

子查询

包含多个select语句的查询叫子查询,即把查询语句的结果作为另一个查询条件。

例如:查询英语成绩大于英语平均分的学员和分数

select name,English from stu where English > (select avg(English) from stu);

原文地址:https://www.cnblogs.com/like1824/p/13410807.html