努力努力努力的第十四天(2024.7.31)

news2024/12/26 11:50:45

昨天日期写错了写成2020.7.30,应该是2024.7.31(手滑了哈哈哈)

1.行列转换

效果演示:

这是未经行列转换操作的t_score表:

这是经过行列转换后的t_score表:

第一步:确定初步的做法

使用分组查询(group by)能够将单个学生的成绩依次查询出来,再加上三列查询(分别定义成'语文' '数学' '英语' )

SELECT name,1 as '语文',2 as '数学',3 '英语' from t_score GROUP BY name

 第二步:对语数英三列中填入数据

case...when...then...

使用这种方式能特别查询出语文成绩(其他成绩格为空)、数学、英语。

SELECT *,case subject when '语文' then fraction else 0
end,  
case subject when '数学' then fraction else 0
end, 
case subject when '英语' then fraction else 0
end  
FROM t_score

 第三步:利用聚合函数(求和 / 取平均值)得到最终的形式

将第二步查询到的数据通过聚合函数进行单列求和,再放到第一步中写的1、2、3位置中

SELECT name,
sum(CASE subject 
when '语文' then fraction
else 0
end) as '语文',
sum(CASE subject 
when '数学' then fraction
else 0
end) as '数学',
sum(CASE subject 
when '英语' then fraction
else 0
end) as '英语' 
from t_score GROUP BY name 

2.if函数

if函数,本质是三元表达式 

SELECT name,avg(if(subject='语文',fraction,null))as '语文' ,
avg(if(subject='数学',fraction,null)) as '数学',
avg(if(subject='英语',fraction,null)) as '英语'
FROM t_score GROUP BY name

3.MySQL中的数据类型 

常用的数据类型:整数型,浮点型,字符串,日期型

1.整数型

tinyint(1)    smallint(2)    mediumint(3)    int(4)    bigint(8)

括号内是指的需要的字节数

2.浮点型

double(总长度,小数位数)   float(总长度,小数位数)  decimal(总长度,小数位数) 

3.字符串

字符串类型有   char        varchar         text

1.char

char(最大长度是255)

2.varchar

varchar能够存储的字节数是65535
--    1.结构问题,varchar类型的第一个字节不存储数据
--    2.varchar前两个字节要存储数据长度
--    3.所以有效位数剩下65532,编码格式决定能够存储多少个字符
--    4.行中列的总字节长度不能超过65535

3.char 和 varcahr 的区别:

--  1.char是定长的  varchar是变长的 
--  char(20) 存了abc 占20个字符位,varchar(20) 存abc 占3个字符位
--  2.char的性能更优异  varchar要先经过计算,所以性能稍差
--  3.身份证号  学号  手机号  订单号    用char 
--    介绍信息  店名  姓名  地址            用varchar

4.text 

text负责记录长文本,不需要记录长度

4.日期型

date  年月日

time  时分秒

datetime  年月日时分秒

4.视图  view

视图是已经编译好的sql语句,可以理解为:

在查询中编写的SQL语句后,执行查询查出的表的格式

1.创建视图:

视图中是没有数据的,即这些数据都是sql语句执行完查询,显现在视图上的。

视图中不存储数据,数据还是存储在表当中

CREATE VIEW v_student_score AS 
select a.sname,c.cname,b.score FROM student as a 
left join sc as b on a.sid=b.sid
left join course as c on b.cid=c.cid

2.查询视图: 

 

5.触发器   trigger

触发器   trigger

相当于一个事件,一旦表中发生了指定的事件,该触发器就会自动运行
触发器只能对三种操作起作用:增 删 改
触发器的触发时机:before  after

1.创建触发器:

create trigger tgg_i_a_student after insert 
on student for each row BEGIN 
 update log set val=(SELECT count(*) from student) where `key`='studentcount';
END;

每当向student表中插入一条数据,都会在log表中添加一条 val 数据,这里用聚合函数count来记录了student表中数据的个数

(注意:log表中只有两列,第一列是key数据类型是varchar(20),第二列是val数据类型是varchar(20),key用来限定where查询的数据,val是要记录的值)

2.实例:

create trigger tgg_u_b_student before update 
on student for each row BEGIN
 -- old.列名  原来数据
 -- new.列名  新的数据
 update log set val=concat(concat('{',old.sid,',',old.sname,'}'),'->',
concat('{',new.sid,',',new.sname,'}'))	where `key`='lastupdate';
END ;

 每当更改student表中的数据时,都会记录更改前的值和更改后的值,利用concat函数拼接字符串,最后输出出来

3.删除触发器 

drop trigger tgg_u_b_student

4.注意:尽量不要使用触发器!!!

尽量不要用触发器,会影响正常的业务逻辑

6.函数

1.自定义函数

先将一个常数设定为true

set global log_bin_trust_function_creators=TRUE;

自定义一个函数,用来判断成绩score是否及格 

create function method(score int) returns varchar(20)
BEGIN
-- 判断score的数值 60分以上及格  否则不及格
 -- 定义一个局部变量来记录返回结果
 declare result varchar(20) ;
 IF score>=60 then 
  -- 对变量赋值  有两种语法
	set result='及格';
 ELSE
  set result='不及格';
 END IF;
 return result;
END ;

select method(80);
-- 函数返回80是及格的

将自定义的函数用于实际查询:

 2.数字函数

向下取整floor

select floor(12.99)

3.字符串函数

字符长度、字节长度  char_length()    length()

select CHAR_LENGTH('你好'),LENGTH('你好')
--         字符数           字节数

对字符串从左(右)进行截取     left('字符串',截取长度)    right('字符串',截取长度)

select left('12345678',3),right('12345678',4)

拼接字符串    concat( , , )

SELECT concat(left('13366668888',3),'****',RIGHT('13366668888',4))

替换字符串元素   replace('字符串','字符串中要替换的元素','要替换成什么')

SELECT REPLACE('12341234','1','a')

 截取字符串    substr('字符串' from 从第几项 for 截取长度)

-- 截取字符串,从第2项开始,共截取3个字符
select SUBSTR('abcdefg' from 2 for 3)
SELECT SUBSTR('abcdefg' FROM 2)

4.日期函数  

SELECT now(),SYSDATE()
SELECT DATE_FORMAT(NOW(),'%Y')
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H-%i-%s')

7.存储过程     procedure

loop循环,需要使用leave跳出

create procedure pro_insert_student_log(in num int)
BEGIN
 -- 循环语句 loop死循环 使用leave跳出
 declare i int default 0;
 declare stuname varchar(20);
 declare randomS int;
 aa: LOOP
 -- 获取学生的名字  生成随机的成绩 
 SELECT sname into stuname from student limit i,1;
 set randomS=FLOOR(RAND()*100);
 -- 插入log表
 INSERT INTO log value(stuname,randomS);
  set i=i+1;
 if i>=num then 
		LEAVE aa; 
 END IF; 
END LOOP aa;
END

调用存储过程:

-- 调用存储过程
call pro_insert_student_log(8)

8.三范式

三范式非常重要!!!!!

1.每一列的数据是不可分割的(不可以再分割)
2.每一列的数据完全依赖主键(不可以部分依赖)
3.不可以传递依赖

9.事务 

事务:一组不可分割的数据库操作,要么全执行,要么全不执行

BEGIN;
delete from student;
select*from student;
ROLLBACK;

在begin(开始)和rollback(回滚)之间是事务的内容(如查询表、删除表)

10.ACID四大特性:

1.原子性:事务内的操作是一个整体,要么执行成功,要么执行失败

2.一致性:事务执行前后,数据库状态保持一致

3.隔离性:多个事务并发时,事务之间不能互相影响

4.持久性:事务一旦执行成功,数据库会保证事务处理一定会持久化到数据库中

11.JDBC 

JDBC链接数据库

先将jar文件放到IDEA的文件夹下(新建一个就可以),将文件add to library

然后新创建一个类,写如下代码:

public class JDBC {
    public static void main(String[] args) {
        //JDBC链接数据库的六个步骤
        String url="jdbc:mysql://localhost:3306/easydata";
        String username="root";
        String password="123456";
        String driverClassName="com.mysql.cj.jdbc.Driver";
        //1.加载驱动
        try {
            Class.forName(driverClassName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        Connection con = null;
        Statement sta=null;
        try{
            //2.创建链接
            con= DriverManager.getConnection(url,username,password);
            //3.获取执行对象
            sta=con.createStatement();
            //4.执行SQL语句  (写、读)
            int rowCount=sta.executeUpdate("delete from student where sid=15");
            //5.处理结果集
            if(rowCount>0) {
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
            }
        }catch(SQLException e){
            e.printStackTrace();
        }finally {
            //6.关闭链接
            if(sta!=null) {
                try {
                    sta.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(con!=null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

于数据库连接共有6步操作;

1.加载驱动

2.创建连接

3.获取执行对象

4.执行SQL语句

5.处理结果集

6.关闭连接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1965235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20240731在WIN10下数框框的方法【CPU】

20240731在WIN10下数框框的方法【CPU】 2024/7/31 20:14 百度:WINDOWs 10 多核CPU 数框框 win10怎么数框框 1、首先打开win10系统,进入任务管理器。 2、其次点击CPU使用率窗口,鼠标悬停在右边的窗口按右键。 3、最后将图形更改为:…

【计算机网络】http协议的原理与应用,https是如何保证安全传输的

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

优化|高性能模块预测控制求解器

本文介绍的是另外一种针对模块控制MPC问题的一种高效求解方法。High-Performance Small-Scale Solvers for Linear Model Predictive Control,Gianluca Frison, Hans Henrik Brandenborg Srensen, Bernd Dammann, John Bagterp Jrgensen [1]。本文讲了HPIPM的前身&a…

Phalco安装过程以及踩的一些坑(mac环境)

一 背景 公司用Phalcon框架好长时间了,中途发现了一些Phalcon使用的上的问题,于是想在本地搭建一套Phalcon的环境,方便排查问题使用。 二 Mac系统下的安装 看了很多说法,最终发现还是官网给力,安装Phalcon使用下列命令即可(前提条件是PHP已安装好,工具pecl也安装好了):…

2024-07-31 Android studio gradle、sdk、ndk 等路径记录

一、gradle的下载路径:C:\Users\user\.gradle\wrapper\dists 二、NDK下载路径C:\Users\user\AppData\Local\Android\Sdk\ndk 三、SDK下载路径:C:\Users\user\AppData\Local\Android\Sdk\platforms

数据结构的基本概念与算法

数据结构的基本概念与算法 什么是数据? 数据是信息的载体,是描述客观事物属性的数、字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合;总结来说 -> 数据就是计算机程序加工的原料; 数据元素、数据项&#xf…

Python+Vue3+onlyoffice开发私有化文档管理系统实战笔记 20240731

之前进度 表字段设计如下: const columns [{title: 名称,key: name,dataIndex: name,},{title: 类型,key: category,dataIndex: category,},{title: 作者,key: author,dataIndex: author,},{title: 路径,key: path,dataIndex: path,},{title: 最近访问时间,key: l…

【Spark计算引擎----上篇:(全网最详细)带你从零基础通往精通之路】

前言: 💞💞大家好,我是书生♡,本阶段和大家一起分享和探索大数据技术–spark计算引擎,本篇文章主要讲述了:spark的概念,spark的起源,Spark的计算框架,Spark组…

Python爬虫入门03:用Urllib假装我们是浏览器

文章目录 引言Urllib库简介Request模块详解Error模块与异常处理Parse模块与URL解析Robotparser模块 模拟浏览器请求使用Request方法添加请求头信息代码示例1. 设置请求URL和请求头2. 定义请求参数并转换为适当的格式3. 使用Request方法封装请求4. 发送请求并获取响应 常用使用方…

项目实战_表白墙(升级版)

你能学到什么 表白墙(升级版)Mybatis的一些简单应用 正文 前⾯的案例中, 我们写了表⽩墙, 但是⼀旦服务器重启, 数据就会丢失. 要想数据不丢失, 需要把数据存储在数据库中,接下来咱们借助MyBatis来实现数据库的操作。 数据准备 如果我们…

Linux-用户和用户组管理

用户管理 创建 useradd USERNAME(名字) [rootlocalhost ~]# useradd bao 创建指令 怎么判断创建成功与否(是否报错) 观察是否报错可行但用变量的方式判断会更加直观 [rootlocalhost ~]# echo $? 变量 什么是变量&…

Vant2框架tab切换list不加载问题(切换后onload不继续触发)

遇到的问题: van-list 加载,页面上有个切换的 van-tab,实现切换不同的类型,加载不同的list的功能。 Vant2 的 List 列表 就有个 bug,当切换 tab 的时候,它的 onload 没有自动触发。 然而在当前标签页&#…

AMD第二季度财报:数据中心产品销售激增,接近总收入一半

#### 财报亮点 7月30日,AMD公布了截至6月29日的第二季度财务业绩,利润超过了华尔街的预期。根据TechNews的报道,最值得注意的是,AMD现在近一半的销售额来自于数据中心产品,而非传统的PC芯片、游戏主机或是工业与汽车嵌…

IDEA打开项目显示在顶端

问题 IDEA打开项目显示在顶端,更改到左侧 解决方案 删除项目中.idea文件,重新打开

【pikachu靶场】跨站脚本攻击详细教程Cross-Site Scripting(xss)

文章目录 XSS(跨站脚本)概述 1.反射型xss(get) 2.反射型xss(post) 3.存储型XSS 4.DOM型xss 5.DOM型XSS-X 6.xss之盲打 7.xss之过滤 8.xss之htmlspecialchars 9.xss之href输出 10.xss之js输出 XSS…

并发编程相关面试题-Synchronized

重量级锁实现的原理 1、synchronized是JVM内置锁,基于Monitor机制实现,依赖底层操作系统的互斥锁Mutex(互斥量),它是一个重量级锁、 2、synchronized同步方法是通过方法中的access_flags中设置ACC_SYNCHRONIZED标志来…

换根dp学习总结3

我也不想搞这么多,但是这东西真的太难了,因为我还是个蒟蒻。算了蒟蒻继续写这次的总结了 寻找全图最远路径问题——Computer ——题目来源于hdu2196 题意:题目就是说会输入多组数据,每组数据给你一个n,表示结点的总数…

怎么评价程序员40岁了竟然还在撸代码?

怎么评价外卖员40岁了竟然还在送外卖? 怎么评价滴滴司机40岁了竟然还在跑滴滴? 怎么评价老师40岁了竟然还在教书?难道程序员的本职工作不是敲代码吗?无论你是管理层还是螺丝钉,工业环境下怎么可能一行代码都不敲呢&…

RocketMQ Dashboard安装

RocketMQ Dashboard 是一个基于 Web 的管理工具,用于监控和管理 RocketMQ 集群。它提供了一个用户友好的界面,使管理员能够轻松地查看和操作 RocketMQ 系统中的各种组件和状态。 主要功能包括: 集群管理: 监控和管理 NameServer 和 Broker …

web框架:django基础(二)

文章目录 django基础(二)1.回顾2.今日概要3.路由系统3.1 传统的路由3.2 正则表达式路由3.3 路由分发小结 3.4 name3.5 namespaceapp_namenamespace的多层嵌套 3.4 最后的 / 如何解决?3.5 当前匹配对象小结 4.视图4.1 文件or文件夹4.2 相对和绝…