qqwe 发表于 2018-9-14 09:24:50

oracle实用的查询语句

1.在数据字典查询约束的相关信息:  
SELECT constraint_name, constraint_type,search_condition
  
FROM      user_constraints WHERE      table_name = 'EMPLOYEES';
  
//这里的表名都是大写!
  
2对表结构进行说明:
  
desc Tablename
  
3查看用户下面有哪些表
  
select table_name from user_tables;
  
4查看约束在那个列上建立:
  
SELECT constraint_name, column_name
  
FROM      user_cons_columns
  
WHERE          table_name = 'EMPLOYEES';
  
10结合变量查找相关某个表中约束的相关列名:
  
select constraint_name,column_name from user_cons_columns where table_name = '&tablename'
  
12查询数据字典看中间的元素:
  
SELECT   object_name, object_type
  
FROM   user_objects
  
WHERE    object_name LIKE 'EMP%'
  
OR       object_name LIKE 'DEPT%'
  
14查询对象类型:
  
SELECT DISTINCT object_type FROM         user_objects ;
  
17改变对象名:(表名,视图,序列)
  
renameemp to emp_newTable
  
18添加表的注释:
  
COMMENT ON TABLE employees IS 'Employee Information';
  
20查看视图结构:
  
describe view_name
  
23在数据字典中查看视图信息:
  
select viewe_name,text from user_views
  
25查看数据字典中的序列:
  
select * from user_sequences
  
33得到所有的时区名字信息:
  
select* from v$timezone_names
  
34显示对时区‘US/Eastern’的时区偏移量
  
select TZ_OFFSET('US/Eastern') from DUAL--dual英文意思是‘双重的’
  
显示当前会话时区中的当前日期和时间:
  
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';--修改显示时间的方式的设置
  
ALTER SESSION SET TIME_ZONE = '-5:0';--修改时区
  
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;--真正有用的语句!
  
SELECT CURRENT_TIMESTAMP FROM DUAL;--返回的时间是当前日期和时间,含有时区
  
SELECT CURRENT_TIMESTAMP FROM DUAL;--返回的时间是当前日期和时间,不含有时区!!!
  
35显示数据库时区和会话时区的值:
  
select datimezone,sessiontimezone from dual;
  

  
13普通的建表语句:
  
CREATE TABLE dept
  
(deptno         NUMBER(2),
  
dname         VARCHAR2(14),
  
loc         VARCHAR2(13));
  
15使用子查询建立表:
  
CREATE TABLE         dept80
  
ASSELECTemployee_id, last_name,
  
salary*12 ANNSAL,
  
hire_date   FROM    employees   WHERE   department_id = 80;

  
6添加列://>  
alter table EMP add (dept_id number(7));
  
7删除一列:
  
alter table emp drop column dept_id;
  
8添加列名同时和约束:
  
alter table EMP add (dept_id number(7)
  
constraint my_emp_dept_id_fkreferences dept(ID));
  
9改变列://注意约束不能够修改 的!!
  
alter table dept80 modify(last_name varchar2(30));//这里使用的是modify而不是alter!
  
24增加一行:
  
insert into table_name values();
  

  
5添加主键:
  
alter Table EMPadd constraint my_emp_id_pk primary key (ID);
  
11添加一个有check约束的新列:
  
alter table EMP
  
add (COMMISSION number(2) constraint emp_commission_ck check(commission>0))
  
16删除表:
  
drop table emp;
  
19创建视图:
  
CREATE VIEW         empvu80
  
AS SELECTemployee_id, last_name, salary
  
FROM    employees   WHERE   department_id = 80;
  
21删除视图:
  
drop view view_name
  
22找到工资最高的5个人。(top-n分析)(行内视图)
  
select rownum,employee_id from (select employee_id,salary from
  
employees order by salary desc)
  
where rownum b.salavg;
  
41exists语句的使用:
  
SELECT employee_id, last_name, job_id, department_id
  
FROM   employees outer--下面的 exists里面的select选择出来的是随便的一个字符或者数字都可以
  
WHEREEXISTS ( SELECT 'X'   FROM   employees WHEREmanager_id =outer.employee_id);
  
42厉害的with语句:
  
WITH
  
dept_costsAS (--定义了一个临时的表
  
SELECTd.department_name, SUM(e.salary) AS dept_total--其间定义了一个临时的列dept_total
  
FROM    employees e, departments d
  
WHERE   e.department_id = d.department_id
  
GROUP BY d.department_name),/*注意这里有逗号*/
  
avg_cost    AS (
  
SELECT SUM(dept_total)/COUNT(*) AS dept_avg
  
FROM   dept_costs)--这里的第二张临时表里面就引用了前面定义的临时表和之间的列!
  
SELECT *FROM   dept_costsWHEREdept_total >(SELECT dept_avg   FROM avg_cost) ORDER BY department_name;---最后的查询语句中使用了前面的临时表
  
43遍历树:
  
SELECT employee_id, last_name, job_id, manager_id
  
FROM   employees
  
STARTWITHemployee_id = 101
  
CONNECT BY PRIOR manager_id = employee_id ;--自底向上的遍历树。
  

  
44.更新语句
  
UPDATE employees SET
  
job_id = 'SA_MAN', salary = salary + 1000, department_id = 120
  
WHERE first_name||' '||last_name = 'Douglas Grant';
  

  
UPDATE TABLE (SELECT projs
  
FROM dept d WHERE d.dno = 123)p
  
SET p.budgets = p.budgets + 1
  
WHERE p.pno IN (123, 456);


页: [1]
查看完整版本: oracle实用的查询语句