原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11782549.html

MySQL--数据表操作:

  会用到的查询操作.

1. Limit的用法:

查询从下标5开始往后的10条数据(下标默认为0开始)
SELECT
*
FROM
stu_user
LIMIT 5,
10; 查询从下标5开始往后的所有数据(下标默认为0开始)
SELECT
*
FROM
stu_user
LIMIT 5,- 1; 查询前5条数据
SELECT
*
FROM
stu_user
LIMIT 5;

2. 行转列和列转行

  a) 列转行

创建-->学生-科目分数表
(这种建表方式需要提前把所有的科目列都设计好,如果往后需要添加科目的话需要改动表结构)
CREATE TABLE stu_score (
stu_id INT NOT NULL,
sname VARCHAR ( 20 ) NOT NULL,
chscore CHAR ( 3 ) DEFAULT '0',
mathscore CHAR ( 3 ) DEFAULT '0',
enscore CHAR ( 3 ) DEFAULT '0'
); 表结构
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| stu_id | int(11) | NO | | NULL | |
| sname | varchar(20) | NO | | NULL | |
| chscore | char(3) | YES | | 0 | |
| mathscore | char(3) | YES | | 0 | |
| enscore | char(3) | YES | | 0 | |
+-----------+-------------+------+-----+---------+-------+ 插入数据
INSERT INTO stu_score
VALUES
( 1, '张三', '77', '88', '66' );
INSERT INTO stu_score
VALUES
( 2, '李四', '23', '45', '13' );
INSERT INTO stu_score
VALUES
( 3, '王五', '94', '63', '45' ); 数据列表
+----+--------+---------+-----------+---------+
| id | sname | chscore | mathscore | enscore |
+----+--------+---------+-----------+---------+
| 1 | 张三 | 77 | 88 | 66 |
| 2 | 李四 | 23 | 45 | 13 |
| 3 | 王五 | 94 | 63 | 45 |
+----+--------+---------+-----------+---------+ 列转行(科目分数列转换为固定的科目值行数据和分数汇总列)
本质就是用UNION合并分批查询的数据,
有多少科目列需要转则分批多少次查询
SELECT
stu_id,
sname,
'语文' AS course,
chscore AS score
FROM
stu_score UNION
SELECT
stu_id,
sname,
'数学' AS course,
mathscore AS score
FROM
stu_score UNION
SELECT
stu_id,
sname,
'英语' AS course,
enscore AS score
FROM
stu_score
ORDER BY
stu_id; 列转行后的数据
+--------+--------+--------+-------+
| stu_id | sname | course | score |
+--------+--------+--------+-------+
| 1 | 张三 | 语文 | 77 |
| 1 | 张三 | 数学 | 88 |
| 1 | 张三 | 英语 | 66 |
| 2 | 李四 | 语文 | 23 |
| 2 | 李四 | 数学 | 45 |
| 2 | 李四 | 英语 | 13 |
| 3 | 王五 | 英语 | 45 |
| 3 | 王五 | 语文 | 94 |
| 3 | 王五 | 数学 | 63 |
+--------+--------+--------+-------+

  b) 行转列

创建一个--学生分数科目表
CREATE TABLE stu_score_pro (
stu_id INT NOT NULL,
sname VARCHAR ( 20 ) NOT NULL,
course VARCHAR ( 20 ) NOT NULL,
score CHAR ( 3 ) NOT NULL
); 表结构
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| stu_id | int(11) | YES | | NULL | |
| sname | varchar(20) | NO | | NULL | |
| course | varchar(20) | NO | | NULL | |
| score | char(3) | NO | | NULL | |
+--------+-------------+------+-----+---------+-------+ 插入数据
INSERT INTO stu_score_pro
VALUES
( 1, '张三', '语文', '77' );
INSERT INTO stu_score_pro
VALUES
( 1, '张三', '数学', '88' );
INSERT INTO stu_score_pro
VALUES
( 1, '张三', '英语', '66' );
INSERT INTO stu_score_pro
VALUES
( 2, '李四', '语文', '23' );
INSERT INTO stu_score_pro
VALUES
( 2, '李四', '数学', '45' );
INSERT INTO stu_score_pro
VALUES
( 2, '李四', '英语', '13' );
INSERT INTO stu_score_pro
VALUES
( 3, '王五', '语文', '94' );
INSERT INTO stu_score_pro
VALUES
( 3, '王五', '数学', '63' );
INSERT INTO stu_score_pro
VALUES
( 3, '王五', '英语', '45' ); 数据列表
+--------+--------+--------+-------+
| stu_id | sname | course | score |
+--------+--------+--------+-------+
| 1 | 张三 | 语文 | 77 |
| 1 | 张三 | 数学 | 88 |
| 1 | 张三 | 英语 | 66 |
| 2 | 李四 | 语文 | 23 |
| 2 | 李四 | 数学 | 45 |
| 2 | 李四 | 英语 | 13 |
| 3 | 王五 | 语文 | 94 |
| 3 | 王五 | 数学 | 63 |
| 3 | 王五 | 英语 | 45 |
+--------+--------+--------+-------+ 行转列(正常的行数据根据列中有相同的值转成对应的列)
SELECT
stu_id,
sname,
max( CASE WHEN course = '语文' THEN score END ) AS 语文,
max( CASE WHEN course = '数学' THEN score END ) AS 数学,
max( CASE WHEN course = '英语' THEN score END ) AS 英语
FROM
stu_score_pro
GROUP BY
stu_id,
sname; 行转列后的数据
+--------+--------+--------+--------+--------+
| stu_id | sname | 语文 | 数学 | 英语 |
+--------+--------+--------+--------+--------+
| 1 | 张三 | 77 | 88 | 66 |
| 2 | 李四 | 23 | 45 | 13 |
| 3 | 王五 | 94 | 63 | 45 |
+--------+--------+--------+--------+--------+

MySQL--数据表操作--行转列和列转行的更多相关文章

  1. MySQL 数据表操作

    MySQL 数据表操作 创建MySQL数据表需要以下信息: -表名: -表字段名: -定义每个表字段: 一.创建数据表 1)mysql> create  table  table_name (c ...

  2. mysql 数据表操作 目录

    mysql 数据表操作 存储引擎介绍 mysql 使用存储引擎 mysql 数据表的增删改查 mysql 数据类型 mysql 约束条件

  3. mysql数据表操作&库操作

    首先登陆mysql:mysql -uroot -proot -P3306 -h127.0.0.1 查看所有的库:show databases; 进入一个库:use database; 显示所在的库:s ...

  4. mysql 数据表操作 存储引擎介绍

    一 什么是存储引擎? 存储引擎就是表的类型. mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制 ...

  5. MYSQL数据表操作语句

    1.查看某数据库中的表 SHOW [FULL] TABLES [FROM db_name] [LIKE 'pattern'] SHOW TABLES列举了给定数据库中的非TEMPORARY表.也可以使 ...

  6. MySQL数据表操作

    创建数据表 打开数据库 USE 数据库名称 mysql> USE D1; Database changed 使用 USE D1:表示打开数据库D1,我们可以通过SELECT DATABASE() ...

  7. 03、MySQL—数据表操作

    1.创建数据表 基本语法:create table 表名(字段名 字段类型 [字段属性], 字段名 字段类型 [字段属性],…) [表选项] 范例:创建数据表 以上错误说明:表必须放到对应的数据库下: ...

  8. MySQL数据表操作(DDL)

    一.创建数据表 语法:create table 表名称(字段 字段类型 [字段属性],字段 字段类型 [字段属性],...) [表选项]; 表选项:数据表的属性,一般包括engine.charset. ...

  9. 设置mysql数据表列自动递增以及数据行插入操作

    创建mysql数据表,设置id列递增.主键create table running_log ( id int primary key auto_increment, routename varchar ...

  10. Mysql之数据表操作

    数据表操作: 查看当前数据库中所有的表: show tables; 查看当前使用数据库: select database(); 使用数据表: use 表名; 创建数据表: create table 数 ...

随机推荐

  1. springboot单元测试为什么排除junit-vintage-engine

    https://blog.csdn.net/Ber_Bai/article/details/117001443 如果不排除,就需要使用@RunWith注解? 25-springboot整合单元测试指定 ...

  2. python appium使用uiselector定位时,提示 Could not parse UiSelector argument: 'XXX' is not a string

    运行自动化代码,appium返回Could not parse UiSelector argument: 'XXX' is not a string,其中的xxx就是定位的元素 解决方案:外侧用 '' ...

  3. 关闭SpringBoot logo图标

    public static void main(String[] args) {// SpringApplication.run(LicenseApp.class, args); //关闭Spring ...

  4. [ bootstrap ] 实现卡片里面包含图片、内容、操作按钮,形成左中右的布局

    描述: 如图 实现: <div class="card border-0 mb-3 mt-3"> <!-- 列表头部 --> <div class=& ...

  5. 使用Crossplane构建专属PaaS体验:Kubernetes,OAM和CoreWorkflows

    关键点:•许多组织的目标是构建自己的云平台,这些平台通常由内部部署架构和云供应商共建完成.•虽然Kubernetes没有提供开箱即用的完整PaaS平台式服务,但其具备完整的API,清晰的技术抽取和易理 ...

  6. 【PTA】6-2 读文章(*) (31 分)

    请编写函数,从文件中读出文章,将其输出到屏幕上. 函数原型 void ReadArticle(FILE *f); 说明:参数 f 为文件指针.函数读出 f 所指示文件中的文章,将其输出到屏幕上. 裁判 ...

  7. “伏魔”赏金 | WebShell检测之「模拟污点引擎」首次公测,邀你来战!

    安全是一个动态的过程,攻防对抗如同在赛博世界里降妖伏魔,其要义是:取彼之长,补己之短.--伏魔引擎的诞生 伏魔引擎挑战赛 注册时间: 2022.01.10 00:00:00 - 2022.01.24 ...

  8. 开源数据可视化BI工具SuperSet(使用)

    上一篇介绍了Linux 下如何安装SuperSet ,本篇简单介绍一下如何使用 1.输入安装时设置的用户名密码登录控制台  2.控制界面如下  3.第一步添加数据源(已安装好的mysql) 点击 da ...

  9. 《剑指offer》面试题40. 最小的k个数

    问题描述 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:arr = [3,2,1], k ...

  10. FHQtreap(我有个绝妙的理解方法,但课的时间不够[doge])

    FHQtreap板子(P1486 [NOI2004] 郁闷的出纳员) 会了FHQ,treap什么的就忘了吧...... #include<bits/stdc++.h> using name ...