SQL_由创建表引出

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

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

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

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

目标:

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

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

时间: 2024-11-10 07:26:35

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

hive创建表失败,drop表失败

一.hive创建表失败,报错: CREATE TABLE pokes (foo INT, bar STRING);FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:javax.jdo.JDODataStoreException: An exception was thrown while adding/validating class(

mybatis3动态创建表,判断表是否存在,删除表

1.mybatis3动态创建表,判断表是否存在,删除表 mapper配置文件: <span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/

sqlite学习笔记8:C语言中使用sqlite之创建表

前面已经说了如何打开和关闭数据库,这次要说得是如何执行SQL语句,来创建一张表. 要用的的函数: sqlite3_exec(sqlite3* db, const char *sql, sqlite_callback callback, void *data, char **errmsg) 参数: db:已经打开的数据库实例 sql:SQL语句,是一个字符串 callback:是一个回调函数 data:做为回调函数的第一个参数 errmsg:用于带回错误信息 该回调函数有两种返回值类型. 1.返回

数据库中创建表(包括创建主键,外键,非空列,唯一)

创建表(包括创建主键,外键,非空列,唯一) - PROS - 博客园 http://www.cnblogs.com/CodingArt/articles/1621921.html **************** 创建主键(三种方法) **************** 创建学生表: 第一种: create table student (sno char(5) primary key,/*学号*/ /*可以直接指定主键*/ sname char(20) not null,/*姓名*/ ssex c

Oracle创建表空间 用户 授权

创建表空间 用户 授权 create tablespace liuzhen_tablespace   datafile 'D:\liuzhen_oracle_data\liuzhen_data.dbf' size 50m   autoextend on  next 50m maxsize 20480m   extent management local; create user liuzhen identified by 123456   default tablespace liuzhen_t

ORACLE的安装与网页版创建表空间的简单操作以及PLsql的简单操作

1.oracle的安装: 安装简单易学,在这里不做解释.下载看装包后耐心等待,注意安装目录不要有中文字符,尽量按照指定目录进行安装.安装完成后会占用有大约5g的内存. 如果要卸载oracle,需要用其自带的卸载工具进行卸载[universal installer],然后删除注册表项,删除环境变量,删除目录并且重新启动计算机. 2.在网页版进行创建表空间: 进入网页版: 在电脑的服务中我们可以看到一共有7个oracle的服务项目,其中只有三个是正在启动中.这三项中,只有当OracleDBConso

5-04用Sql语句创建表

用Sql语句创建表的基本语法: USE E_Market--指向当前所操作的数据库 GO CREATE TABLE CommoditySort--创建表的名字 { sortID int IDENTITY(1,1) NOT NULL,类别编号 sordName varchar(50) NOT NULL --类别名称 } GO

5-03使用视图创建表

视图创建表的过程: 找到你操作的数据库,点开数据库,右击表,点新建表. 出现这个窗口的时候,就可以打上列名和数据类型. 按键盘的ctrl+s就可以进行保存,打上表名就行了

sqlserver -- 解决sqlserver2008“Prevent saving changes that require table re_creation(阻止保存要求重新创建表的更改)”的问题

电脑重装了sqlserver2008 R2(英文版)后,新建数据表,新建字段,发现有个字段类型设置错了,想修改字段类型,而该表已经保存好了,即保存后修改字段属性.但无法保存修改后的设置,提示“Saving changes is not permitted"(具体如下图) 解决方法: 在菜单栏找到Tools->options,找到Designers,然后将Prevent saving changes that require table re_creation前面的勾去掉,保存后即可. 如果