SQL技巧:数据导入导出与转换操作

0 下载量 60 浏览量 更新于2024-08-28 收藏 106KB PDF 举报
本文介绍了在SQL和SQL SERVER中处理数据导入导出及转换的一些巧妙方法,同时也涉及了与ACCESS和EXCEL的数据交互。以下是一些关键的SQL操作示例: 1. 复制表结构: 当你需要创建一个新表,只复制原表的结构而不包含数据时,可以使用如下语句: ```sql SELECT * INTO b FROM a WHERE 1<>1 ``` 这里`a`是源表,`b`是新表。`WHERE 1<>1`是一个无效的条件,所以不会选取任何数据,但会创建新表的结构。 2. 拷贝表数据: 若要将数据从一个表复制到另一个已有相同结构的表中,可以执行: ```sql INSERT INTO b (a, b, c) SELECT d, e, f FROM b ``` 这里`a`, `b`, `c`是目标表`b`的字段,`d`, `e`, `f`是源表的相应字段。 3. 显示多表信息: 若要展示一篇文章及其提交人和最后的回复时间,可以使用子查询: ```sql SELECT a.title, a.username, b.adddate FROM table a, (SELECT MAX(adddate) adddate FROM table WHERE table.title = a.title) b ``` 子查询找到每篇文章的最后回复时间。 4. 外连接查询: 使用LEFT OUTER JOIN进行外连接查询,例如: ```sql SELECT a.a, a.b, a.c, b.c, b.d, b.f FROM a LEFT OUT JOIN b ON a.a = b.c ``` 这会返回所有来自`a`表的记录,即使在`b`表中没有匹配项。 5. 时间条件查询: 检查日程安排是否在当前时间前五分钟内,如需提醒: ```sql SELECT * FROM 日程安排 WHERE DATEDIFF('minute', f开始时间, GETDATE()) > 5 ``` 6. 删除关联表中的孤儿记录: 删除主表中已在副表中不存在的记录,可以这样操作: ```sql DELETE FROM info WHERE NOT EXISTS (SELECT * FROM info_bz WHERE info.info_id = info_bz.info_id) ``` 7. 复杂查询示例: 示例展示了如何结合多表查询,找出特定时间段内的库存变化: ```sql Select A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE FROM TABLE1, (Select X.NUM, X.UPD_DATE, Y.UPD_DATE AS PREV_UPD_DATE FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND FROM TABLE2 WHERE TO_CHAR(UPD_DATE, 'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X, (SELECT NUM, UPD_DATE, STOCK_ONHAND FROM TABLE2 WHERE TO_CHAR(UPD_DATE, 'YYYY/MM') = TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') || '/01', 'YYYY/MM/DD') - 1, 'YYYY/MM')) Y WHERE X.NUM = Y.NUM(+) AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND, 0) <> X.STOCK) ``` 此查询涉及到在特定月份(当前月)内,根据入库量和现有库存判断是否有库存差异。 以上技巧和示例涵盖了基本的表操作、数据迁移以及时间条件查询,对理解和操作SQL数据库十分有用。它们可以帮助你更有效地管理数据库,实现数据的灵活迁移和分析。