当前位置:网站首页>MySQL学习 Day2 排序查询 / 聚合函数 /分组查询 /分页查询 /约束/多表之间的关系
MySQL学习 Day2 排序查询 / 聚合函数 /分组查询 /分页查询 /约束/多表之间的关系
2022-07-27 16:09:00 【Z知行T】
一、DQL查询语句
1.1 排序查询

SELECT * FROM student ORDER BY math; -- 默认是升序 ASC
SELECT * FROM student ORDER BY math DESC; -- 降序
-- 按照数学成绩排名,如果数学成绩一样 则按照英语成绩排名
SELECT * FROM student ORDER BY math ASC,english ASC;
1.2 聚合函数

SELECT COUNT(NAME) FROM student;
SELECT COUNT(IFNULL (english,0)) 人数 FROM student;
SELECT MIN(math) FROM student;
SELECT MAX(english) FROM student;
SELECT SUM(english) FROM student;
SELECT AVG(math) FROM student;
1.3 分组查询

-- 按照性别分组,分别查询男、女同学的平均分
SELECT sex,AVG(math)FROM student GROUP BY sex;
-- 按照性别分组,分别查询男、女同学的人数
SELECT sex,AVG(math),COUNT(id)FROM student GROUP BY sex;
-- 按照性别分组,分别查询男、女同学的平均分,分数低于70分不参与分组
SELECT sex,AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
-- 按照性别分组,分别查询男、女同学的平均分,分数低于70分不参与分组,分组之后人数要大于2个人
SELECT sex,AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id)>2;
SELECT sex,AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数>2;
1.4 分页查询

-- 每页显示三条记录
SELECT *FROM student LIMIT 0,3; -- 第一页
SELECT * FROM student LIMIT 3,3; -- 第二页
SELECT * FROM student LIMIT 6,3; -- 第三页
-- 公式: 开始的索引 = (当前的页码 -1) * 每页显示的条数
二、约束
2.1 概述
约束:对表中数据进行限定,保证数据的正确性、有效性和完整性
2.2 非空约束

-- 创建表添加非空约束
CREATE TABLE stu(
id INT,
NAME VARCHAR(20) NOT NULL
);
-- 删除name的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);
-- 创建表后添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
SELECT * FROM stu;
2.2 唯一约束

-- 创建表式 添加唯一约束
CREATE TABLE stu2(
id INT,
phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束
);
-- 注意mysql中,唯一约束限定的列值可以有多个null
-- 删除唯一约束
ALTER TABLE stu2 DROP INDEX phone_number ;
-- 创建表后添加唯一约束
ALTER TABLE stu2 MODIFY phone_number VARCHAR(20) UNIQUE;
SELECT * FROM stu2;
2.3 主键约束

CREATE TABLE stu1(
id INT PRIMARY KEY, -- 给id添加主键约束
NAME VARCHAR(20)
);
SELECT *FROM stu1;
-- 删除逐渐
ALTER TABLE stu1 DROP PRIMARY KEY;
-- 创建完表后添加主键
ALTER TABLE stu1 MODIFY id INT PRIMARY KEY;
2.3 主键约束—自动增长

CREATE TABLE stu2(
id INT PRIMARY KEY AUTO_INCREMENT, -- 给id添加主键约束和自动增长
NAME VARCHAR(20)
);
-- 删除自动增长
ALTER TABLE stu2 MODIFY id INT;
-- 添加自动增长
ALTER TABLE stu2 MODIFY id INT AUTO_INCREMENT;
SELECT *FROM stu2;
INSERT INTO stu2 VALUES(NULL,'bbb'); -- 自动增长只跟前一行有关系
2.4 外键约束

-- 解决方案:分成两张表
-- 创建部门表(id,dep_name,dep_location)
-- 一方,主表
CREATE TABLE department(
id INT PRIMARY KEY AUTO_INCREMENT,
dep_name VARCHAR(20),
dep_location VARCHAR(20)
);
-- 创建员工表(id,name,age,dep_id)
-- 多方,从表
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT,
dep_id INT, -- 外键对应主表的主键
CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id)
);
-- 添加两个部门
INSERT INTO department VALUES (NULL,'研发部','广州'),(NULL,'销售部','深圳');
-- 添加员工,dep_id 表示员工所在的部门
INSERT INTO employee (NAME,age,dep_id) VALUES ('张三',20,1);
INSERT INTO employee (NAME,age,dep_id) VALUES ('李四',21,1);
INSERT INTO employee (NAME,age,dep_id) VALUES ('王五',20,1);
INSERT INTO employee (NAME,age,dep_id) VALUES ('老王',20,2);
INSERT INTO employee (NAME,age,dep_id) VALUES ('大王',22,2);
INSERT INTO employee (NAME,age,dep_id) VALUES ('小王',18,2);
SELECT * FROM employee;
-- 删除外键
ALTER TABLE employee DROP FOREIGN KEY emp_dept_fk;
-- 添加外键
ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id)
2.4 外键约束–级联操作

-- ON UPDATE CASCADE 级联更新
-- ON DELETE CASCADE 级联删除
-- 删除外键
ALTER TABLE employee DROP FOREIGN KEY emp_dept_fk;
-- 添加外键 设置级联更新
ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY
(dep_id) REFERENCES department(id) ON UPDATE CASCADE;
-- 添加外键 设置级联更新 级联删除
ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY
(dep_id) REFERENCES department(id) ON UPDATE CASCADE ON DELETE CASCADE;
三、多表之间的关系
3.1 多表关系介绍

3.2 一对多关系实现


3.3 多对多关系实现


3.4 一对一关系实现

3.5 多表关系案例
-- 创建旅游路线分类表 tab_category
-- cid 旅游线路分类主键,自动增长
-- cname 旅游路线分类名称非空,唯一,字符串 100
CREATE TABLE tab_category(
cid INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(100) NOT NULL UNIQUE
);
创建旅游线路表tab_route
/* rid 旅游线路主键,自动增长 rname 旅游线路名称非空,唯一,字符串100 price 价格 rdate 上架实践,日期类型 cid 外键,所属分类 */
CREATE TABLE tab_route(
rid INT PRIMARY KEY AUTO_INCREMENT,
rname VARCHAR(100) NOT NULL UNIQUE,
price DOUBLE,
rdate DATE,
cid INT,
FOREIGN KEY (cid) REFERENCES tab_category(cid)
);
/* 创建用户表tab_user uid 用户主键,自增长 username 用户名长度100,唯一,非空 password 密码长度30,非空 name 真实姓名长度100 birthday 生日 sex 性别 telephone 手机号,字符串11 email 邮箱,字符串长度100 */
CREATE TABLE tab_user(
uid INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) NOT NULL UNIQUE,
PASSWORD VARCHAR(30) NOT NULL,
NAME VARCHAR(100),
birthday DATE,
sex CHAR(1) DEFAULT '男',
telephone VARCHAR(11),
email VARCHAR(100)
);
/* 创建收藏表 tab_favorite rid 旅游路线id,外键 date 收藏实践 uid 用户id,外键 rid 和uid不能重复,设置复合键,同一个用户不能收藏同一个线路两次 */
CREATE TABLE tab_favorite(
rid INT,-- 线路id
DATE DATETIME,
uid INT, -- 用户id
-- 创建复合键
PRIMARY KEY(rid,uid), -- 联合主键
FOREIGN KEY (rid) REFERENCES tab_route(rid),
FOREIGN KEY (uid) REFERENCES tab_user(uid)
);

四、范式
4.1 范式概述

4.2 三大范式详解

存在的问题:
1.存在非常严重的数据冗余(重复):姓名、系名、系王任
2.数据添加存在问题:添加新开设的系和系主任时,数据不合法
3.数据删除存在问题:张无忌同学毕业了,删除数据,会将系的数据-一起删除。
利用第二范式解决问题之后
遵循第三范式后,问题都得到解决

五、数据库的还原和备份
5.1 命令行 / 图形化工具备份

边栏推荐
- Disassembly of Xiaomi cc9 Pro: the cost of rear five shots is several times that of Xiaolong 855!
- 展锐鲜苗:赋能全场景应用,海量数据需要AI与IoT融合
- 【学习笔记】Redis中有序集合zset的实现原理——跳表
- 携手三星,vivo将推Exynos980双模5G手机!
- [MIT 6.S081] Lab 9: file system
- "Who is Huawei" documentary film series landing on BBC: exposing a large number of Ren Zhengfei's unknown experience
- [MIT 6.S081] Lec 5: Calling conventions and stack frames RISC-V 笔记
- 深度学习-论文阅读:动作结构性图卷积网络AS-GCN
- OEM "made in the United States", domestic security equipment has been installed on the U.S. aircraft carrier!
- Find redundant duplicate records in the table, delete and retain the minimum one
猜你喜欢

Deep learning - VIDEO behavior recognition: paper reading - two stream revolutionary networks for action recognition in videos

数据库的常用命令2

动态链表2栈的链表存储结构(LinkedStack实现)
![[MIT 6.S081] Lec 1: Introduction and examples 笔记](/img/5d/2fc4bde8eebbb22605d314b5292e05.png)
[MIT 6.S081] Lec 1: Introduction and examples 笔记

3. opencv几何变换

查看端口PID及结束进程

Nowcoder (5 choices)
![[MIT 6.S081] Lec 6: Isolation & system call entry/exit 笔记](/img/b3/89b3688a06aa39d894376d57acb2af.png)
[MIT 6.S081] Lec 6: Isolation & system call entry/exit 笔记

数据库的常用命令1
![[MIT 6.S081] Lec 10: Multiprocessors and locking 笔记](/img/62/ca6362830321feaf450865132cdea9.png)
[MIT 6.S081] Lec 10: Multiprocessors and locking 笔记
随机推荐
Deep learning: Gan case exercise -minst handwritten digits
携手三星,vivo将推Exynos980双模5G手机!
查看端口PID及结束进程
Solve the problem that reids cannot be accessed by other IPS
Binary tree concept
Add music to the program interface and load background photos.
Deep learning: stgcn learning notes
Deep recognition: thesis reading_ 2s-agcn cvpr2019 (two stream adaptive graph convolution network based on skeleton action recognition)
Multi thread import data and generate error files for redis storage
zabbix6.0的安装部署
展锐鲜苗:赋能全场景应用,海量数据需要AI与IoT融合
深度学习:安装包记录
又一个时代的终结!
The latest advanced interview questions for big factories are necessary
Please ask the great God a question, flinkcdc, the datetime field in synchronous MySQL will become a timestamp. Has anyone ever encountered it
图形界面编程
深度学习:STGCN学习笔记
Chained storage structure of dynamic linked list 3 queue (linkedqueue Implementation)
@Convert 注解在jpa中进行查询的注意事项
LootCode动态数组练习(724,118,766)