300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 数据库MySQL基础---约束 表关系 聚合函数 连接查询 分组查询和子查询

数据库MySQL基础---约束 表关系 聚合函数 连接查询 分组查询和子查询

时间:2024-03-06 11:27:59

相关推荐

数据库MySQL基础---约束 表关系 聚合函数 连接查询 分组查询和子查询

约束

1、主键约束亦成为主码,关键字:primary key,设置了主键约束的列的数据要求:不能为空,不允许重复。2、自增长策略针对主键,不需要手动给值,自动的值是当前表中该列最大值+1关键字:auto_increment自增长的特点:1)只有整型数据列才能设置自增长2)只有主键才会设置自增长3)自增长列在插入数据时不用给值4)初始值为1,增量为15)默认的存储引擎下,自增列的数据一旦被使用就不会再出现3、唯一约束限定某列值不能重复,唯一约束允许值为空。通常应用于电话号码、邮箱、账号...关键字:unique4、非空约束要求某列值必填,不能为空关键字:not null5、默认约束设置默认约束的列,如果不给值就使用默认值来填充关键字:default6、外键约束外键约束用来在两个表的数据之间建立关系。关键字;foreign keyreferences

表关系

1、一对一:one-to-one 例如:丈夫-妻子外键可以建立在关系中任意一张表上面#将外键加在妻子对应的表中,有丈夫的情况下才能有妻子,并且在妻子存在的情况下不能删除丈夫CREATE TABLE husband(hid INT(6) PRIMARY KEY AUTO_INCREMENT,hname VATCHAR(20) NOT NULL);CREATE TABLE wife(wid INT(6) PRIMARY KEY AUTO_INCREMENT,wname VATCHAR(20) NOT NULL,FOREIGN KEY(wid) REFERENCES husband(hid));2、一对多/多对一:one-to-many 例如:班级-学生 用户-订单外键建立在多的那张表上面#创建班级表CREATE TABLE class(cid INT(6) PRIMARY KEY AUTO_INCREMENT,cname VATCHAR(20) NOT NULL);#创建学生表CREATE TABLE student(sid INT(6) PRIMATY KEY AUTO_INCREMENT,sname VATCHAR(20) NOT NULL,cid INT(6),FOREIGN KEY(cid) REFERENCE class(cid));#先插入班级才能添加学生INSERT INTO class(cname) VALUES('软件班');INSERT INTO student(sname,cid) VALUES('大毛',1);#删除某班级时先要保证这个班级里没有学生了3、多对多:mang-to-mang 例如:学生-课程 商品-订单外键建立在中间表上#创建课程表CREATE TABLE course(courseid INT(6) PRIMARY KEY AUTO_INCREMENT,coursename VARCHAR(20) NOT NULL);#创建学生表CREATE TABLE student(sid INT(6) PRIMATY KEY AUTO_INCREMENT,sname VATCHAR(20) NOT NULL,cid INT(6),FOREIGN KEY(cid) REFERENCE class(cid));#创建中间表VREATE TABLE sc(scid INT(6) PRIMARY KEY AUTO_INCREMENT,sid INT(6),courseid INT(6),FOREIGN KEY(sid) REFERENCE student(sid),FOREIGN KEY(courseid) REFERENCE course(courseid));#必须先创建有某号课程和某号学生,才能在中间表中插入该学生和该课程

连接查询

定义:通过指定的连接条件同时获取多张表的数据。1、内连接1)隐式内连接:将连接条件直接拼接到where关键字后面语法:select 查询的内容 from 表1,表2,表3 where 连接条件 [and 筛选条件];2)显示内连接:通过inner join on 去查询,将连接条件写在on后面语法:select 查询内容 from 表1[inner] join 表2 on 连接条件 [where 筛选条件];2、外连接以一张表为基表,查询出基表中的所有数据及连接表中能够与基表匹配的数据,如果匹配不上就用null来填充。1)左外连接(以left左边的表为基表,右边的表为连接表)语法:select 查询内容 from 表1 left 表2 on 连接条件 [where 筛选条件];2)右外连接(以right右边的表为基表,左边的表为连接表)语法:select 查询内容 from 表1 right join 表2 on 连接条件 [where 筛选条件];

聚合函数

主要对数据进行统计,并返回单个值。聚合函数有:max():最大值min():最小值sum():求和count():统计数据条数avg():平均值

分组查询

先对数据进行分组,再对这些分组后的信息进行汇总。分组查询时经常会用到聚合函数,达到对分组后数据的统计效果。关键字:group by [having]语法:select 查询内容 from 表名 group by 分组列 [having 筛选条件];where和having在分组SQL中的区别:1、having对分组后的数据进行筛选,有having那么一定会有group by,有group by不一定有having。where是在分组前进行筛选。2、having后面可以写聚合函数,where后面不行3、如果在一个SQL语句中两者同时出现,where先执行,having后执行

子查询(嵌套查询)

当一个查询得到的结果是另一个查询的条件时,就会用到子查询。案例:1、查询出比金坤同学大的学生的信息步骤:先查询金坤同学的年龄,再根据查到的年龄进行条件查询select sage from student where sname=’金坤’;select * from student where sage>上一句查到的结果;即select * from student where sage>(select sage from student where sname=’金坤’);2、查询年龄最大的学生的信息步骤:先查询出最大的年龄,再根据查出的最大年龄查询学生信息select max(sage) from student;select * from student where sage=上一句查出的结果;即select * from student where sage=(select max(sage) from student);子查询的另外一种写法,将前一个查询的结果当成一张表来处理:select s.* from student s, (select max(sage) from student) max where s.sage=max.age;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。