Oracle SQL FAQ

本文档详细介绍了 Oracle 数据库中常见的 SQL 操作,包括表、视图、索引、用户、权限等的创建与管理,以及数据类型转换、函数使用等方面的知识。
目录
Q1.怎样创建表?
Q2.怎样删除表?
Q3.怎样创建视图?
Q4.怎样删除视图?
Q5.怎样给表添加字段?
Q6.怎样删除表中某个字段?
Q7.怎样给某个字段添加约束?
Q8.怎样去除某个字段上的约束?
Q9.怎样给表加上主键?
Q10.怎样删除表的主键?
Q11.怎样给表添加一个外键?
Q12.怎样删除表的一个外键?
Q13.怎样给字段加上CHECK?
Q14.怎样去掉字段上的CHECK?
Q15.怎样给字段设置默认值?
Q16.怎样移去字段的默认值?
Q17.怎样创建索引?
Q18.怎样删除索引?
Q19.怎样创建用户?
Q20.怎样删除用户?
Q21.怎样将对象权限(object privileges)授予用户?
Q22.怎样从用户收回对象权限?
Q23.怎样将角色权限(role privileges)授予用户?
Q24.怎样从用户收回角色权限?
Q25.怎样将系统权限(system privileges)授予用户?
Q26.怎样从用户收回系统权限?
Q27.怎样创建序列?
Q28.怎样删除序列?
Q29.怎样获取序列值?
Q30.怎样创建角色?
Q31.怎样删除角色?
Q32.怎样将对象权限(object privileges)授予角色?
Q33.怎样从角色收回对象权限?
Q34.怎样将角色权限(role privileges)授予角色?
Q35.怎样从角色收回角色权限?
Q36.怎样将系统权限(system privileges)授予角色?
Q37.怎样从角色收回系统权限?
Q38.不等于条件有哪几种写法?(茴香豆问题:))
Q39.like子句的用法?
Q40.请举出一个where子查询简单例子?
Q41.Oracle常用字符串处理函数有哪些?
Q42.Oracle支持哪些数字处理函数?
Q43.怎样取得数据库服务器当前日期、时间?
Q44.怎样将字符串转换为日期、时间格式?
Q45.常用日期函数有哪些?
Q46.能给出一个DECODE函数用法的例子吗?
Q47.能给出一个group by、having和order by用法的例子吗?
Q48.Oracle有哪些常用数据字典?
Q49.怎样将日期、时间插入date型字段中?
Q50.能介绍一下connect by的用法吗?
内容
A. CREATE TABLE ROYAL_MTABLE
(
  RM_INT_FIELD INTEGER,
  RM_STR_FIELD VARCHAR2(64)
)
CREATE TABLE ROYAL_DTABLE
(
  RD_INT_FIELD INTEGER,
  RD_STR_FIELD VARCHAR2(32)
)
A. DROP TABLE ROYAL_DTABLE;
A. CREATE OR REPLACE VIEW ROYAL_MDVIEW AS
SELECT T1.RM_STR_FIELD AS F1, T2.RD_STR_FIELD AS F2 FROM ROYAL_MTABLE T1, ROYAL_DTABLE T2
WHERE T1.RM_INT_FIELD = T2.RM_INT_FIELD
A. DROP VIEW ROYAL_MDVIEW;
A. ALTER TABLE ROYAL_DTABLE ADD RM_INT_FIELD INTEGER;
A. ALTER TABLE ROYAL_DTABLE DROP COLUMN RM_INT_FIELD;
A. ALTER TABLE ROYAL_MTABLE MODIFY RM_STR_FIELD NOT NULL;
A. ALTER TABLE ROYAL_MTABLE MODIFY RM_STR_FIELD NULL;
A. ALTER TABLE ROYAL_MTABLE ADD CONSTRAINT PK_ROYAL_MTABLE PRIMARY KEY (RM_INT_FIELD);
A. ALTER TABLE ROYAL_MTABLE DROP CONSTRAINT PK_ROYAL_MTABLE CASCADE;
A. ALTER TABLE ROYAL_DTABLE ADD CONSTRAINT FK_ROYAL_DTABLE FOREIGN KEY (RM_INT_FIELD) REFERENCES ROYAL_MTABLE (RM_INT_FIELD) ON DELETE CASCADE;
A. ALTER TABLE ROYAL_DTABLE DROP CONSTRAINT FK_ROYAL_DTABLE;
A. ALTER TABLE ROYAL_MTABLE ADD CONSTRAINT CHK_RM_STR_FIELD CHECK (RM_STR_FIELD IN ('Y','N'));
A. ALTER TABLE ROYAL_MTABLE DROP CONSTRAINT CHK_RM_STR_FIELD;
A. ALTER TABLE ROYAL_DTABLE MODIFY RD_STR_FIELD DEFAULT 'ROYAL';
A. ALTER TABLE ROYAL_DTABLE MODIFY RD_STR_FIELD DEFAULT NULL;
A. CREATE UNIQUE INDEX IDX_ROYAL_DTABLE ON ROYAL_DTABLE (RM_INT_FIELD);
A. DROP INDEX IDX_ROYAL_DTABLE;
A. CREATE USER TESTUSER IDENTIFIED EXTERNALLY DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP PROFILE DEFAULT;
A. DROP USER TESTUSER CASCADE;
A. GRANT SELECT, INSERT, UPDATE, DELETE, ALTER ON ROYAL_MTABLE TO TESTUSER;
GRANT INSERT, UPDATE, DELETE ON ROYAL_DTABLE TO TESTUSER;
GRANT SELECT, ALTER ON ROYAL_DTABLE TO TESTUSER WITH GRANT OPTION;
A. REVOKE SELECT, INSERT, UPDATE, DELETE, ALTER ON ROYAL_DTABLE FROM TESTUSER;
A. GRANT CONNECT TO TESTUSER WITH ADMIN OPTION;
GRANT DBA TO TESTUSER;
A. REVOKE DBA FROM TESTUSER;
A. GRANT ALTER ANY TABLE TO TESTUSER WITH ADMIN OPTION;
A. REVOKE ALTER ANY TABLE FROM TESTUSER;
A. CREATE SEQUENCE RM_INT_FIELD_SEQ
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 10
ORDER;
A. DROP SEQUENCE RM_INT_FIELD_SEQ;
A. SELECT RM_INT_FIELD_SEQ.NEXTVAL FROM DUAL;
A. CREATE ROLE TESTROLE;
A. DROP ROLE TESTROLE;
A. GRANT SELECT, INSERT, UPDATE, DELETE, ALTER ON ROYAL_MTABLE TO TESTROLE;
A. REVOKE SELECT, INSERT, UPDATE, DELETE, ALTER ON ROYAL_MTABLE FROM TESTROLE;
A. GRANT DBA TO TESTROLE;
A. REVOKE DBA FROM TESTROLE;
A. GRANT CREATE TABLE TO TESTROLE;
A. REVOKE CREATE TABLE FROM TESTROLE;
A. SELECT * FROM ROYAL_MTABLE WHERE RM_STR_FIELD != 'Y';
SELECT * FROM ROYAL_MTABLE WHERE RM_STR_FIELD ^= 'Y';
SELECT * FROM ROYAL_MTABLE WHERE RM_STR_FIELD <> 'Y';
A. SELECT * FROM ROYAL_DTABLE WHERE RD_STR_FIELD LIKE '%Y%';
SELECT * FROM ROYAL_DTABLE WHERE RD_STR_FIELD LIKE '_Y%';
A. SELECT * FROM ROYAL_DTABLE WHERE RM_INT_FIELD IN (SELECT RM_INT_FIELD FROM ROYAL_MTABLE WHERE RM_STR_FIELD NOT IN ('Y','B'));
A. || 连接两个字符串; LENGTH  字符串长度; TRIM/LTRIM/RTRIM 截断串左(右)指定字符串(包括空串); LOWER/UPPER 将字符串转换为小/大写,等等。
例如:SELECT RM_INT_FIELD||'--'||RM_STR_FIELD||'YES' FROM ROYAL_MTABLE;
A. Oracle支持所有常用数字函数,包括(但不限于)+、-、*、/、ABS、COS、EXP、LN、LOG、MOD、POWER、ROUND、SIN、SINH、SQRT、TAN、TRUNC、AVG、COUNT、MAX、MIN、SUM、GREATEST、LEAST等等。
例如:
SELECT GREATEST(3, 4, 5)*4 FROM DUAL; 
SELECT POWER(2,3) FROM DUAL;
A. SELECT SYSDATE FROM DUAL; 
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MI:SS') FROM DUAL;
A. SELECT TO_DATE('2002-11-27', 'YYYY-MM-DD') FROM DUAL;
SELECT TO_DATE('2002-11-27 09:28:55', 'YYYY-MM-DD HH:MI:SS') FROM DUAL;
A. NEXT_DAY  LAST_DAY  ADD_MONTHS  MONTHS_BETWEEN等等。
例如:SELECT LAST_DAY(SYSDATE) FROM DUAL;
A. DECODE函数的格式为DECODE(value, if1, then1, if2, then2...,else)。假设表ROYAL_DTABLE中有如下数据:
RD_INT_FIELD RD_STR_FIELD RM_INT_FIELD
--------------------------------------
1            royal        1
2            bill         2
3            joy          1
请观察如下SQL语句输出结果。
SELECT DECODE(RD_STR_FIELD, 'royal', 'royaltest', 'bill', 'billgates', RD_STR_FIELD) AS DC FROM ROYAL_DTABLE;
DC
---------
royaltest
billgates
joy
A. SQL> SELECT * FROM ROYAL_MTABLE;

RM_INT_FIELD RM_STR_FIELD
-------------------------
1            Y
2            N
3            Y

SQL> SELECT * FROM ROYAL_DTABLE;

RD_INT_FIELD RD_STR_FIELD RM_INT_FIELD
--------------------------------------
1            royal        1
2            bill         2
3            joy          1

SQL> SELECT RM_INT_FIELD, SUM(RD_INT_FIELD) FROM ROYAL_DTABLE GROUP BY RM_INT_FIELD HAVING SUM(RD_INT_FIELD) >= 2 ORDER BY SUM(RD_INT_FIELD) ASC;

RM_INT_FIELD SUM(RD_INT_FIELD)
------------------------------
2            2
1            4

Q48.Oracle有哪些常用数据字典?
A. USER_TABLES(TABS)、USER_TAB_COLUMNS(COLS)、USER_VIEWS、USER_SEQUENCES(SEQ)、USER_CONSTRAINTS、USER_CONS_COLUMNS、USER_TAB_COMMENTS、USER_COL_COMMENTS、USER_INDEXES(IND)、USER_IND_COLUMNS、USER_USERS、DBA_USERS、ALL_USERS、USER_TABLESPACES等等。
例如:SELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_NAME = 'FK_ROYAL_DTABLE';
A. INSERT INTO ROYAL_MTABLE (RM_INT_FIELD, RM_STR_FIELD, RM_DATE_FIELD) VALUES (9, 'Y', TO_DATE('2002-05-23', 'YYYY-MM-DD'));
INSERT INTO ROYAL_MTABLE (RM_INT_FIELD, RM_STR_FIELD, RM_DATE_FIELD) VALUES (10, 'Y', TO_DATE('2002-10-10 8:23:33', 'YYYY-MM-DD HH:MI:SS'));
A. connect by子句提供了遍历“树”的手段。
假设有这样一个表:CREATE TABLE ROYAL_TREETABLE (ID INTEGER, PARENT_ID INTEGER, NAME VARCHAR2(32));
表中有如下数据:

ID PARENT_ID NAME
-----------------
2      1     AAA
3      1     BBB
4      2     CCC
5      2     DDD
6      4     EEE
8      7     GGG
假如我们现在需要从NAME = 'EEE'的记录开始,向上查找所有有父子关系的记录,可执行如下SQL语句:
SELECT * FROM ROYAL_TREETABLE START WITH NAME = 'EEE' CONNECT BY ID = PRIOR PARENT_ID;

ID PARENT_ID NAME
-----------------
6  4         EEE
4  2         CCC
2  1         AAA
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值