From fe8c96c854edc7bc41843ec6f1f5d442be553144 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E5=85=83=E4=BF=8A=E4=B8=B4?= <1654759188@qq.com> Date: Thu, 23 Mar 2023 22:57:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=91=A8=E5=85=83=E4=BF=8A=E4=B8=B4=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...345\257\274\345\233\276\345\222\257.xmind" | Bin ...15\344\271\240\347\273\203\344\271\240.md" | 363 ++++++++++++++++++ 2 files changed, 363 insertions(+) rename "22 \345\221\250\345\205\203\344\277\212\344\270\264/MYSQL.xmind" => "22 \345\221\250\345\205\203\344\277\212\344\270\264/0312 \346\200\235\347\273\264\345\257\274\345\233\276\345\222\257.xmind" (100%) create mode 100644 "22 \345\221\250\345\205\203\344\277\212\344\270\264/0321 \345\221\250\345\205\203\344\277\212\344\270\264\345\244\215\344\271\240\347\273\203\344\271\240.md" diff --git "a/22 \345\221\250\345\205\203\344\277\212\344\270\264/MYSQL.xmind" "b/22 \345\221\250\345\205\203\344\277\212\344\270\264/0312 \346\200\235\347\273\264\345\257\274\345\233\276\345\222\257.xmind" similarity index 100% rename from "22 \345\221\250\345\205\203\344\277\212\344\270\264/MYSQL.xmind" rename to "22 \345\221\250\345\205\203\344\277\212\344\270\264/0312 \346\200\235\347\273\264\345\257\274\345\233\276\345\222\257.xmind" diff --git "a/22 \345\221\250\345\205\203\344\277\212\344\270\264/0321 \345\221\250\345\205\203\344\277\212\344\270\264\345\244\215\344\271\240\347\273\203\344\271\240.md" "b/22 \345\221\250\345\205\203\344\277\212\344\270\264/0321 \345\221\250\345\205\203\344\277\212\344\270\264\345\244\215\344\271\240\347\273\203\344\271\240.md" new file mode 100644 index 0000000..dd067f9 --- /dev/null +++ "b/22 \345\221\250\345\205\203\344\277\212\344\270\264/0321 \345\221\250\345\205\203\344\277\212\344\270\264\345\244\215\344\271\240\347\273\203\344\271\240.md" @@ -0,0 +1,363 @@ +-- 0.创建数据库练习 +-- 1.直接创建数据库db3 +-- 2.判断是否存在并创建数据库db4 +-- 3.查看所有的数据库 +-- 4.删除db3数据库 +-- 5.查看正在使用的数据库 +-- 6.使用db4数据库 + +```mysql +CREATE DATABASE db3 charset utf8; + +CREATE DATABASE if not EXISTS db4 charset utf8; + +show DATABASES; + +drop DATABASE db3; + +SELECT DATABASE(); + +use db +``` + +4; + +-- 1.创建表练习 + +-- - 需求:设计一张学生表,请注重数据类型、长度的合理性 +-- +-- 1.编号 +-- 2.姓名,姓名最长不超过10个汉字 +-- 3.性别,因为取值只有两种可能,因此最多一个汉字 +-- 4.生日,取值为年月日 +-- 5.入学成绩,小数点后保留两位 +-- 6.邮件地址,最大长度不超过 64 +-- 7.家庭联系电话,不一定是手机号码,可能会出现 - 等字符 +-- 8.学生状态(用数字表示,正常、休学、毕业...) + +```mysql +CREATE TABLE `stu` ( + `num` int(11) DEFAULT NULL, + `name` varchar(10) DEFAULT NULL, + `sex` varchar(1) DEFAULT NULL, + `birthday` datetime DEFAULT NULL, + `text` decimal(10,2) DEFAULT NULL, + `address` varchar(64) DEFAULT NULL, + `tel` varchar(255) DEFAULT NULL, + `emotion` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +``` + +-- 2.更改表练习 + -- 1.修改stu表名为student + -- 2.给学生表添加一列remark,类型为varchar(20) + -- 3.修改remark列的类型是varchar(100) + -- 4.修改remark列的名变为intro,类型varchar(30) + -- 5.删除intro列 + +```mysql +ALTER TABLE stu RENAME to student; + +ALTER TABLE student add remark varchar(20); + +ALTER TABLE student MODIFY remark varchar(100); + +ALTER TABLE student change remark intro VARCHAR(30); + +ALTER TABLE student drop intro; + +``` + +​ -- 1.创建表 +​ + +​ -- 1.创建表 +​ + +-- 2.插入部分数据,给id name age sex赋值 + +```mysql +INSERT into student(id,`name`,sex) VALUES +(1,'周周','男'), +(2,'华华','男'), +(3,'玉玉','女'), +(4,'龙龙','男'), +(5,'零零','女'); +``` + +-- 1.在mysql中插入字符数据,数据使用单引号或者双引号都可以,建议使用单引号 +-- 2.在mysql中插入的数据是date类型,那么将数据书写在单引号或者双引号都可以 + +-- 3.插入所有的字段,不写字段名 +skip~ +-- 4.插入所有的字段,写出字段名 +skip~ +-- 5.批量插入数据 +-- 插入数据注意 +-- 6.插入数据时 省略列名,那么如果不需要给列赋值那么使用null + +-- 4.修改数据 + + +-- 1.修改数据:修改性别都变为女 + +``` +UPDATE student set sex='女'; +``` + +-- 2.修改数据:带条件修改id是2的学生性别变为男 + +``` +UPDATE student set sex='男' WHERE id=2; +``` + +-- 3.一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京 + +``` +ALTER TABLE student add age int; +UPDATE student set age=26,address='北京' WHERE id=3; +``` + +-- 5.删除数据 + -- 1.带条件删除数据,删除id是3的记录 + +``` + DELETE FROM student where id=3; +``` + +​ + +​ + +-- 2.带条件删除数据,删除id是1和2的记录 id in(1,2) : 表示id的值是1或者2 + +``` +DELETE FROM student WHERE id in (1,2); +``` + +-- 3.不带条件删除 +-- 还可以使用:DDL +-- 这里的table可以省略 + +-- 6.查询数据 +-- + +-- 1.查询多个字段 +-- * 表示所有字段 + +```mysql +SELECT * FROM student; +``` + + +​ -- 2.写出查询每列的名称 +desc student; +​ -- 3.查询表中name和age列,name列的别名为姓名,age列的别名为年龄 +​ -- 使用as起给字段和表起别名 +​ -- as可以省略 + +```mysql +SELECT name,age FROM student; +``` + +-- 4.去重 +-- 对age去重 + +-- 对age和address去重 +-- 如果多个字段一起去重,如果所有的字段值全部一样才会去重 + +DISTINCT + +-- 7.带条件的查询 + -- 1.查询数学成绩大于80学生 + +-- 2.查询英语成绩小于等于80学生 + +-- 3.查询年龄等于20的学生 + +-- 4.查询年龄不等于20的学生 + +-- 5.查询年龄大于35并且性别是男的学生 + +-- 6.查询年龄大于35或者性别是男的学生 + +-- 7.查询id是1 3 5的学生 + +-- 8.查询id不是1 3 5的学生 + +-- not in 是in的取反,表示不在什么其中 + +```mysql +select * from lipu where math>80; + +select * from lipu where english<80; + +select * from lipu where age=20; + +select * from lipu where age !=20; + +select * from lipu where age>35 and sex='男'; + +select * from lipu where age>35 or sex='男'; + +select * from lipu where id in (1,3,5); + +select * from lipu where id not in (1,3,5); +``` + +-- 范围查询 +-- 9.英语成绩在75和90之间 + +``` +select * from lipu where english between 75 and 90; +``` + +-- 模糊查询 使用like +-- 10.查询姓赵的学生 +-- name like '赵%' 表示name的值以赵开始,后面是什么都可以 +-- %在模糊查询中表示任意个数的字符 + +``` +select * from lipu where name like '赵%'; +``` + +-- name like '%岩%' 表示name的值只要含有岩即可,前后%表示匹配任意多个字符 + +``` +select * from lipu where name like '%岩%'; +``` + +-- 12.查询姓赵并且是三个字的学生 +-- _下划线在模糊查询中表示单个字符 + +``` +select * from lipu where name like '赵__'; +``` + +-- 排序 +-- desc表示降序 +-- 13.按照年龄降序排序 + +-- 14.先按照年龄降序排序,如果年龄相同在按照数学降序排序 + +``` +select * from lipu ORDER BY age desc; +``` + +-- 15.先按照年龄降序排序,如果年龄相同在按照数学升序排序 + +``` +select * from lipu ORDER BY age desc,math asc; +``` + +-- 聚合函数 +-- 16.查询学生总数即有多少名学生 + +``` +select count(id) from lipu; +``` + +-- 17.查询数学成绩总分数 + +``` +select sum(math) from lipu; +``` + +-- 18.查询数学成绩最高分数 + +``` +select max(math) from lipu; +``` + +-- 19.统计数学和英语总和值 + +``` +select sum(math)+sum(english) from lipu; +select sum(ifnull(math,0)+ ifnull(english,0)) from lipu; +``` + +-- 实现一:分别统计数学和英语的每个总成绩,然后进行相加 + + +-- 实现二:分别统计每个人的数学和英语成绩,然后将每个人的数学和英语成绩相加 + /* + 结果是:380 少了柳岩的90 + sum(math+english): + 问题原因: + + + +​ 解决上述问题:使用mysql自带函数:ifnull(字段值,默认值) +​ 说明: +​ ifnull(字段值,默认值) +​ 如果字段值是null,那么使用默认值作为ifnull函数的整体结果 +​ 如果字段值不是null,那么使用字段值作为ifnull函数的整体结果 +​ 举例: +​ ifnull(english,0): +​ 1)假设english的值是null===>ifnull(null,0)===>整体结果是0 +​ 2)假设english的值是80===>ifnull(80,0)===>整体结果是80 +*/ + +-- 分组 + -- 准备数据 + +```mysql +create table car( + id int, + color char(2), + price float +); + +insert into car(id,color,price) values(1,'黄色',16); +insert into car(id,color,price) values(2,'黄色',16); +insert into car(id,color,price) values(3,'蓝色',5); +insert into car(id,color,price) values(4,'红色',60); +insert into car(id,color,price) values(5,'白色',8); +insert into car(id,color,price) values(6,'红色',60); +``` + +-- 1.查询每种颜色车辆的总价 + +```mysql +SELECT sum(price),color FROM car GROUP BY color; +``` + +-- 2.查询每种颜色车辆总价大于30车辆的颜色和总价 + +```mysql +SELECT color,sum(price) FROM car GROUP BY color HAVING sum(price)>30; +``` + +-- 3.注意:分组查询的结果最好是分组字段和聚合函数,不要是其他字段 + +-- 4.where后面不能使用聚合函数 报错的 + +-- 小结:where是在分组前筛选,having是在分组后筛选 +-- 5.查询车的单价大于15的每种颜色车辆总价大于30车辆的颜色和总价 + +```mysql +SELECT color,sum(price) FROM car WHERE price>15 GROUP BY color HAVING sum(price)>30; +``` + +-- 分页 +-- 1.分页查询数据,每页显示2条数据 +-- 第一页 +-- 0 表示起始索引,对应第一行数据 +-- 2表示每页显示2条数据 + + +-- 当起始索引是0的情况下可以不写索引0,写法如下, +-- 下面的2表示每页显示的数据行数 + +-- 第二页 +-- 第一个2表示起始索引,对应三行数据 +-- 第二个2表示每页显示两条数据,对于第二个参数每个公司基本是固定的,最后一页剩下几行数据 +-- 就会显示几行数据 + +-- 第三页 + /* + 公式: 起始索引 = (当前页码-1)*每页显示的条数 + 0 1 2 + 2 2 2 + 4 3 2 + */ \ No newline at end of file -- Gitee