mysql笔记
1.3、数据库分类
关系型数据库:(sql)
- MySql,Oracle,SqlServer,DB2,SQLlite
- 通过表和表之间,行和列之间的关系进行数据的存储,学员信息表,考勤表,。。。。。
非关系型数据库:(NoSQL)Not Only
- Redis,MongDB
- 非关系型数据库,对象存储,通过对象的自身属性来决定。
DBMS(数据库管理系统)
- 数据库的管理软件,科学有效的管理我们的数据。维护和获取数据;
- MySql,数据库管理系统
1.4、MySQL简介
MySQL是一个关系型数据库管理系统
前世:瑞典MySQL AB 公司开发
今生:属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一
1.5、安装MySQL
-
将压缩包解压,把解压后的文件放到合适的盘符地下
-
配置环境变量
以win7为例右键点击桌面计算机---选择属性---选择高级系统设置---高级---环境变量---找到系统变量中的path选择编辑---在变量值最后面输入半角分号;然后复制mysql的bin目录路径放入即可(win10 win11点击编辑后选新建即可)
-
在mysql目录下新建my.ini文件(系统默认隐藏扩展名注意)
-
然后在my.ini文件中将下面文字复制进去,注意将basedir、datadir修改为自己的存放位置
-
用管理员身份打开命令提示符 定位到mysql的bin目录输入mysqld -install 出现service successfully installed说明安装成功
-
成功后运行mysqld --initialize --console初始化数据库,并记录初始化的数据库密码
-
启动mysql服务 net start mysql显示启动成功即可
点击查看代码
net start mysql //启动MySQL
net stop mysql //关闭MySQL
- 使用刚才生成的密码登入MySQL ,并修改密码
点击查看代码
mysql -u 用户名 -P 端口号 -h 连接地址 -p 密码
点击查看代码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES; -- 刷新权限
2、操作数据库
操作数据库》操作数据库中的表》操作数据库表中的数据
mysql不区分大小写
2.1、操作数据库(了解)
- 创建数据库
create database if not exists westos - 删除数据库
DROP DATABASE if exists westos - 使用数据库
--TAB 键的上面,如果你的表明或者字段名是一个特殊字符,就需要带``
useschool
- 查看数据库
show databases
--查看所有的数据库
2.2、数据库的列类型
数值
- tinyint 十分小的数据 1个字节
- smallint 较小的数据 2个字节
- mediumint 中等大小的数据 3个字节
int 标准数据 4个字节 常用的
- bigint 较大的数据 8个字节
- float 浮点数 4个字节
- double 浮点数 8个字节
- decimal 字符串形式的浮点数 金融计算的时候,一般使用decimal
字符串
- char 字符串固定大小的0~255
varchar 可变字符串0~65535
- tinytext 微型文本 2^8-1
- text 文本串 2^16-1
时间日期
java.util.date
- date YYYY-MM-DD,日期
- time HH:MM:SS,时间格式
- datetime YYYY-MM-DD HH:MM:SS最常用的时间格式
- timestamp 时间戳,1970.1.1 到现在的毫秒数 也较为常用
- year 年份表示
null
- 没有值,未知
- 注意,不要使用null进行运算,结果为null
2.3、数据库的字段属性(重点)
Unsigned:
- 无符号的整数
- 声明了该列不能声明为负数
Zerofill:
- 0填充
- 不足的位数,使用0来填充,int(3),5---(005)
自增:
- 通常理解为自增,自动在一条记录的基础上+1(默认)
- 通常用来设计唯一的主键~index,必须是整数类型
- 可以自定义设计主键自增的起始值和步长
非空
NULL not null
- 假设设置为not null,如果不给他赋值,就会报错
- NULL,如果不填写值,默认就是null
默认:
- 设置默认的值
- 如果不指定
2.4、创建数据库表(重点)
点击查看代码
/*注意点,使用英文(),表的名称和字段尽量用``括起来
AUTO_INCREMENT 自增
字符串使用 单引号括起来
所有的语句后面加逗号,最后一个不用加
PRIMARY KEY 主键,一般一个表只有一个唯一的主键
*/
create table `student`(
`id` int (4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` varchar(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` varchar(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` varchar(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` datetime NULL DEFAULT NULL COMMENT '出生日期',
`address` varchar(100) NULL DEFAULT NULL COMMENT '家庭地址',
`email` varchar(50) NULL DEFAULT null COMMENT '邮箱',
PRIMARY KEY (`id`)
)ENGINE=INNODB CHARACTER SET=utf8;
格式
create table[if not exists] 表名(
字段名 列类型 属性 索引 注释,
。。。。
)表类型 字符集设置 注释
常用命令
show create database school /查看创建数据库的语句/
show create table student /查看student数据表的定义语句/
desc student /显示表的结构/
2.5、数据库表的类型
关于数据库引擎
INNODB 默认使用
MYISAM 早些年使用
常规操作
- MYISAM 节约空间,速度较快
- INNODB 安全性高,事务处理,多表多用户操作
在物理空间存在的位置
所有的数据库文件都存在DATA目录下,本质还是文件的存储!
MYSQL引擎在物理文件上的区别
- INNODB在数据库表中只有一个*.frm文件,以及上级目录下的ibdata1文件
- MYISAM对应文件
- *.frm表结构的定义文件
- *.myd数据文件(data)
- *.myi索引文件(index)
设置数据库表的字符集编码
CHARACTER SET=utf8
不设置的话,会是MySQL默认的字符集编码Latin1,不支持中文
在my.ini中配置默认的编码
character-set-server=utf8mb4
2.6、修改删除表
修改
--修改表名
alter table 旧表名 rename as 新表名
--增加表的字段
alter table 表名 add 字段名 列属性
--修改表的字段(重命名,修改约束)
--alter TABLE 表名 MODIFY 字段名 列属性【】
alter TABLE teacher MODIFY age varchar(11)--修改约束
--alter TABLE 表名 change 旧名字 新名字 列属性【】
alter TABLE teacher change age age1 int(1)--字段重命名
结论:change是用来字段重命名,不能修改字段类型和约束
modify不用来字段重命名,只能修改字段类型和约束
--删除表的字段
alter table 表名 drop 字段名
alter table teacher drop age
删除
--删除表(如果表存在)
drop table if exists teacher
所有的创建和删除操作尽量加上判断,以免报错
注意点:sql关键字大小写不敏感,建议写小写 所有的符号用英文不要用中文
3、MySQL数据管理
3.1、外键(了解即可)
创建表的时候建立外键
--学生表的gradeid字段要去引用年级表gradeid
--定义外键key
---给这个表外键添加约束(执行引用)references引用
CREATE TABLE `student` (
`id` int NOT NULL COMMENT '学号',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '学生姓名',
`pwd` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',
`sex` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '性别',
`birthday` datetime NULL DEFAULT NULL COMMENT '出生日期',
`gradeid` int NOT NULL COMMENT '学生的年级',
`address` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '家庭住址',
`email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`) USING BTREE,
INDEX `FK_gradeid`(`gradeid` ASC) USING BTREE,
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
---创建表的时候没有外键关系
ALTER TABLE `school`.`student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `school`.`grade` (`gradeid`);
alter table 表 add constrainf 约束名 foreign key(作为外键的列) references 那个表(那个字段)
以上的操作都是物理外键,数据库级别的外键,我们不建议使用!避免数据库过多造成
最佳实践
- 数据库就是单纯的表,只用来存数据,只有行和列
- 我们想使用多张表的数据,想使用外键(用程序去实现)
3.2、DML语言(全部记住)
数据库意义:数据存储,数据管理
DML语言:数据操作语言
- inert
- update
- delete
3.3、添加
insert
--插入语句(添加)
insert into 表名([字段1,字段2,字段3]。。。)valuse('值1','值2','值3'。。。)
insert into `grade`(`gradename`) values('大四')
---由于主键自增我们可以省略(如果不写表的字段,他就会一一匹配)
---一般写插入语句,我们一定要数据和字段一一对应
--插入多个字段
insert into `grade`(`gradename`) values('大二'),('大一')
语法:insert into 表名([字段1,字段2,字段3]。。。)valuse('值1','值2','值3'。。。)
注意事项:
- 字段和字段之间使用英文逗号隔开
- 字段是可以省略的,但是后面的值必须要一一对应
- 可以同时插入多条数据,values后面的值,需要使用逗号隔开values(),(),(),...
3.4、修改
update 修改谁 (条件) set原来的值=新值
--修改学员名字,带了条件
update student set name='马六' where id=1
--不指定条件的情况下,会改动所有的表
update student set name='马六'
--同时修改多个属性,用逗号隔开
--语法:
--update 表名 set colnum_name=value,[colnum_name=value,....]where[条件]
条件:where子句运算符
注意点
- colnum_name是数据库的列,尽量带上``
- 条件,筛选的条件,如果没有指定,则会修改所有的列
- value,是一个具体的值,也可以是一个变量
- 多个设置的属性之间,使用英文逗号隔开
3.5、删除
delete命令
语法:delete from 表明 [where 条件]
--删除数据(避免这样写,会全部删除)
delete from student
--删除指定数据
delete from student where id=1
TRUNCATE命令
作用:完全清空一个数据库表,表的结构和索引约束不会变!
--清空student表
TRUNCATE student
DELETE 和TRUNCATE的区别
- 相同点:都能删除数据,都不会删除表结构
- 不同:Truncate重新设置自增列,计数器会归零 ,不影响事务
--测试delete 和truncate的区别
select * from test
insert into test(coll) values('1'),('2'),('3'),('4'),('5')
--不会影响自增
delete from test
--自增会归零
truncate test
4、DQL查询数据(最重点)
4.1DQL
(Data Query LANGUAGE:数据库查询语言)
- 所有的查询造作都用它Selete
- 简单的查询,复杂的查询他都能做
- 数据库中最核心的语言,最重要的语句
- 使用频率最高的语句
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `grade`;
CREATE TABLE `grade` (
`gradeid` int(11) NOT NULL AUTO_INCREMENT COMMENT '年级编号',
`gradename` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '年级名称',
PRIMARY KEY (`gradeid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `grade` VALUES (1, '大一');
INSERT INTO `grade` VALUES (2, '大二');
INSERT INTO `grade` VALUES (3, '大三');
INSERT INTO `grade` VALUES (4, '大四');
INSERT INTO `grade` VALUES (5, '预科');
SET FOREIGN_KEY_CHECKS = 1;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`studentno` int(4) NOT NULL COMMENT '学号',
`loginpwd` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`studentname` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生姓名',
`sex` tinyint(1) NULL DEFAULT NULL COMMENT '性别,0或1',
`gradeid` int(11) NULL DEFAULT NULL COMMENT '年级编号',
`phone` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '联系电话,允许为空',
`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '地址,允许为空',
`borndate` datetime(0) NULL DEFAULT NULL COMMENT '出生时间',
`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '邮箱账号允许为空',
`identitycard` varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '身份证号',
PRIMARY KEY (`studentno`) USING BTREE,
UNIQUE INDEX `identitycard`(`identitycard`) USING BTREE,
INDEX `email`(`email`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `student` VALUES (1000, '111111', '周丹', 1, 1, '13500000001', '北京海淀区1号', '2021-08-28 11:27:25', 'test@qq.com', '452128199908080851');
INSERT INTO `student` VALUES (1001, '123456', '周颖', 1, 2, '13500000002', '河南洛阳', '2021-08-28 11:28:34', 'test@qq.com', '452128199908080852');
INSERT INTO `student` VALUES (1002, '111111', '杨文瑞', 1, 1, '13500000003', '天津市和平区', '2021-08-28 11:29:17', 'test@qq.com', '452128199908080853');
INSERT INTO `student` VALUES (1003, '123456', '韩萌', 1, 3, '13500000004', '上海卢湾区', '2021-08-28 11:30:00', 'test@qq.com', '452128199908080854');
INSERT INTO `student` VALUES (1004, '123456', '刘丽霞', 1, 4, '13500000005', '北京市通州', '2021-08-28 11:30:42', 'test@qq.com', '452128199908080855');
INSERT INTO `student` VALUES (1005, '123456', '姜佳航', 2, 1, '13500000006', '广西桂林市灵川县', '2021-08-28 11:31:42', 'test@qq.com', '452128199908080856');
INSERT INTO `student` VALUES (1006, '123456', '郑佳祥', 2, 4, '13500000007', '地址不详', '2021-08-28 11:32:29', 'test@qq.com', '452128199908080857');
INSERT INTO `student` VALUES (1007, '111111', '刘洋', 1, 1, '13500000008', '北京东城区', '2021-08-28 11:33:23', 'test@qq.com', '452128199908080858');
INSERT INTO `student` VALUES (1008, '111111', '刘洋洋', 1, 1, '13500000009', '河南洛阳', '2021-08-28 11:34:08', 'test@qq.com', '452128199908080859');
INSERT INTO `student` VALUES (1009, '123456', '刘毅', 1, 2, '13500000011', '安微', '2021-08-28 11:34:52', 'test@qq.com', '452128199908080810');
INSERT INTO `student` VALUES (1010, '111111', '赵杰', 1, 1, '13500000012', '河南洛阳', '2021-08-28 11:35:23', 'test@qq.com', '45212819990808011');
INSERT INTO `student` VALUES (1011, '111111', '赵成', 1, 1, '13500000013', '北京市海淀区中关村大街1号', '2021-08-28 11:36:16', 'test@qq.com', '452128199908080812');
INSERT INTO `student` VALUES (1012, '123456', '刘恒', 2, 3, '13500000014', '广西南宁中央大街', '2021-08-28 11:37:10', 'test@qq.com', '452128199908080813');
INSERT INTO `student` VALUES (1013, '123456', '张伟奇', 2, 1, '13500000015', '上海卢湾区', '2021-08-28 11:37:53', 'test@qq.com', '45212819990808014');
INSERT INTO `student` VALUES (1014, '123456', '牛恩来', 2, 4, '13500000016', '北京市中关村大街*号', '2021-08-28 11:38:45', 'test@qq.com', '45212819990808015');
INSERT INTO `student` VALUES (1015, '123456', '马辉', 1, 4, '13500000017', '广西桂林市灵川县', '2021-08-28 11:39:31', 'test@qq.com', '45212819990808016');
INSERT INTO `student` VALUES (1016, '111111', '陈勉', 1, 1, '13510000018', '上海卢湾区', '2021-08-28 11:40:10', 'test@qq.com', '45212819990808017');
INSERT INTO `student` VALUES (1017, '123456', '赵宇航', 2, 3, '13500000019', '北京长安街1号', '2021-08-28 11:41:01', 'test@qq.com', '4521281999080818');
SET FOREIGN_KEY_CHECKS = 1;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `subject`;
CREATE TABLE `subject` (
`subjectno` int(11) NOT NULL AUTO_INCREMENT COMMENT '课程编号',
`subjectname` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '课程名称',
`classhour` int(4) NULL DEFAULT NULL COMMENT '学时',
`gradeid` int(4) NULL DEFAULT NULL COMMENT '年级编号',
PRIMARY KEY (`subjectno`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `subject` VALUES (1, '高等数学-1', 110, 1);
INSERT INTO `subject` VALUES (2, '高等数学-2', 110, 2);
INSERT INTO `subject` VALUES (3, '高等数学-3', 100, 3);
INSERT INTO `subject` VALUES (4, '高等数学-4', 130, 4);
INSERT INTO `subject` VALUES (5, 'C语言-1', 110, 1);
INSERT INTO `subject` VALUES (6, 'C语言-2', 110, 2);
INSERT INTO `subject` VALUES (7, 'C语言-3', 100, 3);
INSERT INTO `subject` VALUES (8, 'C语言-4', 130, 4);
INSERT INTO `subject` VALUES (9, 'Java第一学年', 110, 1);
INSERT INTO `subject` VALUES (10, 'Java第二学年', 110, 2);
INSERT INTO `subject` VALUES (11, 'Java第三学年', 100, 3);
INSERT INTO `subject` VALUES (12, 'Java第四学年', 130, 4);
INSERT INTO `subject` VALUES (13, '数据库结构-1', 110, 1);
INSERT INTO `subject` VALUES (14, '数据库结构-2', 110, 2);
INSERT INTO `subject` VALUES (15, '数据库结构-3', 100, 3);
INSERT INTO `subject` VALUES (16, '数据库结构-4', 130, 4);
INSERT INTO `subject` VALUES (17, 'C# 基础', 130, 1);
SET FOREIGN_KEY_CHECKS = 1;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `result`;
CREATE TABLE `result` (
`studentno` int(4) NOT NULL COMMENT '学号',
`subjectno` int(4) NOT NULL COMMENT '课程编号',
`examdate` datetime(0) NOT NULL COMMENT '考试日期',
`studentresult` int(4) NOT NULL COMMENT '考试成绩',
INDEX `subjectno`(`subjectno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `result` VALUES (1, 1, '2021-08-28 14:40:25', 89);
INSERT INTO `result` VALUES (1, 2, '2021-08-28 14:40:38', 87);
INSERT INTO `result` VALUES (1, 3, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (1, 4, '2021-08-28 14:41:00', 80);
INSERT INTO `result` VALUES (1, 5, '2021-08-28 14:41:08', 90);
INSERT INTO `result` VALUES (1, 6, '2021-08-28 14:41:16', 87);
INSERT INTO `result` VALUES (1, 7, '2021-08-28 14:41:23', 67);
INSERT INTO `result` VALUES (1, 8, '2021-08-28 14:41:31', 85);
INSERT INTO `result` VALUES (1, 9, '2021-08-28 14:41:38', 65);
INSERT INTO `result` VALUES (1, 10, '2021-08-28 14:41:46', 83);
INSERT INTO `result` VALUES (1, 11, '2021-08-28 14:41:55', 76);
INSERT INTO `result` VALUES (1, 12, '2021-08-28 14:42:02', 77);
INSERT INTO `result` VALUES (1, 13, '2021-08-28 14:42:11', 80);
INSERT INTO `result` VALUES (1, 14, '2021-08-28 14:42:18', 90);
INSERT INTO `result` VALUES (1, 15, '2021-08-28 14:42:29', 68);
INSERT INTO `result` VALUES (2, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (2, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (2, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (2, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (2, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (2, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (2, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (2, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (2, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (2, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (2, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (2, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (2, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (2, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (2, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (2, 16, '2021-08-28 14:40:50', 99);
INSERT INTO `result` VALUES (3, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (3, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (3, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (3, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (3, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (3, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (3, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (3, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (3, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (3, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (3, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (3, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (3, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (3, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (3, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (3, 16, '2021-08-28 14:40:50', 99);
INSERT INTO `result` VALUES (4, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (4, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (4, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (4, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (4, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (4, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (4, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (4, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (4, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (4, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (4, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (4, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (4, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (4, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (4, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (4, 16, '2021-08-28 14:40:50', 99);
INSERT INTO `result` VALUES (5, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (5, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (5, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (5, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (5, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (5, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (5, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (5, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (5, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (5, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (5, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (5, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (5, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (5, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (5, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (5, 16, '2021-08-28 14:40:50', 99);
INSERT INTO `result` VALUES (6, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (6, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (6, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (6, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (6, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (6, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (6, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (6, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (6, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (6, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (6, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (6, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (6, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (6, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (6, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (6, 16, '2021-08-28 14:40:50', 99);
INSERT INTO `result` VALUES (7, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (7, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (7, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (7, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (7, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (7, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (7, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (7, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (7, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (7, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (7, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (7, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (7, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (7, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (7, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (7, 16, '2021-08-28 14:40:50', 99);
INSERT INTO `result` VALUES (8, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (8, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (8, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (8, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (8, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (8, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (8, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (8, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (8, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (8, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (8, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (8, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (8, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (8, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (8, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (8, 16, '2021-08-28 14:40:50', 99);
INSERT INTO `result` VALUES (9, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (9, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (9, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (9, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (9, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (9, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (9, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (9, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (9, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (9, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (9, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (9, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (9, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (9, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (9, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (9, 16, '2021-08-28 14:40:50', 99);
INSERT INTO `result` VALUES (10, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (10, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (10, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (10, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (10, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (10, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (10, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (10, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (10, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (10, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (10, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (10, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (10, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (10, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (10, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (10, 16, '2021-08-28 14:40:50', 99);
INSERT INTO `result` VALUES (11, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (11, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (11, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (11, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (11, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (11, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (11, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (11, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (11, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (11, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (11, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (11, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (11, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (11, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (11, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (11, 16, '2021-08-28 14:40:50', 99);
INSERT INTO `result` VALUES (12, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (12, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (12, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (12, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (12, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (12, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (12, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (12, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (12, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (12, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (12, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (12, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (12, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (12, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (12, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (12, 16, '2021-08-28 14:40:50', 99);
INSERT INTO `result` VALUES (13, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (13, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (13, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (13, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (13, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (13, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (13, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (13, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (13, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (13, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (13, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (13, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (13, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (13, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (13, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (13, 16, '2021-08-28 14:40:50', 99);
INSERT INTO `result` VALUES (14, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (14, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (14, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (14, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (14, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (14, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (14, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (14, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (14, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (14, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (14, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (14, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (14, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (14, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (14, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (14, 16, '2021-08-28 14:40:50', 99);
INSERT INTO `result` VALUES (15, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (15, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (15, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (15, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (15, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (15, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (15, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (15, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (15, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (15, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (15, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (15, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (15, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (15, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (15, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (15, 16, '2021-08-28 14:40:50', 99);
INSERT INTO `result` VALUES (16, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (16, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (16, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (16, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (16, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (16, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (16, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (16, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (16, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (16, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (16, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (16, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (16, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (16, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (16, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (16, 16, '2021-08-28 14:40:50', 99);
INSERT INTO `result` VALUES (17, 1, '2021-08-28 14:40:50', 86);
INSERT INTO `result` VALUES (17, 2, '2021-08-28 14:40:50', 76);
INSERT INTO `result` VALUES (17, 3, '2021-08-28 14:40:50', 96);
INSERT INTO `result` VALUES (17, 4, '2021-08-28 14:40:50', 80);
INSERT INTO `result` VALUES (17, 5, '2021-08-28 14:40:50', 87);
INSERT INTO `result` VALUES (17, 6, '2021-08-28 14:40:50', 65);
INSERT INTO `result` VALUES (17, 7, '2021-08-28 14:40:50', 30);
INSERT INTO `result` VALUES (17, 8, '2021-08-28 14:40:50', 50);
INSERT INTO `result` VALUES (17, 9, '2021-08-28 14:40:50', 60);
INSERT INTO `result` VALUES (17, 10, '2021-08-28 14:40:50', 36);
INSERT INTO `result` VALUES (17, 11, '2021-08-28 14:40:50', 70);
INSERT INTO `result` VALUES (17, 12, '2021-08-28 14:40:50', 26);
INSERT INTO `result` VALUES (17, 13, '2021-08-28 14:40:50', 16);
INSERT INTO `result` VALUES (17, 14, '2021-08-28 14:40:50', 66);
INSERT INTO `result` VALUES (17, 15, '2021-08-28 14:40:50', 98);
INSERT INTO `result` VALUES (17, 16, '2021-08-28 14:40:50', 99);
SET FOREIGN_KEY_CHECKS = 1;
4.2指定查询字段
--查询全部的学生 select 字段 from 表
select * from student
--查询指定字段
select studentno,studentname from student
--别名,给结果起一个名字AS 可以给字段起别名,也可以给表起别名
select studentno as 学号,studentname as 学生姓名 from student
--函数 concat(a,b) 拼接字符串
select concat('姓名:',studentname)as 新名字 from student
语法:select 字段、、、from 表
有的时候,列名字不是那么见名知意。我们起别名 AS 字段名AS别名 表名AS别名
去重:distinct
作用:去除select 查询出来的结果中重复的数据只显示一条
--查询一下有哪些同学参加了考试,成绩
select * from result --查询全部的考试成绩
--查询有哪些同学参加了考试
select studentno from result --查询有哪些同学参加了考试
--发现重复数据需要去重
select distinct studentno from result --发现重复数据,去重
数据库的列(表达式)
select VERSION() --查询系统的版本号 (函数)
select 100*3-1 as 计算结果 --用来计算 (表达式)
select @@auto_increment_increment --查询自增的步长(变量)
--学员考试成绩+1分查看
select studentno,studentresult+1 as '提分后' from result
数据库中的表达式:文本值,列,Null,函数,计算表达式,系统变量...
select 表达式 from 表
4.3where条件子句
作用:检索数据中符合条件的值
搜索的条件由一个或多个表达式组成,一般返回结果都是布尔值
逻辑运算符
--============= where==============
select studentno,studentresult from result
--查询考试成绩在90-100分之间
select studentno,studentresult from result
where studentresult>=95 and studentresult<=100
-- and &&
select studentno,studentresult from result
where studentresult>=95 && studentresult<=100
--模糊查询(区别)
select studentno,studentresult from result
where studentresult BETWEEN 95 and 100
--查询除了1号学生之外的同学的成绩
select studentno,studentresult from result
where not studentno = 1
select studentno,studentresult from result
where studentno !=1
模糊查询:比较运算符
===========模糊查询============
--查询姓刘的同学
--like结合%(代表0到任意字符)_(一个字符)
select studentno,studentname from student
where studentname like '刘%'
--查询姓刘的同学,名字后面带一个字的
select studentno,studentname from student
where studentname like '刘_'
--查询名字中间有嘉字的同学
select studentno,studentname from student
where studentname like '%嘉%'
======in(具体的一个或多个值)======
--查询1001,1002,1003号学员
select studentno,studentname from student
where studentno in (1001,1002,1003)
--查询在北京的学生
select studentno,studentname,address from student
where address in('安徽','河南洛阳')
-------null notnull-----
----查询地址为空的学生
select studentno,studentname,address from student
where address='' or address is null
----查询有出生日期的同学
select studentno,studentname,address from student
where borndate is not null
---查询没有出生日期的同学 为空
select studentno,studentname,address from student
where borndate is null
4.4、联表查询
JOIN对比
===================联表查询JOIN======================
--查询参加了考试的同学(学号,姓名,科目编号,分数)
selecT* from student
select * from result
/*思路
1.分析需求,分析查询的字段来自那些表,(链接查询)
2.确定使用那种链接查询?7种
确定交叉点(这两个表中那个数据是相同的)
判断的条件:学生表中的studentno=成绩表的studentno
*/
select s.studentno,studentname,subjectno,studentresult
from student as s
INNER join result as r
where s.studentno=r.studentno
/*RIGHT JOIN*/
select s.studentno,studentname,subjectno,studentresult
from student as s
right join result as r
on s.studentno=r.studentno
/*Left Join*/
select s.studentno,studentname,subjectno,studentresult
from student as s
left join result as r
on s.studentno=r.studentno
===================联表查询JOIN======================
--查询参加了考试的同学(学号,姓名,科目编号,分数)
selecT* from student
select * from result
/*思路
1.分析需求,分析查询的字段来自那些表,(链接查询)
2.确定使用那种链接查询?7种
确定交叉点(这两个表中那个数据是相同的)
判断的条件:学生表中的studentno=成绩表的studentno
*/
---join(连接的表) on (判断的条件) 连接查询
---where 等值查询
select s.studentno,studentname,subjectno,studentresult
from student as s
INNER join result as r
where s.studentno=r.studentno
/*RIGHT JOIN*/
select s.studentno,studentname,subjectno,studentresult
from student as s
right join result as r
on s.studentno=r.studentno
/*Left Join*/
select s.studentno,studentname,subjectno,studentresult
from student as s
left join result as r
on s.studentno=r.studentno
/*查询缺考的同学*/
select s.studentno,studentname,subjectno,studentresult
from student as s
left join result as r
on s.studentno=r.studentno
where studentresult is null
/*查询参加考试同学信息:学号,学生姓名,科目名称,分数*/
/*思路
1.分析需求,分析查询的字段来自那些表,student result subject(链接查询)
2.确定使用那种链接查询?7种
确定交叉点(这两个表中那个数据是相同的)
判断的条件:学生表中的studentno=成绩表的studentno
*/
select s.studentno,studentname,studentresult,subjectname
from student as s
right join result as r
on s.studentno=r.studentno
inner join subject a
on r.subjectno=a.subjectno
where studentresult is not null
/*我要查询那些数据select ....
从那几个表中查 from 表 xxx join 连接的表 on 交叉条件
假设存在多张表查询,慢慢来先查询两张表开始,然后再慢慢增加*/
/*from a left join b
form a right join b*/
自连接
自己的表和自己的表连接,核心:一张表拆为两张一样的表即可
/*自链接*/
CREATE TABLE IF NOT EXISTS `category`(
`categoryid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主题id',
`pid` INT(10) NOT NULL COMMENT '父id',
`categoryname` VARCHAR(50) NOT NULL COMMENT '主题名字',
PRIMARY KEY (`categoryid`)
)ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8
INSERT INTO `category` (`categoryid`, `pid`, `categoryname`)
VALUES ('2', '1', '信息技术'),
('3', '1', '软件开发'),
('4', '3', '数据库'),
('5', '1', '美术设计'),
('6', '3', 'web开发'),
('7', '5', 'ps技术'),
('8', '2', '办公信息');
select a.categoryname as 父类,b.categoryname as 子类 from category a,category b where a.categoryid=b.pid
/*查询学院所属的年纪 (学号,学生的姓名,年级名称)*/
select studentno,studentname,gradename
from student as s
INNER JOIN grade as g
ON s.gradeid=g.gradeid
/*查询科目所属的年级(科目名称,年级名称)*/
select subjectname,gradename from `subject` sub
inner join grade g
on sub.gradeid=g.gradeid
4.5、分页和排序
排序
/*分页 limit 和排序 order by*/
/*
排序:升序asc 降序 desc
order by 通过那个字段排序,怎么排序
查询的结果根据年级排序
*/
select subjectname,gradename from `subject` sub
inner join grade g
on sub.gradeid=g.gradeid order by gradename asc
/*100万条数据
为什么要分页
缓解数据库压力,给人的体验更好
*/
/*每页显示5条数据
语法:limit 起始值,页面的大小
网页应用:当前页,总的页数,页面的大小*/
select subjectname,gradename from `subject` sub
inner join grade g
on sub.gradeid=g.gradeid order by gradename asc
LIMIT 0,5
/*第一页 limit 0,5 (1-1)*5
第二页 limit 5,5 (2-1)*
第三页 limit 10,5 (3-1)*5
第N页 limit n,5 (n-1)*pagsize,pagesize
【pagesize:页面大小】
【(n-1)*pagsize:起始值】
【n:当前页】
【数据总数/页面大小=总数值】*/
语法:limit 查询起始下标,pagesize
4.6、子查询
where(这个值是计算出来的)
本质:在where语句中嵌套一个子查询语句
where(select * from )
/*where*/
/*
1.查询数据库结构-1的所有考试结果(学号,科目编号,成绩),降序排列
*/
/*方式1*/
select studentno,subjectname,studentresult from result r
INNER join subject sub
on r.subjectno=sub.subjectno
where subjectname='数据库结构-1'
order by studentresult desc
/*方式2*/使用子查询(由里及外)
select studentno,subjectno,studentresult from result
where subjectno=(select subjectno from subject where subjectname='数据库结构-1')
ORDER BY studentresult desc
4.7、
--查询不同课程的平均分,最高分,最低分,平均分大于80分的
--核心:(根据不同的课程分组)
select subjectname,avg(studentresult) 平均分,max(studentresult) 最高分,min(studentresult) 分高分
from result r
inner join `subject` sub
on r.subjectno=sub.subjectno
GROUP BY r.subjectno
having (平均分>80)
5、Mysql函数
5.1、常用函数
=================常用函数====================
/*数学运算*/
select ABS(-8) --绝对值
select CEILING(9.4) --向上取整
select floor(9.4) --向下取整
select RAND() --返回0~1之间的随机数
select SIGN(0) --判断一个数的符号0 负数返回-1,正数返回1
/*字符串函数*/
select CHAR_LENGTH('str') --字符串长度
select concat('我','你们') -拼接字符串
select insert('我爱编程helloworld',1,2,'超级热爱') --查询,从某个位置替换某个长度
select LOWER('Ktr') --小写字母
select UPPER('Ktr') --大写字母
select INSTR('str','r') --返回第一次出现的字符串的索引
select replace('坚持就是努力','坚持','努力') --替换出现的指定字符串
select SUBSTR('abcdefgh',2,3) --返回指定的字符串
select REVERSE('abcdefg') --反转字符串
/*查询姓周同学,名字 邹*/
select REPLACE(studentname,'周','邹') from student
where studentname like '周%'
/*时间和日期函数*/
select CURRENT_DATE() --获取当前日期
select now() --获取当前的时间
select SYSDATE() --系统时间
select LOCALTIME() --本地时间
SELECT YEAR(NOW())
SELECT MONTH(NOW())
SELECT DAY(NOW())
SELECT MINUTE(NOW())
SELECT SECOND(NOW())
5.2、聚合函数
===========聚合函数=============
/*都能够统计表中的数据*/
select count(studentname) from student --count(指定列) 会忽略所有的null值
select count(*) from student --count(*)不会忽略null值 ,本质计算行数
select count(1) from student --count(1) 不会忽略null值 ,本质计算行数
select sum(studentresult) 总和 from result
select avg(studentresult) 平均分 from result
select max(studentresult) from result
select min(studentresult) from result
--查询不同课程的平均分,最高分,最低分,平均分大于80分的
--核心:(根据不同的课程分组)
select subjectname,avg(studentresult) 平均分,max(studentresult) 最高分,min(studentresult) 分高分
from result r
inner join `subject` sub
on r.subjectno=sub.subjectno
GROUP BY r.subjectno
having (平均分>80)
5.3、数据库级别的MD5加密(扩展)
什么是MD5?
主要增强算法复杂度和不可逆性
MD5不可逆,具体的值的MD5是一样的
MD5破解网站的原理,背后有一个字典,MD5加密后的值 加密前的值
==================测试MD5加密=====================
--明文密码
insert into testmd5 values(1,'zhangsan','123456'),(2,'lisi','123456'),(3,'wangwu','123456')
--加密
update testmd5 set pwd=MD5(pwd) --加密全部的密码
--插入的时候加密
insert into testmd5 values(4,'xiaoming',MD5('123456'))
--如何校验:将用户传递进来的密码,进行md5加密,然后对比加密后的值
select * from testmd5 where name='xiaoming' and pwd=MD5('123456')
6、事务(ACID)
要么都成功,要么失败
1、sql执行 a给b转账 a1000 --》200 b200
2、sql执行 b收到a的钱 a800 --》b400
将一组sql放在一个批次中去执行
事务原则:ACID原则 原子性,一致性,隔离性,持久性
原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency)
事务前后数据的完整性必须保持一致。
执行事务
隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
隔离所导致的一些问题
脏读:
指一个事务读取了另一个事务未提交的数据
不可重复度:
在一个事务内读取表中的某一行数据,多次读取结果不同。
虚读 幻读
是指在一个事务内读取了别的事务插入的数据,导致前后不一致
===================事务========================
--mysql是默认开启事务自动提交的
SET autocommit=0/*关闭*/
set autocommit=1/*开启(默认的)*/
/*手动处理事务*/
SET autocommit=0 关闭自动提交
/*事务开启*/
START TRANSACTION --标记一个事务的开始,从这个之后的sql都在同一个事务内
INSERT XX
INSERT XX
/*提交:持久化(成功)*/
COMMIT
/*回滚:回到原来的样子(失败)*/
ROLLBACK
/*事务结束*/
SET autocommit =1 开启自动提交
--了解
SAVEPOINT 保存点名--设置一个事务的保存点
ROLLBACK TO SAVEPOINT 保存点名 -- 回滚到保存点
RELEASE SAVEPOINT 保存点名 --撤销保存点
模拟场景
/*模拟转账*/
set autocommit=0;/*关闭自动提交*/
start TRANSACTION/*开启事务*/
update account set money=money-500 where name='a'
update account set money=money+500 where name='b'
commit;/*提交事务*/
ROLLBACK;/*回滚*/
SET autocommit=1;/*恢复默认值*/
7、索引
MySQL索引是一种数据结构,用于提高数据库查询的性能。索引可以帮助数据库快速定位到包含特定值的数据行,从而加快查询速度。
MySQL支持多种类型的索引,包括主键索引、唯一索引、普通索引和全文索引等。索引可以在表的一个或多个列上创建,以便在查询时快速定位数据。
7.1、索引的分类
在一个表中,主键索引只能由一个,唯一索引可以有多个
- 主键索引(PRIMARY KEY)
- 唯一标识,主键不可重复,只能有一个列作为主键
- 唯一索引(UNIQUE KEY)
- 避免重复的列出现,唯一索引可以重复,多个列都可以标识为唯一索引
- 常规索引(KEY/INDEX)
- 默认的,index,key关键字来设置
- 全文索引(Full )
- 在特定的数据库引擎下才有,MyISAM
- 快速定位数据
基础语法
--显示所有的索引信息
SHOW INDEX FORM STUDENT
--增加一个全文索引(索引名)列名
ALTER table school.student add fulltext index `studentname`(`studentname`);
--explain 分析sql执行的情况
explain select * from student;--非全文索引
explain select * from student where match(studentname)against('刘')
7.2、测试索引
CREATE TABLE `app_user` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) DEFAULT '',
`email` VARCHAR(50) NOT NULL,
`phone` VARCHAR(20) DEFAULT '',
`gender` TINYINT(4) UNSIGNED DEFAULT '0',
`password` VARCHAR(100) NOT NULL DEFAULT '',
`age` TINYINT(4) DEFAULT NULL,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
-- 插入100万数据
DELIMITER $$ -- 写函数之前必写
CREATE FUNCTION mock_data()
RETURNS INT
BEGIN
DECLARE num INT DEFAULT 1000000;
DECLARE i INT DEFAULT 0;
WHILE i<num DO
-- 插入语句
INSERT INTO app_user(`name`,`email`,`phone`,`gender`,`password`,`age`)
VALUE(CONCAT('用户',i),'534240118@qq.com',FLOOR (CONCAT('18',RAND()*9999999)),FLOOR (RAND()*2),
UUID(),FLOOR (RAND()*100));
SET i = i+1;
END WHILE;
RETURN i;
END;
INSERT INTO app_user(`name`,`email`,`phone`,`gender`,`password`,`age`)
VALUE(CONCAT('用户',i),'534240118@qq.com',FLOOR (CONCAT('18',RAND()*9999999)),FLOOR (RAND()*2),
UUID(),FLOOR (RAND()*100))
SELECT mock_data();
SELECT * FROM app_user WHERE `name`='用户9999' -- 接近半秒
EXPLAIN SELECT * FROM app_user WHERE `name`='用户9999' -- 查询99999条记录
-- id _ 表名_字段名
-- create index on 字段
CREATE INDEX id_app_user_name ON app_user(`name`); -- 0.001 s
EXPLAIN SELECT * FROM app_user WHERE `name`='用户9999' -- 查询一条记录
索引在小数据量的时候,用处不大,但是在大数据的时候,区别十分明显
7.3、索引原则
- 索引不是越多越好
- 不要对进程变动数据加索引
- 小数据量的表不需要加索引
- 索引一般加在常用来查询的字段上
索引的数据结构
Hash类型的索引
Btree:InnoDB的默认的底层结构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本