***********************************************声明*********************************************************************** 

原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任。

深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/39933069

****************************************************************************************************************************

SQL_由创建表引出

目标:

1、hyl用户下创建表cool;

2、将scott用户下emp表数据抽取到hyl用户下的cool表内;

3、更改cool表内数据,把scott的emp按hyl用户下的cool表进行更改。

操作:

SQL> create table cool ("1" number(4),"2" varchar2(10),"3" varchar2(9),"4" number(4),"5" date,"6" number(7,2),"7" number(7,2),"8" number(2));

Table created

--创建表

SQL> select * from cool;

    1 2          3             4 5                   6         7   8

----- ---------- --------- ----- ----------- --------- --------- ---

SQL> desc cool

Name Type         Nullable Default Comments

---- ------------ -------- ------- --------

1    NUMBER(4)    Y                        

2    VARCHAR2(10) Y                        

3    VARCHAR2(9)  Y                        

4    NUMBER(4)    Y                        

5    DATE         Y                        

6    NUMBER(7,2)  Y                        

7    NUMBER(7,2)  Y                        

8    NUMBER(2)    Y

使用查询语句,计划抽取的数据,例如以下:

SQL> select t.empno as "1",t.ename as "2",t.job as "3",t.mgr as "4",t.hiredate as "5",t.sal as "6",t.comm as "7",t.deptno as "8" from scott.emp t;

    1 2          3             4 5                   6         7   8

----- ---------- --------- ----- ----------- --------- --------- ---

 7369 SMITH      CLERK      7902 1980/12/17     800.00            20

 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00  30

 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00  30

 7566 JONES      MANAGER    7839 1981/4/2      2975.00            20

 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00  30

 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00            30

 7782 CLARK      MANAGER    7839 1981/6/9      2450.00            10

 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00            20

 7839 KING       PRESIDENT       1981/11/17    5000.00            10

 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00  30

 7876 ADAMS      CLERK      7788 1987/5/23     1100.00            20

 7900 JAMES      CLERK      7698 1981/12/3      950.00            30

 7902 FORD       ANALYST    7566 1981/12/3     3000.00            20

 7934 MILLER     CLERK      7782 1982/1/23     1300.00            10

14 rows selected

SQL> insert into cool("1","2","3","4","5","6","7","8") select t.empno as "1",t.ename as "2",t.job as "3",t.mgr as "4",t.hiredate as "5",t.sal as "6",t.comm as "7",t.deptno as "8" from scott.emp t;

--将数据按序号字段。由emp表抽取到cool表内

14 rows inserted

SQL> commit;

Commit complete

SQL> select * from cool;

    1 2          3             4 5                   6         7   8

----- ---------- --------- ----- ----------- --------- --------- ---

 7369 SMITH      CLERK      7902 1980/12/17     800.00            20

 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00  30

 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00  30

 7566 JONES      MANAGER    7839 1981/4/2      2975.00            20

 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00  30

 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00            30

 7782 CLARK      MANAGER    7839 1981/6/9      2450.00            10

 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00            20

 7839 KING       PRESIDENT       1981/11/17    5000.00            10

 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00  30

 7876 ADAMS      CLERK      7788 1987/5/23     1100.00            20

 7900 JAMES      CLERK      7698 1981/12/3      950.00            30

 7902 FORD       ANALYST    7566 1981/12/3     3000.00            20

 7934 MILLER     CLERK      7782 1982/1/23     1300.00            10

14 rows selected

小结:

A表数据抽取到B表

SQL>insert into select B表(”B表列1”,”B表列2”,”B表列3”) select  t.”A表列1” as “B表列1”。”t.A表列2” as “B表列2”。”t.A表列3” as “B表列3” fromA表 t;

--hyl用户下,例如以下所看到的:

SQL> update cool set "3"='DBA' where "8"=30;

6 rows updated

SQL> commit;

Commit complete

SQL> select * from cool;

    1 2          3             4 5                   6         7   8

----- ---------- --------- ----- ----------- --------- --------- ---

 7369 SMITH      CLERK      7902 1980/12/17     800.00            20

 7499 ALLEN      DBA        7698 1981/2/20     1600.00    300.00  30

 7521 WARD       DBA        7698 1981/2/22     1250.00    500.00  30

 7566 JONES      MANAGER    7839 1981/4/2      2975.00            20

 7654 MARTIN     DBA        7698 1981/9/28     1250.00   1400.00  30

 7698 BLAKE      DBA        7839 1981/5/1      2850.00            30

 7782 CLARK      MANAGER    7839 1981/6/9      2450.00            10

 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00            20

 7839 KING       PRESIDENT       1981/11/17    5000.00            10

 7844 TURNER     DBA        7698 1981/9/8      1500.00      0.00  30

 7876 ADAMS      CLERK      7788 1987/5/23     1100.00            20

 7900 JAMES      DBA        7698 1981/12/3      950.00            30

 7902 FORD       ANALYST    7566 1981/12/3     3000.00            20

 7934 MILLER     CLERK      7782 1982/1/23     1300.00            10

14 rows selected

--scott用户下,运行操作,例如以下:

SQL> update emp t set (job)=(select "3" from hyl.cool p where t.empno=p."1");

--对hyl的cool表进行更新

14 rows updated

补充:通过另外一个用户的表向本用户下表插入数据时,应具有訪问该表的权限

如该例,需使用sys用户向scott用户赋予查询hyl表的权限

SQL> grant select on hyl.cool to scott;

Grant succeeded.

补充完成

SQL> select * from emp;

--能够看到,此时scott用户下的emp表数据job列已经更新为同hyl用户下的cool表同样了

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

 7369 SMITH      CLERK      7902 1980/12/17     800.00               20

 7499 ALLEN      DBA        7698 1981/2/20     1600.00    300.00     30

 7521 WARD       DBA        7698 1981/2/22     1250.00    500.00     30

 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20

 7654 MARTIN     DBA        7698 1981/9/28     1250.00   1400.00     30

 7698 BLAKE      DBA        7839 1981/5/1      2850.00               30

 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10

 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20

 7839 KING       PRESIDENT       1981/11/17    5000.00               10

 7844 TURNER     DBA        7698 1981/9/8      1500.00      0.00     30

 7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20

 7900 JAMES      DBA        7698 1981/12/3      950.00               30

 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20

 7934 MILLER     CLERK      7782 1982/1/23     1300.00               10

14 rows selected

SQL> commit;

Commit complete

小结:

把一个A表的某列更改为还有一个B表的列值,使用某一列进行关联。

SQL> update A表 t set(列)=(select 列 from B表 p where t.列=p.列)。

例:SQL> update emp t set (job)=(select "3" from hyl.cool p where t.empno=p."1");

***********************************************声明*********************************************************************** 

原创作品,出自 “深蓝的blog” 博客。欢迎转载。转载时请务必注明出处,否则追究版权法律责任。

深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/39933069

****************************************************************************************************************************

SQL_由创建表引出的更多相关文章

  1. Oracle创建表空间

    1.创建表空间 导出Oracle数据的指令:/orcl file=C:\jds.dmp owner=jds 导入Oracle数据的指令:imp zcl:/orcl file=C:\jds.dmp fu ...

  2. postgres创建表的过程以及部分源码分析

    背景:修改pg内核,在创建表时,表名不能和当前的用户名同名. 首先我们知道DefineRelation此函数是最终创建表结构的函数,最主要的参数是CreateStmt这个结构,该结构如下 typede ...

  3. SQL Server 2008 阻止保存要求重新创建表的更改问题的设置方法

    不是很理解为什么在2008中会加入阻止保存要求重新创建表的更改这个选项.症状表现为修改表结构的时候会"阻止"你.而且我遇到的情况是居然有的时候阻止你,有的时候不阻止你,摸不到头脑. ...

  4. 利用Oracle创建表空间和用户

    本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6217152.html 第一步,创建表空间 以SYS/sys账户和SYSDBA身份登录 ...

  5. 使用plsql创建表空间和用户

    使用plsql创建oracle数据库的表空间和用户,并授权的语句.1.创建表空间:说明:datafile是指定创建位置,指向oracle数据库的默认位置:autoextend 设置容量为自动增长,50 ...

  6. oracle与mysql创建表时的区别

    oracle创建表时,不支持在建表时同时增加字段注释.故采用以下方式: #创建表CREATE TABLE predict_data as ( id integer ), mid ), time dat ...

  7. oracle11g interval(numtoyminterval())自动创建表分区

    Oracle11g通过间隔分区实现按月创建表分区 在项目数据库设计过程中由于单表的数据量非常庞大,需要对表进行分区处理.由于表中的数据是历史交易,故按月分区,提升查询和管理. 由于之前对于表分区了解不 ...

  8. hibernate基础之无法自动创建表总结

    刚刚接触Hibernate尝试写一个事例项目,但是搞了一天硬是苦逼的没弄通,一直的报无法创建表,现在就把这些经验给大家分享一下: 1.书写问题: <property name="hbm ...

  9. Oracle创建表空间、用户、授权

    在创建好数据实例(数据库)好后的基础上,后续做的事情如下: ---创建表空间 create tablespace LIS2011DATA logging datafile 'd:\oracle\pro ...

随机推荐

  1. Cocos2d-x教程(30)-3.x版本号物理引擎的使用

    转载时请注明原文出处 : http://blog.csdn.net/u012945598/article/details/38417333 在Cocos2d-x 2.x的版本号中,开发人员能够直接使用 ...

  2. hive regex insert join group cli

    1.insert Insert时,from子句既能够放在select子句后,也能够放在insert子句前,以下两句是等价的 hive> FROM invites a INSERT OVERWRI ...

  3. Swift - 设置应用程序图标的提醒个数(右上角小红圈)

    使用UILocalNotification除了可以实现本地消息的推送功能(可以设置推送内容,推送时间,提示音),还可以设置应用程序右上角的提醒个数. 下面演示如何设置,效果图如下: --- AppDe ...

  4. SharePoint数据视图无法打开

    最近在折腾SharePoint,之前列表常用的“数据视图”居然不能打开,提示“没有安装Sharepoit foundation 数据兼容组件”如图: 上网G下.度下有说要删除注册表.要安装office ...

  5. 关于Delphi中TRttiContext.FindType失效的问题

    自从Delphi2010后,Delphi中的Rtti功能得到了增强.我们终于可以不用先RegisterClass,再GetClass获取类的信息了.而只是简单的通过TRttiContext.GetTy ...

  6. CSS中的!important属性用法

    关于CSS的运用技巧有很多, 今天主要探讨一下CSS中 !important 这个属性的用法.在CSS的使用中,遇到最多的问题就是不同浏览器之间的兼容问题. 由于IE并不严格执行W3C标准, 而又几乎 ...

  7. uvc摄像头代码解析5

    8.初始化uvc控制 8.1 重要结构体 struct uvc_control { //uvc控制 struct uvc_entity *entity; //uvc实体 struct uvc_cont ...

  8. windows消息处理(强烈推荐,收藏)

    由于看了一下,比较好理解,暂时先放到这里,待有空再翻译.只是在每节后大致介绍一下讲的内容. 感觉写的比较全,无论从消息的原理还是从MFC操作上来说,值得一看,我也在此做个收藏. (一) 说明:以下首先 ...

  9. HTML5在input背景提示文本(placeholder)的CSS美化

    本文转自http://www.webhek.com/html5-placeholder-css/ 在火狐浏览器中的写法和在谷歌浏览器和Safari里的写法有些不同.但相信以后会统一. /* 通用 */ ...

  10. 第十六周oj刷题——Problem J: 填空题:静态成员---计算学生个数

    Description 学生类声明已经给出.在主程序中依据输入信息输出实际建立的学生对象个数,以及全部学生对象的成绩总和. Input 学生个数 相应学生个数的学生信息(姓名    年龄    成绩) ...