wordpress博客增加音乐页面,网站优化搜索,wordpress登录qq微信登录界面,wordpress本地数据目录#xff1a; 一. 数据库约束 二. 表的设计 三. 聚合查询 四.联合查询 一. 数据库约束#xff1a; 1.约束类型汇总#xff1a; 约束类型 说明 NULL约束使用NOT NULL指定列不为 空UNIQUE唯一约束指定列为唯一的、不重复的DEFAULT默认值约 … 目录 一. 数据库约束 二. 表的设计 三. 聚合查询 四.联合查询 一. 数据库约束 1.约束类型汇总 约束类型 说明 NULL约束使用NOT NULL指定列不为 空UNIQUE唯一约束指定列为唯一的、不重复的DEFAULT默认值约 束指定列为空时的默认值主键约束primary key NOT NULL 和 UNIQUE 的 结合 外键约束 关联其他表的主键或唯一键 语法foreign key (列) references 主表(列 CHECK约束保证列中的值符合指定的条件 1.1 NULL约束 创建表时可以指定某列不为空 DROP TABLE IF EXISTS student;
CREATE TABLE student (id INT NOT NULL,sn INT,name VARCHAR(50),qq_mail VARCHAR(50)
);1.2 DEFAULT默认值约束 mysql CREATE TABLE student (- id INT NOT NULL,- name VARCHAR(20) DEFAULT 默认为无名氏); 1.3 PRIMARY KEY主键约束 CREATE TABLE student2 (- id bigint primary key auto_increment,- name VARCHAR(20) DEFAULT 默认为无名氏); 这里还使用了auto_increment在插入时不指定可以让id字段自增。 注意这里一个表不可以有多个主键都是可以有复合主键 如下 1.4 FOREIGN KEY外键约束 外键用于关联其他表的主键或唯一键 语法 foreign key (本表要关联的字段) references 主表(列) 例子创建班级表classesid为主键 创建学生表student一个学生对应一个班级一个班级对应多个学生。使用id为主键 classes_id为外键关联班级表id。 create table student(- id INT PRIMARY KEY auto_increment,- class_id int,- foreign key (class_id) references class (id)- );create table class(- id INT PRIMARY KEY auto_increment,- name varchar(50)- ); 注意这里的class_id的类型要和主表class的id类型一致这里都是int 不然会报类型不兼容错误导致定义失败 二. 表的设计 1.设计表的时候要遵循三大范式。 第一范式表里的字段不可以再进行拆分 第二范式再满足第一范式的基础上不存在非关键字段对任意候选键的部分函数依赖 简单来说就是非主键字段对任意主键外键唯一键的部分函数依赖 小结一个表没有复合主键就天然满足第二范式 第三范式再满足第二范式的基础上不存在非关键字段对任意候选键的传递依赖 第三范式可以解决数据冗余更新异常插入异常删除异常等问题 2.设计时表之间的三大关系 一. 一对一比如用户和账号信息可以建立在一个表中 二. 一对多一个班级有多个学生设计如下 三. 多对多一个学生可以选多门课一门课可以被多个学生选 学生表和课程表是多对多的关系这里通过课程表(关系表)关联 三. 聚合查询: 1.常见的统计总数、计算平局值等操作可以使用聚合函数来实现常见的聚合函数有: 函数说明COUNT([DISTINCT] expr) 返回查询到的数据的 数量SUM([DISTINCT] expr)返回查询到的数据的 总和不是数字没有意义AVG([DISTINCT] expr)返回查询到的数据的 平均值不是数字没有意义MAX([DISTINCT] expr)返回查询到的数据的 最大值不是数字没有意义MIN([DISTINCT] expr)返回查询到的数据的 最小值不是数字没有意义 例子 1.1COUNT统计行数 统计班里有多少同学 1.2 SUM 统计语文成绩总分 1.3 AVG 统计语文平均分 1.4 MAX: 语文最高分 1.5 MIN 语文最低分 2.GROUP BY子句 2.1 SELECT 指定的字段必须是“分组依据字段”其他字段若想出现在SELECT 中则必须包含在聚合函 数中。 2.2语法 select 需要分组的列, sum(column2), .. from table group by 需要分组的列 2.3例子 mysql create table emp(- id int primary key auto_increment,- name varchar(20) not null,- role varchar(20) not null,- salary numeric(11,2)- );
Query OK, 0 rows affected (0.07 sec)mysql insert into emp(name, role, salary) values- (马云,服务员, 1000.20),- (马化腾,游戏陪玩, 2000.99),- (孙悟空,游戏角色, 999.11),- (猪无能,游戏角色, 333.5),- (沙和尚,游戏角色, 700.33),- (隔壁老王,董事长, 12000.66);
Query OK, 6 rows affected (0.04 sec) 查询每个角色的最高工资 3.HAVING条件语句 GROUP BY 子句进行分组以后需要对分组结果再进行条件过滤时不能使用 WHERE 语句而需要用 HAVING 例子查询每个角色小于一万的最高工资 四.联合查询 1.实际开发中往往数据来自不同的表所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积。 笛卡尔积其实是个全排列的过程 语法 select * from 表名 表名 如图 上面有很多无用数据我们可以通过连接条件过滤 2.内连接 写法一select 字段 from 表1 别名1 join 表2 别名2 on 连接条件 and 其他条件; 写法二select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件; 例子这里我们过滤一下上面的class和student的查询 从图可以看出两个表的class_id有依赖关系只要他们相等即可。 3.外连接 外连接分为左外连接和右外连接。如果联合查询左侧的表完全显示我们就说是左外连接右侧的表完 全显示我们就说是右外连接 语法 -- 左外连接表1完全显示 select 字段名 from 表名1 left join 表名2 on 连接条件; -- 右外连接表2完全显示 select 字段 from 表名1 right join 表名2 on 连接条件; 如果是left join就以左边的表为基准显示 如果是right join 就以右边的表为基准显示 这里就是以右边student表为基准表显示的 4.自连接 自连接是指在同一张表连接自身进行查询 5.子查询 子查询是指嵌入在其他sql语句中的select语句也叫嵌套查询。 分为 5.1.单行子查询返回一行记录的子查询(返回一个对象) 例子查询与“韩立” 同学的同班同学 5.2.多行子查询返回多行记录的子查询(返回一个集合包含多个对象)用到IN关键字 例子在成绩表中查询彩儿和清涟同学的成绩的成绩信息 6.合并查询 在实际应用中为了合并多个select的执行结果可以使用集合操作符 unionunion all。使用UNION 和UNION ALL时前后查询的结果集中字段需要一致也就是两张表要完全一致。 6.1 UNION 该操作符用于取得两个结果集的并集。当使用该操作符时会自动去掉结果集中的重复行 例子 6.2.nion all: