U283391 SQL

题目背景

现代数据库的出现为人们管理各种数据提供了极大的方便,可以说,现在很少有行业背后没有数据库作为支撑。 一个典型关系型数据库内部用一张张“表”存储数据,表内的数据代表着现实世界中客观实体的信息,可以说是客观实体的集合。以下是一个“表”的例子: ```plain | food|num| buyDate| price| | juice| 1|2019-12-21|10.209| |banana| 10|2020-02-02|129.98| | apple| 9| 2020-1-19| 34.55| | apple| 3|2020-01-19| 32.2| ``` 其中 ```plain | food|num| buyDate| price| ``` 可以称为“表头”,里面每一列各不相同的字符串(比如`food`)作为列名唯一地标识每一列。表头告诉我们这张表将从哪些维度描述客观实体。 之后的每一行称为“元组”,每一个元组对应一个客观实体,每一列中内容的含义和表头所描述的应一致。以下是表中的一个元组: ```plain | juice| 1|2019-12-21|10.209| ```

题目描述

现在给予你们的任务是,为某张表按照一定的关键字顺序排序并输出。 为了简化任务,题目将表中的数据类型限制为: `INT`:整型数据,同C语言中的`int`,排序时按照数字大小排序; `REAL`:实数,同C语言中的`double`,排序时按照数字大小排序。同时本题中实数的有效数字不会超过8位; `VARCHAR`:字符串,仅包含大写或小写英文字母,长度不超过 $100$ 。排序时按照ASCII码的大小进行排序; `DATE`:日期,格式为`year-month-day`,排序时按照日期先后进行排序。保证日期一定合法,`year`是一个四位数字,但是不保证`month`和`day`一定有两位数字。 按照一定的关键字顺序排序意味着当两个元组的第一关键字值相等的时候,比较第二关键字,以此类推。不会出现所有关键字对应的值都相等的情况。 特别定义数据的宽度为它所包含的ASCII码字符个数。

输入格式

第一行,两个整数 `row` 和 `col` ,分别为表的行数(除去表头)和表的列数,列数在 $100$ 及以内,行数在 $1000$ 及以内。 第二行,`col` 个用一个空格分隔的`VARCHAR`类型字符串,代表表头。 第三行,`col` 个用一个空格分隔的字符串,只可能是 `INT` , `REAL` , `VARCHAR` 或 `DATE` ,代表每一列中数据的类型。 接下来 `row` 行,每行 `col` 个用一个空格分隔的数据,每个数据遵循所在列的数据类型的构造规则,每一行代表一个元组。 之后若干行为关键字顺序,每行包括一个列名和一个数字,用一个空格分隔。第 $i$ 行的列名代表第 $i$ 关键字,跟在它后面的数字为 $1$ 或 $-1$ ,如果是 $1$ 则该关键字按升序排列,$ -1 $ 则按降序排列。关键字之间不会重复,此部分行数不会超过列数。

输出格式

输出排好序的表格,第一行是表头,接下来 `row` 行相应的元组。 输出的每一行以 `|` 开始和结束,每一列之间也用 `|` 分隔,每一列的宽度等于列中数据(包括表头)的最大的宽度,并且右对齐。