Oracle的高级查询

  • 1 merge 合并查询

    merge into tabl1 a    
      	 using (select 1717 product_id,"002" req_no from table2 b 
      	 on (a.product_id = b.product_id and a.req_no = b.req_no) 
      	 when matched then 
      		 update set product_name = "更新",category = "新的" 
      	 when not matched then 
      		 insert (product_id,req_no) values(1701,"002");
      
      命令解释:
      
      合并查询 表a
      	 关联查询为 b表的product_id字段为1717和req_no字段为"002" 的值
      	 判断条件为 a表的的product_id等于1717和req_no字段为"002"也为002的
      	 当有符合搜索结果的内容时
      		 更新 a表对应的内容的product_name为“更新”,req_no为"002"
      	 当没有符合条件的内容时
      		 执行a表的插入操作
  • 2 start with connect by 递归查询

    应用在树形结构中,比如领导和下属的递归关系

    start with 从某个节点ID开始 connnect by prior 子节点与父节点的关系

    比如:

    select * from emp start with empnumber=3306 connect by prior meg=empnumber;
    • 父节点=子节点,向上查询;子节点=父节点,向下查询
    • 可以添加 WHERE 条件判断; 写在 start 的前面;
    • 可以指定多个起始节点,使用 OR 关键字;
    • 可以进行排序

?

  • 3 同义词 sysnonym

    可以为表起别名,是一种映射关系,别名的意思,和视图的功能类似;不同数据库实例间也可以访问同义词;

    私有同义词,普通用户获取对应权限后自己建立的同义词;

      create sysnonym name from table_name;

    共有同义词,DBA创建,所有的用户可以使用

      create public sysnonym name from 用户名.table_name;

    使用:

      select * from 同义词;

   远程访问同义词

   首先设置同义词的远程连接

    create public database link mylink
	 connect to 用户 identified  by 密码 using
	   ‘(DESCRIPTION = 
	       (ADDRESS_LIST= 
		   (ADDRESS=(PROTOCOL=TCP) (HOST=127.0.0.1)(PORT=1521))
		    (CONNECT_DATA=(SERVICE_NAME=数据库名))
		)
	    )‘;

   使用

    select * from 表名@mylink;
  

  注意:

    远程连接时,二进制数据无法展示

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注