数据库 基础学习8— 横标与纵表转换

一、纵表转横表:

 1 create table  Student--学生表
 2 (
 3     Sno char(3) primary key not null,--学号(主键)
 4     Sname char(8) not null,--学生姓名
 5     Ssex char(2) not null,--学生性别
 6     Sbirthday datetime,--学生出生年月
 7     Class char(5)--学生所在班级
 8 )
 9 go
10 create table Teacher--教师表
11 (
12     Tno char(3) not null primary key,--教工编号(主码)
13     Tname    Char(4)    not null,--教工姓名
14     Tsex    Char(2)    not null,--教工性别
15     Tbirthday    datetime check(Tbirthday>‘1900-1-1‘),--教工出生年月
16     Prof    Char(6),--职称
17     Depart    Varchar(10)    not null--教工所在部门
18 )
19 go
20 create table Course--课程表
21 (
22     Cno char(5) primary key not null,--课程号(主键)
23     Cname varchar(10) not null,--课程名称
24     Tno char(3) not null references Teacher(Tno)--教工编号(外键)
25 )
26 go
27 create table Score--成绩表
28 (
29     primary key (Sno,Cno),
30     Sno char(3) not null references Student(Sno),--学号(外键)
31     Cno char(5) not null references Course(Cno),--课程号(外键)
32     Degree decimal(4,1)--成绩
33 )
34 insert into Student values(‘108‘,‘曾华‘,‘男‘,‘1977-09-01‘,‘95033‘)
35 insert into Student values(‘105‘,‘匡明‘,‘男‘,‘1975-10-02‘,‘95031‘)
36 insert into Student values(‘107‘,‘王丽‘,‘女‘,‘1976-01-23‘,‘95033‘)
37 insert into Student values(‘101‘,‘李军‘,‘男‘,‘1976-02-20‘,‘95033‘)
38 insert into Student values(‘109‘,‘王芳‘,‘女‘,‘1975-02-10‘,‘95031‘)
39 insert into Student values(‘103‘,‘陆君‘,‘男‘,‘1974-06-03‘,‘95031‘)
40
41 update Student set Class=‘95031‘ where Sno=‘103‘
42 update Student set Class=‘95033‘ where Sno=‘108‘
43 update Student set Class=‘95031‘ where Sno=‘109‘
44 update Student set Class=‘95031‘ where Sno=‘105‘
45
46
47 select *from Student
48
49 insert into Teacher values(‘804‘,    ‘李诚‘,    ‘男‘,    ‘1958-12-02‘,    ‘副教授‘,    ‘计算机系‘)
50 insert into Teacher values(‘856‘,    ‘张旭‘,    ‘男‘,    ‘1969-03-12‘,    ‘讲师‘,    ‘电子工程系‘)
51 insert into Teacher values(‘825‘,    ‘王萍‘,    ‘女‘,    ‘1972-05-05‘,    ‘助教‘,    ‘计算机系‘)
52 insert into Teacher values(‘831‘,    ‘刘冰‘,    ‘女‘,    ‘1977-08-14‘,    ‘助教‘,    ‘电子工程系‘)
53
54 select *from  Teacher
55
56 insert into Course values(‘3-105‘,‘计算机导论‘,‘825‘)
57 insert into Course values(‘3-245‘,‘操作系统‘,‘804‘)
58 insert into Course values(‘6-166‘,‘数字电路‘,‘856‘)
59 insert into Course values(‘9-888‘,‘高等数学‘,‘831‘)
60
61 select *from Course
62
63 insert into Score values(‘103‘,    ‘3-245‘,    86)
64 insert into Score values(‘105‘,    ‘3-245‘,    75)
65 insert into Score values(‘109‘,    ‘3-245‘,    68)
66 insert into Score values(‘103‘,    ‘3-105‘,    92)
67 insert into Score values(‘105‘,    ‘3-105‘,    88)
68 insert into Score values(‘109‘,    ‘3-105‘,    76)
69 insert into Score values(‘101‘,    ‘3-105‘,    64)
70 insert into Score values(‘107‘,    ‘3-105‘,    91)
71 insert into Score values(‘108‘,    ‘3-105‘,    78)
72 insert into Score values(‘101‘,    ‘6-166‘,    85)
73 insert into Score values(‘107‘,    ‘6-166‘,    79)
74 insert into Score values(‘108‘,    ‘6-166‘,    81)
75
76 insert into Score values(‘103‘,    ‘6-166‘,    81)
77 insert into Score values(‘105‘,    ‘6-166‘,    81)
78 insert into Score values(‘109‘,    ‘6-166‘,    81)
79
80 delete from Score where Sno=109 and cno=‘6-166‘
81
82
83 select  COUNT(*) from Score
84
85 select *from Score
86 update Score set degree=‘64‘ where Sno=101 and cno=‘3-105‘
87 update Score set degree=‘85‘ where Sno=101 and cno=‘6-166‘
88 delete from Score where Sno=107 and cno=‘6-166‘

select * from Score

纵表结构

sno    cno   degree

101  3-105   64.0
101  6-166   85.0
103  3-105   92.0
103  3-245   86.0
105  3-105   88.0
105  3-245   75.0
107  3-105   91.0
107  6-166   79.0
108  3-105   78.0
108  6-166   81.0
109  3-105   76.0
109  3-245   68.0

转换为 横表

方法

select sno 学号 ,

sum(case cno when ‘3-105‘  then degree else 0 end) as 计算机导论,

sum(case cno when ‘6-166‘  then degree else 0 end) as 数字电路,

sum(case cno when ‘3-245‘  then degree else 0 end) as 操作系统

from score group by sno

横表结构

学号    计算机导论  数字电路  操作系统

101       64.0         85.0       0.0
103       92.0         0.0         86.0
105       88.0         0.0         75.0
107       91.0         79.0       0.0
108       78.0         81.0       0.0
109       76.0         0.0         68.0

横表转纵表 方法

SELECT sno,‘3-105‘ AS cno,计算机导论 AS degree FROM Score UNION ALL
SELECT sno,‘6-166‘ AS cno,数字电路   AS degree FROM Score UNION ALL
SELECT sno,‘3-245‘ AS cno,操作系统   AS degree FROM Score
ORDER BY Sno,Cno DESC;

时间: 2024-08-25 17:13:10

数据库 基础学习8— 横标与纵表转换的相关文章

MYSQL数据库基础学习笔记

一.mysql的安装与初始化: 安装mysql命令: yum install -y mysql-server mysql mysql-devel 初始化: service mysqld start   //第一次启动mysqld服务会自动初始化: 创建用户并初始化密码: mysqladmin -u root passwd '密码' 登陆mysql: mysql -u root -p 退出mysql: quit.exit 设置mysqld服务自启动: chkconfig mysqld on mys

Mysql 数据库基础 学习笔记

数据库基础 数据库是存储数据的仓库,实现数据共享,减少数据冗余,采用特定的数据类型,具有较高的数据独立性,具有数据控制功能. 表 ,是一个二维数组,用来存储数据和操作数据的逻辑结构. 数据类型,整数数据类型,浮点数数据类型,精确小数类型,二进制数据类型,日期/时间数据类型,字符串数据类型. 主键 用于唯一标示表中的每条记录.可以定义一列或多了主键.主键不能相同. 数据库技术构成   硬件,软件共同构成 数据库系统,数据库,数据库管理系统(DBMS),数据库应用程序. SQL 语言  结构化查询语

数据库基础学习

在Java的数据库学习中,我们主要学习的是MYSQL数据库,这是一个中型的数据库. 要使用数据库就必须先建立库,然后使用mysql语句对数据库中的数据进行操作,接下来我便来简单的说说mysql的一些常用的语句:我们主要使用DML语句对数据库中的表中数据进行增.删.改操作,而使用DQL语句对数据库中的表的数据进行查询操作. 要对数据库中的表进行操作那就首先要创建一个表,使用create table +表名 :  语句来创建表,而删除表则用drop table +表名:  来删除表.添加新列使用al

数据库基础学习4--表格的 增 删 改 查(简单查询与高级查询)

一.增 C:create 增加,创建,向数据库里面添加数据. insert into Fruit values('K009','苹果',3.0,'高青',90,'') insert into Fruit(Ids,Name,Price,Source,Numbers) values('K010','苹果',3.0,'高青',90) 二.改 U:update修改,从数据库表里面修改数据. update Fruit set Source='烟台' where Ids='K001' 三.删 D:delet

数据库 基础学习— 数据库语句操作、数据类型、约束分类

一.数据库的创建 1.创建数据库 create database MyDBon primary( Name=MyDB, FileName="D:\MyDB.MDF"), --创建主数据文件叫MyDB,放在D盘中.( Name=MyDB1, FileName="E:\MyDB1.NDF"), --创建次数据文件叫MyDB1,放在E盘中.log on( Name="MyDB_Log", FileName="E:\MyDB.Log"

数据库 基础篇4(mysql语法---表)

5 表管理 选择数据库   5.1 查看所有表 mysql> show tables; +-----------------+ | Tables_in_day15 | +-----------------+ | student         | +-----------------+ 1 row in set (0.00 sec)   5.2 创建表 mysql> create table student( -> sid int, -> sname varchar(20), -&

HTML&CSS基础学习笔记1.26-input重置表单

重置表单 <input>的[type]属性值为"button"的时候表示一个普通的按钮,相当于一个<button>标签. <input>的[type]属性值为"reset"时,表示表单重置,它在页面的表现形式也是个按钮,但点击他的时候会让表单重置到页面刚加载时的状态. 看一段代码吧: <!DOCTYPE html> <html lang="en"> <head> <me

数据库基础学习之-初识MySql

MYSql最大的好处就是提供丰富的接口,创建了各种语言使用的API. ODBC: 开放数据库互连(Open Database Connectivity,ODBC)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口).这些API利用SQL来完成其大部分任务.ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC.开放数据库互

Oracle 数据库基础学习 (三)

Oracle 四个表的 emp dept  salgrade  bunus 的结构,记住有利于后期SQL语句的学习 雇员表(emp) No. 字段 类型 描述 1 empno NUMBER(4) 表示雇员编号,是唯一的 2 ENAME VARCHAR2(10) 表示雇员姓名 3 JOB VARCHAR2(9) 表示工作职位 4 MGR NUMBER(4) 表示雇员的领导编号 5 HIREDATE DATA 表示雇佣的时间 6 SAL NUMBER(7,2) 表示雇员的薪金 7 COMM NUMB