{"problem":{"name":"[入门赛 #25] sql","description":{"content":"一个数据库可以看作若干张二维表的合集。 例如，一个学生信息管理系统的数据库可能会有如下两张二维表： `basic_info`： | name | sid | grade|  | :-: | :-: | :-: | | Fusu | 001 | 1 | | Maxmilite| 002 | 2| | Expect2004 | 003 | 2 | `GPA`: | sid | GPA | |","description_type":"Markdown"},"platform":"Luogu","limit":{"time_limit":3000,"memory_limit":524288},"difficulty":{"LuoguStyle":"P3"},"is_remote":true,"is_sync":true,"sync_url":null,"sign":"LGP10486"},"statements":[{"statement_type":"Markdown","content":"一个数据库可以看作若干张二维表的合集。\n\n例如，一个学生信息管理系统的数据库可能会有如下两张二维表：\n\n`basic_info`：\n\n| name | sid | grade| \n| :-: | :-: | :-: |\n| Fusu | 001 | 1 |\n| Maxmilite| 002 | 2|\n| Expect2004 | 003 | 2 |\n\n`GPA`:\n\n| sid | GPA |\n| :-: | :-: |\n| 001 | 77.88|\n| 002| 99.9 |\n| 003| 99.7 |\n\n上述表的第一行称作**表头**，接下来每一行表示表的一组信息。例如，`basic_info` 的第二行表示存在一名学生的姓名（`name`）是 $\\texttt{Fusu}$，学号 (`sid`) 为 $\\texttt{001}$，年级（`grade`）为 $\\texttt{1}$\n\n一个正式的 sql 语言应该支持跨表查询，但是在本题中，你只需要支持在单个表内的查询。我们认为表内的一切属性都以字符串的形式给出。\n\n你需要支持如下格式的查询语句：\n\n```sql\nselect [columns] from [table_name] where [header]=x\n```\n\n上式中，`columns` 是若干个**表头**，`table_name` 是**表名**，`header` 是**表头**，$x$ 是给出的条件。它表示在 `table_name` 这个表里查询 `header` 这一列为 $x$ 的所有行的所有 `columns` 列里的信息。\n\n例如，如果对上述例子里的表执行如下语句：\n\n```sql\nselect name from basic_info where grade=1\n```\n表示在 `basic_info` 表里查询 `grade` 列为 $1$ 的所有行，并输出它们的 `name` 列，因此结果为：\n\n```plain\nFusu\n```\n\n如果执行\n\n```sql\nselect name,sid,grade from basic_info where grade=2\n```\n\n那么就找到 `basic_info` 表里所有 `grade` 为 `2` 的行，并依次输出它们的 `name`、`sid`、`grade`。结果为：\n\n```plain\nMaxmilite 002 2\nExpect2004 003 2\n```\n\n可以看到，`select` 语句的第一组参数 `columns` 可以是多个表头名称，此时应该按照 `columns` 给出的顺序输出每个对应的列信息。通过 `where` 后面的条件可以查询到多行满足要求的行时，应按照表的输入顺序（即从上到下）输出每行要求的信息。\n\n你需要实现这个 sql 语句解析器，给出 sql 查询结果。注意，我们保证了在查询语句里表名只有一个，且 `where` 后面的条件有且仅有一个等式。\n\n## Input\n\n输入的第一行是一个整数 $n$，表示数据库中表的个数。\n\n接下来依次给出每张表的信息：  \n第一行是一个字符串 `table_name`，表示表的名称。  \n第二行有两个整数 $x,y$，表示这张表的大小为 $x$ 行 $y$ 列。\n第三行有 $y$ 个字符串，表示这张表的表头。\n接下来 $x - 1$ 行，每行 $y$ 个字符串，给出这张表上每一行的信息。\n\n接下来是一个整数 $m$，表示 sql 语句的数量。\n\n接下来 $m$ 行，每行一个 sql 语句，格式一定是\n\n```sql\nselect [columns] from [table_name] where [header]=x\n```\n\n保证 `columns`、`table_name`、`header`、`x` 这四个参数内部没有空格。\n\n数据保证查询语句合法，即 `columns`、`table_name`、`header` 这三个参数所提供的表头、表名都是存在的，且给出的查询条件一定能找到至少一行符合，即查询结果非空。\n\n保证 `columns` 里没有重复的表头名。\n\n## Output\n\n对于每个查询，输出若干行，依次表示查询结果。\n\n一行查询结果里，如果有若干个列的信息要输出，输出字符串之间用一个空格隔开。\n\n[samples]\n\n## Background\n\nsql 是一种强大的数据库查询语言。在本题中，你需要实现一个部分功能的 sql 解析器。\n\n## Note\n\n### 样例 3 解释\n\n输入的表单可能有若干行是重复的，你无需对这些行做特殊处理，可以认为它们是不同的。每次查询需要输出所有符合要求的行。例如，在第一条 sql 中，`1 2` 这一行出现了两次且符合要求，因此输出了两次 `1 2`。\n\n### 数据规模与约定\n\n| 测试点编号 | 表的数量为 $1$ | 表头数量为 1 |  columns 里仅有一列表头 | \n| :-: | :-: | :-: | :-:|\n| 1, 2 | $\\checkmark$ | $\\checkmark$ | $\\checkmark$ |\n| 3, 4 | $\\checkmark$ | $\\times$ | $\\checkmark$ |\n| 5, 6 | $\\times$ | $\\checkmark$ |$\\checkmark$ |\n| 7, 8 | $\\times$ | $\\times$ | $\\checkmark$ |\n|9, 10 | $\\times$ | $\\times$ | $\\times$ |\n\n对全部的测试数据，保证：\n\n- $1 \\leq n \\leq 10$。\n- $1 \\leq x\\leq 100$，$1 \\leq y \\leq 10$。\n- $1 \\leq m \\leq 1000$。\n- 表头 `table_name` 长度不超过 $100$。\n- 表的内容和表头的字符串长度不超过 $10$，`columns` 的长度不超过 $100$。\n- 除了 `columns` 信息以外，输入的字符串均不含有逗号 `,`。\n- 输入字符串均为可见字符，ASCII 范围为 $33\\sim 126$（含两端），且不含符号 `=`。\n\n### 提示\n\n请注意大量数据输出对程序效率造成的影响，选择合适的输出方式，避免超时。","is_translate":false,"language":"English"}],"meta":{"iden":"LGP10486","tags":["模拟","2024","语言月赛"],"sample_group":[["1\nbasic_info\n4 3\nname sid grade\nFusu 001 1\nMaxmilite 002 2\nExpect2004 003 2\n2\nselect name from basic_info where grade=1\nselect sid,name from basic_info where grade=2\n","Fusu\n002 Maxmilite\n003 Expect2004\n"],["2\nbasic_info\n4 3\nname sid grade\nFusu 001 1\nMaxmilite 002 2\nExpect2004 003 2\nGPA\n2 2\nsid GPA\n001 77.88\n1\nselect GPA from GPA where sid=001\n","77.88\n"],["2\nshow_corner\n3 2\nh1 h2\n1 2\n1 2\nshow_corner2\n3 1\nh0\n1\n1\n2\nselect h1,h2 from show_corner where h1=1\nselect h0 from show_corner2 where h0=1\n","1 2\n1 2\n1\n1\n"]],"created_at":"2026-03-03 11:09:25"}}