查看表结构,调用存储过程:call SP_TABLEDEF("模式名", "表名")

查看表属于哪个用户:select * from dba_tables where TABLE_NAME='表名';

查询某模式下的所有表名:select TABLE_NAME from dba_tables where owner='SYSDBA';

查询数据库兼容情况:select * from v$dm_ini where "V$DM_INI".PARA_NAME='COMPATIBLE_MODE';

修改兼容模式:sp_set_para_value(2,'COMPATIBLE_MODE',4); 0表示不兼容 2表示部分兼容oracle 3表示部分兼容SQL 4表示部分兼容mysql

查询当前用户权限:select grantee,privilege from dba_sys_privs where grantee='角色名';
查询角色:select grantee,granted_role from dba_role_privs where grantee='用户名';

查询用户状态:select username, ACCOUNT_STATUS from dba_users ;
获取表的所有字段:select * from all_tab_columns where owner='模式名' and Table_Name='表名' \\

查询所有表空间:select * from dba_tablespaces

`PARTITION子句指定分区

点击查看代码
`PARTITION子句指定分区
CREATE TABLE callinfo(
caller CHAR(15),
callee CHAR(15),
time DATETIME,
duration INT)
PARTITION BY RANGE(time)(
PARTITION p1 VALUES LESS THAN ('2018-04-01')
...)
)`
点击查看代码

CREATE TABLE callinfo(
caller CHAR(15),
callee CHAR(15),
time DATETIME,
duration INT)
PARTITION BY RANGE(time)(
PARTITION p1 VALUES LESS THAN ('2018-04-01')
...)
)`

查询分区语句:select * from callinfo PARTITION (p1);
具有DBA权限删除某一列时,需要带上CASCADE参数
ALTER TABLE PRODUCTION.PRODUT DROP PRODUCT_SUBCATEGORYID CASCADE;
增加UNIQUE约束 使用了ADD CONSTRAINT方法
ALTER TABLE PRODUCTION.PRODUCT ADD CONSTRAINT CON_PRODUCTNAME UNIQUE(NAME);
合并分区且修改分区 split子句拆分分区
ALTER TABLE PRODUCTION.PRODUCT_INVENTORY MERGE PARTITIONS P1,P2 INTO PARTITIONS P5; ALTER TABLE T1 SPLIT PARTITION P1 AT(5,5) INTO (PARTITION P5, PARTITION P6); ALTER TABLE T1 SPLIT PARTITION P3 INTO(PARTITION P7 VALUES LESS THAN(25,25),PARTITION P8 VALUES LESS THAN (28,28),PARTITION P9)
内连接:
--自然连接 natural join --查询不需要指定连接列,列名自己过滤,两个表的连接列的列名和数据类型要一致
--交叉连接cross join(笛卡集)---尽量避免,容易拖死数据库
--join ... using 子句 在满足多个连接列时,可以指定一个列做连接,连接列的前面不能加表名或者是前缀;join 关键字指定连接的两张表,using 指明连接列;要求 using 中的列存在于两张连接表中。
--join ... on子句 join 关键字指定连接的两张表,on 子句指定连接条件表达式,其中不允许出现 rownum,可为表设置简单代称。
--join ... on子句 join 关键字指定连接的两张表,on 子句指定连接条件表达式,其中不允许出现 rownum,可为表设置简单代称。
--hash join 可以通过 hint 强制走 hash join 优化器 CBO 根据小表的连接列生成 hash 值,连接大表,扫描大表

单子查询和多子查询(in,any,all)

TRUNCATE TABLE PRODUCTION.PRODUCT_REVIEW; --只删除表中记录,不删除表中结构

ALTER TABLE ORDERS REBULID SECTION; --对事务表ORDERS进行重整

ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD' --设置日期格式

COMMENT ON TABLE/COLUMN ... IS ... ; --添加注释信息

ALTER SYSTEM SET 'SORT_BUF_SIZE' =200 DEFERRED MEMORY; --动态 修改参数,对现在不生效,之后创建的才生效,延迟

ALTER SYSTEM SET 'MTAB_MEN_SIZE' =1200 spfile; --设置静态参数
ALTER SESSION SET 'HAGR_HASH_SIZE' = 2000; --修改当前会话

STAT 30 ON INDEX PURHASING.S1; --对PURHASING模式下的索引S1生成统计信息,采样率为30%

select * from tt minus/except select * from kk --使用minus或者是except查询tt中有kk中没有的数据

select * from tt intersect select * from kk --使用intersect查询tt和kk中都存在的数据

select * from production where production.row like "曹雪芹" --用.row来代替所有行的模糊查询

select listagg(name,',') within group(order by name) from product --首先按group by语句分组,再在组内按照within group中的order by进行排序

select name, ntile(3) over(order by nowprice) as ntile from production.product --根据nowprice使用ntile函数分成3组

开窗函数:
开窗函数() over (partition by 列名 order by列名) 。
● partition: 需要分区的列(可不使用)
● order bye: 对分区内排序
使用方法 函数含义
row_number() over(partition by col1 order by col2) 相等的值对应的排名相同,序号从1到n连续。
rank() over(partition by col1 order by col2) 但若有并列的名称,会占用下一名次的,则序号从1到n不连续。如果有两个人都排在第3名,则没有第4名
dense_rank() over(partition by col1 order by col2) 但若有并列的名称,不会占用下一名次的,则序号从1到n连续。如果有两个人都排在第3名,则下一名还是第4名
ntile( n ) over(partition by col1 order by col2) 将每个分区内排序后的结果均分成N个桶,排序对应的数字为桶号。如果不能平均分配,则较小桶号的桶分配额外的行,并且各个桶中能放的数据条数最多相差1
for update --只要for update语句没提交 其他会话黑锅就不能修改此结果集

CREATE CONTEXT INDEX INDEX1 ON PRODUCTION.PRODUCT(DESRIPTION) LEXER CHINESE_VGRAM_LEXER; --在DESRIPTION上添加全文索引

ALTER CONTEXT INDEX INDEX1 ON PRODUCTION.PRODUCT REBULID; --完全填充全文索引

SELECT PRODUCTID,NAME FROM PRODUCTION.PRODUCT WHERE CONTAINS(DESCRIPTION,'语言') --全文检索带‘语言’

临时表:
on commit delete rows --事务级
on commit preserve rows --会话级
create table test (a int,b image);
@insert into test values(1,@'e:\DSC_1663.jpg') --插入大对象

%TYPE 类型可以将变量同表列的类型进行绑定
%ROWTYPE 返回一个基于表定义的运算类型

posted on 2022-08-04 16:03  一别正思红豆子  阅读(1763)  评论(0编辑  收藏  举报