今天来学习一下MySQl的 临时表,变量,行转列,预处理的一些相关技术的使用!

先来简单了解一下MySQL数据库有意思的简介(来源于网络)

MySQL这个名字,起源不是很明确。一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上, 而且不管怎样,MySQL AB创始人之一的Monty Widenius的女儿也叫My。这两个到底是哪一个给出了MySQL这个名字至今依然是个迷,包括开发者在内也不知道。 MySQL的海豚标志的名字叫“sakila”,它是由MySQL AB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。 获胜的名字是由来自非洲斯威士兰的开源软件开发者Ambrose Twebaze提供。 根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。 MySQL,虽然功能未必很强大,但因为它的开源、广泛传播,导致很多人都了解到这个数据库。它的历史也富有传奇性。

言归正传:今天来学习使用MySQl的 临时表,变量,行转列,预处理的一些入门使用相关话题!

个人之前一直使用比较多的数据库就是Sqlserver,Sqlserver的强大,和存储过程的牛13的地方这里不多说了,
在在主流的关系型数据库中,Mysql,Sqlserver,Oracle等,作者都有使用,相比还是微软的Sqlserver是最人性化的,数据库自带的工具也是最好用的

什么,执行计划,作业任务,表分区,主从复制,读写分离,存储过程,自定义类型,表函数,标量函数等等,都是比较人性化的使用!新的公司使用的是Mysql关系型数据库,

curd其实大都数的sql语法类似Sqlserver,但是个人还是觉得MySQl比较弱,功能和使用体验上完全就不是一个等级的,这里没有其他的故意贬低MySQl的意思,也不展开讨论这个话题,

存在即有其中的道理,毕竟MySql也有自身的优点,例如:体积小巧,开源免费等!

1:临时表 使用案例
语法案例如下:
DROP TEMPORARY TABLE if EXISTS p_table; //如果存在就先删除
CREATE TEMPORARY TABLE p_table // 创建临时表根据下面的查询结果来处理
SELECT S.id,S.score
FROM studentscore S
WHERE S.id>1;
SELECT id, score FROM p_table;

今天来学习一下MySQl的 临时表,变量,行转列,预处理的一些相关技术的使用!

2:mysql语句自定义变量 使用案例

SET @id=1;// 带上自定义的变量,后面需要;分号结尾
DROP TEMPORARY TABLE if EXISTS p_table;
CREATE TEMPORARY TABLE p_table
SELECT S.id,S.score
FROM studentscore S
WHERE S.id>@id;
SELECT id, score FROM p_table;

今天来学习一下MySQl的 临时表,变量,行转列,预处理的一些相关技术的使用!

 3:mysql的行转列 使用案例

在Mysql中行转列通常有 case when,和 if(a='' b,c)再结合 max,sum,avg 这样的函数来处理
3.1:先创建表studentScore已经插入一些测试的数据
DROP TABLE IF EXISTS studentScore;

CREATE TABLE studentScore(
id INT(11) NOT NULL auto_increment,
userid VARCHAR(20) NOT NULL COMMENT '用户id',
subject VARCHAR(20) COMMENT '科目',
score DOUBLE COMMENT '成绩',
PRIMARY KEY(id)
)ENGINE = INNODB DEFAULT CHARSET = utf8;

INSERT INTO studentScore(userid,subject,score) VALUES ('111','语文',98);
INSERT INTO studentScore(userid,subject,score) VALUES ('111','数学',88);
INSERT INTO studentScore(userid,subject,score) VALUES ('111','英语',58);
INSERT INTO studentScore(userid,subject,score) VALUES ('222','语文',69);
INSERT INTO studentScore(userid,subject,score) VALUES ('222','数学',88);
INSERT INTO studentScore(userid,subject,score) VALUES ('222','英语',80);
INSERT INTO studentScore(userid,subject,score) VALUES ('333','语文',90);
INSERT INTO studentScore(userid,subject,score) VALUES ('333','数学',75);
INSERT INTO studentScore(userid,subject,score) VALUES ('333','英语',82);
INSERT INTO studentScore(userid,subject,score) VALUES ('333','政治',91);

SELECT* FROM studentScore;

今天来学习一下MySQl的 临时表,变量,行转列,预处理的一些相关技术的使用!

 3.1:行转列 使用案例,使用max,正常的情况下一个用户与一条数据,就可以使用sum(),max取其中最大的那条  

今天来学习一下MySQl的 临时表,变量,行转列,预处理的一些相关技术的使用!

 3.2:行转列 ,if() 使用案例

今天来学习一下MySQl的 临时表,变量,行转列,预处理的一些相关技术的使用!

  3.3:使用SUM(IF()) 生成列 + UNION 生成汇总行,并利用 IFNULL将汇总行标题显示为 Total

今天来学习一下MySQl的 临时表,变量,行转列,预处理的一些相关技术的使用!

 4:Mysql的预处理语句的使用案例:

-- mysql 预处理
PREPARE stms from 'select * from studentscore where id>? limit 10 ';

SET @isdel=2;

EXECUTE stms USING @isdel;

-- DEALLOCATE [drop] PREPARE stms

-- DEALLOCATE 删除 drop 释放 比较耗资源,使用完毕需要及时释放或删除
-- DROP prepare stms;
DEALLOCATE PREPARE stms;

今天来学习一下MySQl的 临时表,变量,行转列,预处理的一些相关技术的使用!

  5:最后,看到MySQl也可以有上面的这些功能,是不是一下子对MySQl产生了好感,

      原来MySQl也是如此可爱啊,嘻嘻!!!

 

上一篇:观察者模式


下一篇:ip表示方式以及通信判定