SQL函数--union all 使用方法及案例

1. 使用方法

在 SQL 中,UNION ALL 操作用于结合两个或更多 SELECT 语句的结果集,包括所有匹配的行,甚至包括重复的行。这与 UNION 不同,因为 UNION 会自动删除重复的行。

满足条件:

1、两个select查询的列的数量必须相同。

2、每个列的数据类型需要相似。

2. 案例一

假设有两个表,table1 和 table2,它们都有相同的列结构(例如,都有 id 和 name 列):

-- table1 的数据  
id | name  
---|------  
1  | Alice  
2  | Bob  
  
-- table2 的数据  
id | name  
---|------  
3  | Carol  
2  | Bob

 如果你想从这两个表中检索所有的行,并保留可能的重复行,你可以使用 UNION ALL

SELECT id, name FROM table1  
UNION ALL  
SELECT id, name FROM table2;

这将返回以下结果:

id | name  
---|------  
1  | Alice  
2  | Bob  
3  | Carol  
2  | Bob

3. 案例二

列转换成行

假设我们有一个表sales_summary,它包含了每种产品的销售额汇总:

CREATE TABLE sales_summary (
    A_sales DOUBLE,
    B_sales DOUBLE,
    C_sales DOUBLE
);

INSERT INTO sales_summary VALUES (250, 200, 300),(100,190,800),(290,290,880),(280,720,990);

现在,我们想要将这个表转换为每行一个产品及其销售额的格式。我们可以使用UNION ALL来实现这一点:

SELECT 'A' AS product_type, A_sales AS amount FROM sales_summary
UNION ALL
SELECT 'B' AS product_type, B_sales AS amount FROM sales_summary
UNION ALL
SELECT 'C' AS product_type, C_sales AS amount FROM sales_summary;

 返回结果:

### 多啦靶场 SQL 注入题目 16-22 的解题思路 #### 题目背景分析 多啦靶场中的 SQL 注入系列题目通常涉及多种注入方式,包括但不限于布尔盲注、时间盲注以及联合查询注入等。通过提供的参考资料可以看出,这些题目往往需要选手掌握基础的 SQL 注入技巧并能够灵活运用。 在本案例中,可以推测目标环境可能是一个存在漏洞的应用程序接口,允许攻击者通过输入特定参数来操控后台数据库的行为。由于具体题目细节未提供,以下是基于常见 SQL 注入场景下的通用解决方案[^1]。 --- #### 常见解法分类 ##### 1. **布尔盲注** 如果页面返回的内容会因为条件的不同而有所变化,则可以通过构造 `true` 和 `false` 来判断数据的存在与否。例如: ```sql ?username=admin' AND substring(password,1,1)='a'%23 ``` 上述语句尝试验证密码的第一个字符是否为 `'a'`。如果是,则页面正常显示;如果不是,则可能出现错误提示或其他异常行为[^2]。 ##### 2. **时间盲注** 当无法直接观察到页面反馈时,可借助延迟函数(如 `sleep()` 或 `benchmark()`)间接获取信息。例如: ```sql ?username=admin' AND IF(substring(password,1,1)='a', sleep(5), null)%23 ``` 此方法的核心在于让服务器执行耗时操作,并根据响应速度推断结果真伪。 ##### 3. **联合查询注入 (UNION SELECT)** 适用于支持多个字段输出的情况。假设原查询结构如下: ```sql SELECT username FROM users WHERE id=1; ``` 则可通过附加额外子句提取敏感表项: ```sql ?id=1 UNION ALL SELECT database(),version(),user()-- ``` 注意调整列数匹配原始查询的结果集宽度。 ##### 4. **文件读取/写入** 部分高级挑战可能会开放权限至本地磁盘访问功能。比如定位配置文件路径以抓取明文凭证: ```bash C:\Program Files\MySQL\data\mysql\user.MYD ``` 利用 LOAD_FILE 函数加载指定资源或将恶意脚本植入系统启动目录下实现持久化控制[^3]。 --- #### 实战建议 针对每一道独立习题,请务必遵循以下原则开展探索活动: - 明确当前上下文中所使用的 DBMS 类型及其版本号; - 测试各种边界情况确认是否存在防护机制干扰常规流程; - 记录每次交互产生的差异现象作为后续推理依据; - 尝试绕过 WAF 过滤规则完成最终突破任务。 --- ### 示例代码片段 下面给出一段简单的 Python 脚本来演示如何自动化收集目标站点上的潜在脆弱点信息: ```python import requests url = 'http://example.com/login' payloads = ["'", '"', ')'] for p in payloads: data = {'username': f'test{p}', 'password': 'random'} res = requests.post(url, data=data) if "error" in res.text.lower(): print(f"[+] Possible vulnerability detected with payload: {p}") ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆不呆~

你的鼓励是我最开心的事情~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值