Python学习日志16 - 数据库SQL查询

Python学习日志

RBHGO的主页欢迎关注

温馨提示:创作不易,如有转载,注明出处,感谢配合~

目录

文章目录

    • Python学习日志
      • 目录
      • Python学习日志16课 - 数据库SQL查询
        • DQL (数据查询语言)
          • 常用字符串函数
          • 常用数值函数
          • 常用时间日期函数
          • 常用流程函数
          • 其他常用函数
        • 正式开始
          • 建库建表一
          • 第一套:有关学习的SQL查询
          • 建库建表二
          • 第二套:有关工作的SQL查询
          • 建库建表三
          • 第三套:升级-订单SQL查询

Python学习日志16课 - 数据库SQL查询

SQL —> DQL —> select

这里只写了select,不代表只有select。在用SQL语句查询时,SQL语句它是多变的,同一条题目要求会有很多不同的写法,所有只有写的足够多,不管遇到什么样的查询,我们都能有方法写出来。本文以三个难度依次递增的查询题目主要分享MySQL但不仅限于MySQL的SQL查询

-- 1.查看SQL执行计划
-- 2.使用性能剖析系统
	-- explain select语句 ---> 得到搜索语句的性能
	-- type性能(坏->好)  ALL -> index -> range -> ref -> ref eg -> const/svstem

就像Python学习日志15中提到的,我们首先要在数据库中建立多表,且表与表之间要具有联系。所以现在我们就来在以shool这个数据库为例,建立多个表。

DQL (数据查询语言)
  1. MySQL 中支持多种类型的运算符,包括:算术运算符(+-*/%)、比较运算符(=<><=><<=>>=BETWEEN...AND...、INIS NULLIS NOT NULLLIKERLIKEREGEXP)、逻辑运算符(NOTANDORXOR)和位运算符(&|^~>><<),我们可以在 DQL 中使用这些运算符处理数据。

  2. 在查询数据时,可以在SELECT语句及其子句(如WHERE子句、ORDER BY子句、HAVING子句等)中使用函数,这些函数包括字符串函数、数值函数、时间日期函数、流程函数等。

    函数不会用没关系,上面那一篇分享中也提到过,通过+函数名(?function查看所有函数)可以得到函数的使用方法。

    这里以ROUND函数为例子我们在命令提示符(Workbench中不行)中mysql -u root -p进入MySQL(前提是您装了MySQL),? round,我们就会得到反馈大致如下:

    round() —> 四舍五入,可以设定位数

    • round(1.298,2) -> 1.30
    • round(1.298,0) -> 1
    • round(211.298,-2) -> 200

    温馨提示: SQL语句在不同数据库间相通,但会有些许不同,意思就是每一种数据库都会有自己的”方言“,我这里前提是MySQL。

常用字符串函数
函数 功能
CONCAT 将多个字符串连接成一个字符串
FORMAT 将数值格式化成字符串并指定保留几位小数
FROM_BASE64 / TO_BASE64 BASE64解码/编码
BIN / OCT / HEX 将数值转换成二进制/八进制/十六进制字符串
LOCATE 在字符串中查找一个子串的位置
LEFT / RIGHT 返回一个字符串左边/右边指定长度的字符
LENGTH / CHAR_LENGTH 返回字符串的长度以字节/字符为单位
LOWER / UPPER 返回字符串的小写/大写形式
LPAD / RPAD 如果字符串的长度不足,在字符串左边/右边填充指定的字符
LTRIM / RTRIM 去掉字符串前面/后面的空格
ORD / CHAR 返回字符对应的编码/返回编码对应的字符
STRCMP 比较字符串,返回-1、0、1分别表示小于、等于、大于
SUBSTRING 返回字符串指定范围的子串
常用数值函数
函数 功能
ABS 返回一个数的绝度值
CEILING / FLOOR 返回一个数上取整/下取整的结果
CONV 将一个数从一种进制转换成另一种进制
CRC32 计算循环冗余校验码
EXP / LOG / LOG2 / LOG10 计算指数/对数
POW 求幂
RAND 返回[0,1)范围的随机数
ROUND 返回一个数四舍五入后的结果
SQRT 返回一个数的平方根
TRUNCATE 截断一个数到指定的精度
SIN / COS / TAN / COT / ASIN / ACOS / ATAN 三角函数
SUM 返回条件下的数值的和
AVG 返回条件下的数值的平均数
MAX / MIN 最大值 / 最小值
常用时间日期函数
函数 功能
CURDATE / CURTIME / NOW 获取当前日期/时间/日期和时间
ADDDATE / SUBDATE 将两个日期表达式相加/相减并返回结果
DATE / TIME 从字符串中获取日期/时间
YEAR / MONTH / DAY 从日期中获取年/月/日
HOUR / MINUTE / SECOND 从时间中获取时/分/秒
DATEDIFF / TIMEDIFF 返回两个时间日期表达式相差多少天/小时
MAKEDATE / MAKETIME 制造一个日期/时间
常用流程函数
函数 功能
IF 根据条件是否成立返回不同的值
IFNULL 如果为NULL则返回指定的值否则就返回本身
NULLIF 两个表达式相等就返回NULL否则返回第一个表达式的值
其他常用函数
函数 功能
MD5 / SHA1 / SHA2 返回字符串对应的哈希摘要
CHARSET / COLLATION 返回字符集/校对规则
USER / CURRENT_USER 返回当前用户
DATABASE 返回当前数据库名
VERSION 返回当前数据库版本
FOUND_ROWS / ROW_COUNT 返回查询到的行数/受影响的行数
LAST_INSERT_ID 返回最后一个自增主键的值
UUID / UUID_SHORT 返回全局唯一标识符
正式开始

如果您看到这里并且对此感兴趣,那么请一条一条的和我写下来,我在题目上基本都有会提示,并且会 一 一 介绍碰到的知识。如果您能看懂每一条语句,并且您都可以独立写下来,那么您对SQL查询语句就已经基本掌握。后续如果能继续练习,那么基本上您以后遇到的SQL查询,都可以用以下的方法做出来。

建库建表一

第一个数据库是学校库,有学生表、老师表、课程表、学院表、选课记录表。表与表之间都存在着关系,分别是1对1、一对多和多对多,我们建表之间应该对他们的关系应该做到心里有数,不过增删改不是这篇分享的重点。

                    
                    -- 如果存在名为school的数据库就删除它
                    drop database if exists `school`;
                    
                    -- 创建名为school的数据库并设置默认的字符集和排序方式
                    create database `school` default character set utf8mb4;

                    -- 切换到school数据库上下文环境
                    use `school`;

                    -- 创建学院表
                    create table `tb_college`
                    (
                    `col_id` int unsigned auto_increment comment '编号',
                    `col_name` varchar(50) not null comment '名称',
                    `col_intro` varchar(500) default '' comment '介绍',
                    primary key (`col_id`)
                    ) engine=innodb auto_increment=1 comment '学院表';

                    -- 创建学生表
                    create table `tb_student`
                    (
                    `stu_id` int unsigned not null comment '学号',
                    `stu_name` varchar(20) not null comment '姓名',
                    `stu_sex` boolean default 1 not null comment '性别',
                    `stu_birth` date not null comment '出生日期',
                    `stu_addr` varchar(255) default '' comment '籍贯',
                    `col_id` int unsigned not null comment '所属学院',
                    primary key (`stu_id`),
                    constraint `fk_student_col_id` foreign key (`col_id`) references `tb_college` (`col_id`)
                    ) engine=innodb comment '学生表';

                    -- 创建教师表
                    create table `tb_teacher`
                    (
                    `tea_id` int unsigned not null comment '工号',
                    `tea_name` varchar(20) not null comment '姓名',
                    `tea_title` varchar(10) default '助教' comment '职称',
                    `col_id` int unsigned not null comment '所属学院',
                    primary key (`tea_id`),
                    constraint `fk_teacher_col_id` foreign key (`col_id`) references `tb_college` (`col_id`)
                    ) engine=innodb comment '老师表';

                    -- 创建课程表
                    create table `tb_course`
                    (
                    `cou_id` int unsigned not null comment '编号',
                    `cou_name` varchar(50) not null comment '名称',
                    `cou_credit` int not null comment '学分',
                    `tea_id` int unsigned not null comment '授课老师',
                    primary key (`cou_id`),
                    constraint `fk_course_tea_id` foreign key (`tea_id`) references `tb_teacher` (`tea_id`)
                    ) engine=innodb comment '课程表';

                    -- 创建选课记录表
                    create table `tb_record`
                    (
                    `rec_id` bigint unsigned auto_increment comment '选课记录号',
                    `stu_id` int unsigned not null comment '学号',
                    `cou_id` int unsigned not null comment '课程编号',
                    `sel_date` date not null comment '选课日期',
                    `score` decimal(4,1) comment '考试成绩',
                    primary key (`rec_id`),
                    constraint `fk_record_stu_id` foreign key (`stu_id`) references `tb_student` (`stu_id`),
                    constraint `fk_record_cou_id` foreign key (`cou_id`) references `tb_course` (`cou_id`),
                    constraint `uk_record_stu_cou` unique (`stu_id`, `cou_id`)
                    ) engine=innodb comment '选课记录表';

                    use school;

                    -- 插入学院数据
                    insert into `tb_college` 
                        (`col_name`, `col_intro`) 
                    values 
                        ('Python学院', 'Python 是由 Guido van Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。'),
                        ('Java学院', 'Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。Java 可运行于多个平台,如 Windows, Mac OS 及其他多种 UNIX 版本的系统。后来 Sun 公司被 Oracle (甲骨文)公司收购,Java 也随之成为 Oracle 公司的产品。Java 语言是简单的、Java 语言是面向对象的、Java语言是分布式的、Java 语言是健壮的、Java语言是安全的、Java 语言是体系结构中立的、Java 语言是可移植的、Java 语言是解释型的、Java 是高性能的、Java 语言是多线程的、Java 语言是动态的'),
                        ('HTML学院', 'HTML 指的是超文本标记语言: HyperText Markup Language,它不是一种编程语言,而是一种标记语言,标记语言是一套标记标签 (markup tag),HTML 使用标记标签来描述网页,HTML文档包含了HTML标签及文本内容,HTML文档也叫做 web 页面');

                    -- 插入学生数据
                    insert into `tb_student` 
                        (`stu_id`, `stu_name`, `stu_sex`, `stu_birth`, `stu_addr`, `col_id`) 
                    values
                        (1001, '留一手', 1, '1990-3-4', '湖南长沙

你可能感兴趣的:(数据库,Python学习日志,python,sql,数据库)