python基础输入输出a input(请输入\n) b 18 print(f大家好,我是{a},今年{b}岁) # 以下是{}占位符的另外用法 x wsda y 12.1982 print(f第一个字符{x:^10}第二个浮点数{y:.4f}) # 还有 ^ 的相关用法如果有空可以试试数值类型转换int(n)转整型float(n)转浮点型str(n)转字符串list(n)转列表typle(n)转元组eval(n)返回表达式计算结果# eval返回表达式的计算结果 a eval(input()) print(type(a)) print(a)条件判断# 条件语句 def col(a,b,c): return (b-a)*c income int(input()) if income 5000: print(income) elif income 8000: print(col(5000,8000,0.03)) elif income 17000: print(col(5000,8000,0.03)col(8000,income,0.1)) elif income 30000: print(col(5000,8000,0.03)col(8000,17000,0.1)col(17000,income,0.2)) else: print(col(5000,8000,0.03)col(8000,17000,0.1)col(17000,30000,0.2)col(30000,income,0.25))match语句python 3.10之后引入的match-casecase _判断剩下的所有a int(input()) match a: case 1: print(a) case 2: print(a) case _: print(xxx)mysql1、数据库的概念数据能被计算机识别并处理的的符号集合。例如数值、视频、音频、TXT文本等数据库数据库是有组织可共享的、持久存储和管理数据的容器。数据库的好处1、持久化数据到本地 2、可以实现结构化查询、方便管理数据库的分类关系型数据库一系列相互关联的二维表【行列】组成的数据库非关系型数据库又称NoSQL是存储数据时不依靠固定的表组成的数据库。eg键值对模型以键值对存储数据文档模型以一个个文档来存储数据列模型一列来存储数据一列为一条数据关系型数据库管理系统主要有MySQLOrcaleSqlServerDB2等非关系型数据库管理系统主要有redismemcachemongoDBHbase等2、数据库系统的组成数据库、数据库管理系统、数据库应用程序、人员3、 MySQL的优点多语言支持MySQL为C、C、Python、Java等多种编程语言提供了API接口访问和使用方便。可以移植性好MySQL是跨平台的Linux、windows、macOS、鸿蒙等。支持大量数据查询和存储MySQL可以承受大量的并发访问。4、SQL语言SQLStructured Query Language结构化查询语言 是访问和处理数据库的标准的计算机语言。5、navicat数据库使用MySQL的语法规范不区分大小写但建议关键字大写表名、列名小写每条命令最好用分号结尾每条命令根据需要可以进行缩进 或换行注释ctrl/ 单行注释# 注释文字单行注释-- 注释文字多行注释/* 注释文字 */5.1 数据类型数据表是由字段和记录组成的字段由数据类型和约束条件组成。不同数据按照不用数据类型存储方便清晰。来到超市会发现摆放粮油的货架大小 和 摆放巧克力等零食的货架大小不一样大小。不同的数据使用不同的数据类型存储内存中分配的空间大小是不一样的。为了合理的使用内存空间方便清晰的存储数据一定要合理的声明数据的数据类型。python中数据类型有—— 数值、列表、字典、元组、集合等C语言中数据类型有—— 整型、字符型、浮点型、指针、数组、结构体、共用体、枚举等数据库兼容数值类型、字符串类型、时间日期类型 三种数据类型类型1数值以上分别是1字节 2字节 3字节 6字节 8字节的整数有符号数和无符号数有符号数区分正负 [-128, 127] 计算机中使用 0表示正 1表示负无符号数没有正负之分 unsigned int [0, 255]tinyint是8位的整数位是什么东西【内存单元】位 最小单元 bit字节 基本单元 Byte 1字节 8位 计算机中数据的存储以【字节】为单元KB 1KB 1024BMBGBTBPBfloat 和 double的区别是什么单精度 和 双精度小数点的有效位不同。decimal(5, 2)类型2字符串类型3时间日期5.2 约束条件使用约束条件约束条件是用于约束和规范数据的规则。6、操作数据表1、查看数据表SHOW TABLES2、创建数据表CREATE TABLE table_name(字段1 数据类型 约束条件字段2 数据类型 约束条件)character set 字符集3、查看表的创建语句SHOW CREATE TABLE 表名;4、查看表结构DESC 表名;5、修改表名RENAME TABLE 原表名 TO 新表名;【注意有时出错是因为没有获得修改权限可以使用下面修改方式ALTER TABLE 原表名 RENAME TO 新表名; 】6、练习11、创建学生表 std1 id字段(不为负的整数自增长主键不为空) name字段(数据类型为varchar(20)默认值为空字符串) age字段(数据类型为tinyint不为负数默认值为0) height字段(数据类型为decimal(5,2)默认值为0.0) gender字段(数据类型为enum其中包括男女保密) 2、查看创建学生表的语句查看表结构CREATE TABLE std1( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, name VARCHAR(20) DEFAULT(), age TINYINT UNSIGNED DEFAULT(0), height DECIMAL(5,2) DEFAULT(0.0), gender ENUM(男,女) ) SHOW CREATE TABLE std1; DESC std1;7、增加数据表字段ALTER TABLE 表名ADD 列名 类型[约束类型]8、修改数据表字段ALTER TABLE 表名CHANGE 原字段名 新字段名 类型【约束】;注如果原字段名与新字段名相同此时和modify作用一样ALTER TABLE 表名MODIFY 字段名 类型 【约束】。9、删除数据表字段ALTER TABLE 表名DROP 字段名;10、删除数据表DROP TABLE 表名;11、练习2第1题 创建班级classes表 id字段(不为负的整数自增长主键不为空) name字段(数据类型为varchar(20)默认值为空) 班级表中增加字段 (course varchar(20) comment “课程”) 修改班级表中course字段 (将course字段改为courses) 查询一下表结构 desc classes;第2题: 在终端指令处进行如下操作 进入数据库、查询所有数据库、创建数据库AI25071、创建数据表tb1[其中 包含id name等字段]、查询表结构、添加字段age、修改name字段类型为 varchar(20)、查询表结构、移动name字段到首列、删除字段age、查询表结构-- 练习2 CREATE TABLE classes( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, name VARCHAR(20) DEFAULT() ); ALTER TABLE classes ADD course VARCHAR(20) COMMENT 课程; ALTER TABLE classes CHANGE course courses VARCHAR(20) COMMENT 课程; DESC TABLE classes;use hqyj; show databases; CREATE DATABASE AI25071; use AI25071; CREATE TABLE tb1(id INT PRIMARY KEY NOT NULL,name VARCHAR(20) NOT NULL); DESC TABLE tb1; ALTER TABLE tb1 ADD age INT ; ALTER TABLE tb1 MODIFY age VARCHAR(20); DESC TBALE tb1;7、三范式1NF 原子化 2NF 完全依赖 3NF 无传递依赖练习1、学生选课表 学号 | 姓名 | 课程号 | 课程名 | 教师 | 教师职称 | 成绩改成3NF首先确认该表满足1NF其次根据业务语义确定主键——由于一个学生可选多门课、一门课可被多名学生选单属性无法唯一标识记录故采用联合主键(学号, 课程号)接着检查2NF发现姓名仅依赖于学号、课程名仅依赖于课程号均属于对联合主键的部分依赖因此拆分出学生表(学号, 姓名)与课程表(课程号, 课程名)剩余属性构成选课表(学号, 课程号, 教师, 教师职称, 成绩)再检查3NF选课表中教师职称依赖于教师、教师依赖于主键存在传递依赖故继续拆分出教师表(教师, 教师职称)最终得到选课表(学号, 课程号, 教师, 成绩)。2、【分析并创建表】设计一个图书馆借阅系统的数据库表结构至少包含图书信息读者信息借阅记录关系联系图书信息书编号书名出版社读者信息读者id读者信息借阅记录读者id书编号借阅时间是否归还8、数据增删改查1、插入数据INSERT INTO 表名 (字段1,字段2,...)VALUES(值1,值2,...)2、更新数据UPDATE 表名SET 字段1 值1,字段2 值2,...[WHERE 条件];3、删除数据DELETE FROM 表名【WHERE 条件】;4、快速清空表TRUNCATE TABLE 表名;5、查找数据1、简单查询SELECT 列名 FROM 表名 [WHERE 条件];-- 1.查询年龄大于18的学生信息SELECT *FROM studentsWHERE age 18;-- 2.查询身高大于160的女生信息SELECT *FROM studentsWHERE height 160 AND gender 女;-- 3.查询所有姓周的学生信息 【周%】SELECT *FROM studentsWHERE name LIKE 周%;-- 4.查询学号为1、3、5的学生信息SELECT *FROM studentsWHERE id IN (1,3,5);-- 5.查询身高在[160180]范围内的学生信息SELECT *FROM studentsWHERE height BETWEEN 160 AND 180;-- 6.查询身高为空值的学生信息查询缺失值SELECT *FROM studentsWHERE height IS NULL;2、排序与分页SELECT 列名 FROM 表名 [WHERE 条件] [ORDER BY 列名 [ASC|DESC]] [LIMIT 偏移量, 行数];SELECT *FROM studentsWHERE gender 女ORDER BY height DESCLIMIT 3;3. 聚合函数函数说明COUNT()计数SUM()求和AVG()平均值MAX()最大值MIN()最小值注GROUP BY 之后SELECT 里要么放分组字段要么放聚合函数MAX/MIN/COUNT/SUM/AVG其他裸字段会报错。4、连接查询1. 内连接内连接是返回连接表中符合连接条件记录的连接查询。包括显式内连接、隐式内连接显式内连接语法格式 SELECT 字段 FROM 表1 INNER JOIN 表2 ON 连接条件 [WHERE 条件]隐式内连接语法格式 SELECT2. 外连接左外连接以左表为主左外连接是以左表为基表返回左表中所有记录及连接表中符合条件的记录的外连接。语法格式 SELECT 字段 FROM 表1 LEFT [outer] JOIN 表2 ON 连接条件 [WHERE 条件];右外连接以右表为主右外连接是以右表为基表返回右表中所有记录及连接表中符合条件的记录的外连接。语法格式 SELECT 字段 FROM 表1 RIGHT [outer] JOIN 表2 ON 连接条件 WHERE 条件字段 FROM 表1,表2 WHERE 表1.条件表2.条件SELECT t.name AS 教师名 ,c. nameAS 所带班级 FROM teachers t LEFT JOIN classes c ON t.id c.teacher_id; SELECT t.name AS 教师名 ,c. nameAS 所带班级 FROM teachers t RIGHT JOIN classes c ON t.id c.teacher_id;连接类型对比连接类型说明关键字内连接只返回两表中匹配的行INNER JOIN 或 JOIN左连接返回左表所有行右表匹配的行LEFT JOIN右连接返回右表所有行左表匹配的行RIGHT JOIN全连接返回两表所有行(MySQL不支持)FULL JOIN5、子查询1. 基本子查询SELECT s.cls_id,s.name,s.age FROM students s INNER JOIN( SELECT cls_id,MAX(age) as max_age FROM students GROUP BY cls_id )m ON s.cls_id m.cls_id AND s.age m.max_age ORDER BY cls_id ASC;2.ANY/SOME子查询SELECT cls_id,name,height FROM students WHERE height ANY(SELECT height FROM students WHERE cls_id 2);3. ALL子查询SELECT cls_id,name,height FROM students WHERE height ALL(SELECT height FROM students WHERE cls_id 2);ps:今天只到这里了后续补充4. IN/NOT IN 子查询5. EXISTS/NOT EXISTS 子查询一般用于删除和创建的判断。综合练习一些小心得测试中犯的错1、先筛选再装饰即WHERE 要在ORDER BY之前ps.SELECT是最后执行的在SELECT命名的不能在其他地方使用但可以在最后使用HAVING实现类似的功能。2、CASE WHEN条件THEN输出值...ELSE (输出值) END AS 标签可做快速分组题目1、查询每个班级身高最高的学生信息要求显示班级名称、学生姓名、身高按班级名称排序SELECT c.name AS 班级名称 ,s.name AS 学生姓名,s.height AS 身高 FROM students s JOIN classes c ON c.id s.cls_id JOIN (SELECT cls_id,MAX(height) AS max_height FROM students GROUP BY cls_id) m ON m.cls_id s.cls_id WHERE s.height m.max_height AND m.cls_id s.cls_id ORDER BY c.name ;2、查询教师带班数量统计显示教师姓名、带班数量按带班数量降序排列SELECT t.name , COUNT(c.id) AS 带班数量 FROM teachers t JOIN classes c ON c.teacher_id t.id GROUP BY t.name ORDER BY COUNT(c.id) DESC;3、查询学生年龄分布情况按12岁为一个年龄段分组统计1-12 少年13-24 青少年25-36 青年37-48 中年49-60 中老年显示年龄段、学生人数、占总人数百分比这道题我遇到了问题我一直在想着怎么建立个子查询将组分开但是可以用case when age between and进行分组SELECT CASE WHEN age BETWEEN 1 AND 12 THEN 少年 WHEN age BETWEEN 13 AND 24 THEN 青少年 WHEN age BETWEEN 25 AND 36 THEN 青年 WHEN age BETWEEN 37 AND 48 THEN 中年 WHEN age BETWEEN 49 AND 60 THEN 中老年 ELSE 老年 END AS 年龄段, COUNT(*) AS 学生人数, COUNT(*) / SUM(COUNT(*)) OVER() *100 AS 占总人数百分比 FROM students GROUP BY CASE WHEN age BETWEEN 1 AND 12 THEN 少年 WHEN age BETWEEN 13 AND 24 THEN 青少年 WHEN age BETWEEN 25 AND 36 THEN 青年 WHEN age BETWEEN 37 AND 48 THEN 中年 WHEN age BETWEEN 49 AND 60 THEN 中老年 ELSE 老年 END;注OVER可用于解决嵌套聚合函数报错的问题如果顺着我之前的子表的思路可以做以下调整维度表设计age_groupsCREATE TABLE age_groups ( id INT PRIMARY KEY AUTO_INCREMENT, min_age INT NOT NULL COMMENT 年龄段下限, max_age INT NOT NULL COMMENT 年龄段上限, label VARCHAR(20) NOT NULL COMMENT 年龄段名称, sort_order INT NOT NULL DEFAULT 0 COMMENT 排序权重, UNIQUE KEY uk_age_range (min_age, max_age) ) COMMENT年龄段配置表;INSERT INTO age_groups (min_age, max_age, label, sort_order) VALUES (1, 12, 少年, 1), (13, 24, 青少年, 2), (25, 36, 青年, 3), (37, 48, 中年, 4), (49, 60, 中老年, 5);SELECT ag.label AS 年龄段, COUNT(s.id) AS 学生人数, ROUND( COUNT(s.id) * 100.0 / NULLIF((SELECT COUNT(*) FROM students WHERE age BETWEEN 1 AND 60), 0), 2 ) AS 占总人数百分比 FROM students s JOIN age_groups ag ON s.age BETWEEN ag.min_age AND ag.max_age WHERE s.age BETWEEN 1 AND 60 GROUP BY ag.label, ag.sort_order ORDER BY ag.sort_order;仅作思路。4、查询班级间的身高差异计算每个班级的最高、最低和平均身高计算全校平均身高显示班级身高与全校平均身高的差值SELECT cls_id,MAX(height) ,MIN(height),AVG(height),AVG(height) - (SELECT AVG(height) FROM students),(SELECT AVG(height) FROM students) FROM students GROUP BY cls_id;注有点燃尽了细节就不写了5、查询没有学生的班级及其班主任信息使用LEFT JOIN和IS NULL实现再使用NOT EXISTS实现一次比较两种方法的执行计划SELECT c.id AS 班级ID, c.name AS 班级名称, t.name AS 班主任姓名 FROM classes c LEFT JOIN teachers t ON c.teacher_id t.id LEFT JOIN students s ON s.cls_id c.id WHERE s.id IS NULL;SELECT c.id AS 班级ID, c.name AS 班级名称, t.name AS 班主任姓名 FROM classes c LEFT JOIN teachers t ON c.teacher_id t.id WHERE NOT EXISTS(SELECT 1 FROM students s WHERE s.cls_id c.id);查询就到这吧