Oracle数据库Sql语句详解大全
ORACLE常用SQL语句大全
ORACLE常用SQL语句大全一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:/mssql7backup/MyNwind_1.dat'--- 开始备份BACKUP DATABASE pubs TO testBack4、说明:创建新表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not nul l],..)根据已有的表创建新表:A:select * into table_new from table_old (使用旧表创建新表)B:create table tab_new as select col1,col2… from tab_old definition only<仅适用于Oracle>5、说明:删除表drop table tablename6、说明:增加一个列,删除一个列A:alter table tabname add column col typeB:alter table tabname drop column colname注:DB2DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、添加主键:Alter table tabname add primary key(col)删除主键:Alter table tabname drop primary key(col)8、创建索引:create [unique] index idxname on tabname(col….)删除索引:drop index idxname注:索引是不可更改的,想更改必须删除重新建。
oracle中的sql语句
Oracle中的SQL语句主要包括以下几种:1. SELECT:用于从数据库表中查询数据。
例如:SELECT column1, column2 FROM table_name;2. INSERT INTO:用于向数据库表中插入数据。
例如:INSERT INTO table_name (column1, column2) VALUES (value1, value2);3. UPDATE:用于更新数据库表中的数据。
例如:UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;4. DELETE:用于删除数据库表中的数据。
例如:DELETE FROM table_name WHERE condition;5. CREATE TABLE:用于创建数据库表。
例如:CREATE TABLE table_name (column1 datatype,column2 datatype,...);6. ALTER TABLE:用于修改数据库表的结构。
例如:ALTER TABLE table_name ADD COLUMN column_name datatype;7. DROP TABLE:用于删除数据库表。
例如:DROP TABLE table_name;8. CREATE INDEX:用于创建索引以提高查询性能。
例如:CREATE INDEX index_name ON table_name (column_name);9. DROP INDEX:用于删除索引。
例如:DROP INDEX index_name;10. CREATE VIEW:用于创建视图,以便在不实际执行查询的情况下查看查询结果。
例如:CREATE VIEW view_name AS SELECT column1, column2 FROM table_name WHERE condition;11. DROP VIEW:用于删除视图。
最新Oracle数据库Sql语句详解大全教学讲义PPT课件
SELECT * FROM s_emp WHERE salary>1500 and dept_id=50
WHERE条件查询-BETWEEN&IN
• 请查询出s_emp表中工资在1500到2000之间的员工信息:
SELECT * FROM s_emp WHERE salary between 1500 and 2000 • 请查询出s_dept表中region_id为1,3的部门信息:
SELECT * FROM s_emp WHERE dept_id=41 ORDER BY salary DESC
SQL> SELECTlast_name, dept_id, salary
2 FROM
s_emp
3 ORDER BYdept_id, salary DESC;
小结
Where条件查询 Between…and & In & Like 模糊查询 对查询结果排序
SELECT[DISTINCT] {*, column [alias], ...}
FROM
table
[WHERE
condition(s)]
[ORDER BY{column, expr, alias} [ASC|DESC]];
第三章 单行函数
本章目标
熟悉各种类型单行函数的使用 掌握转换函数的使用
两种SQL函数
• 请查询出当前用户下所有以‘s_’开头的表: SELECT table_name FROM user_tables WHERE table_name like 'S\_%' escape '\'
Oracle数据库Sql语句详解大全
ORDER BY salary DESC
SQL> SELECTlast_name, dept_id, salary
2 FROM
s_emp
3 ORDER BYdept_id, salary DESC;
学习改变命运,知 识创造未来
Oracle数据库Sql语句详解大全
运用算数表达式
• 括号可以改变运算符运算的优先顺序:
SQL> SELECT last_name, salary, 12 * salary + 100
2 FROM
s_emp;
...
Velasquez 2500 30100
SQL> SELECT last_name, salary, 12 * (salary + 100)
SELECT [DISTINCT] {*,column[alias],...} FROM table;
学习改变命运,知 识创造未来
Oracle数据库Sql语句详解大全
引言
学习改变命运,知 识创造未来
Oracle数据库Sql语知 识创造未来
Oracle数据库Sql语句详解大全
小结
Where条件查询 Between…and & In & Like 模糊查询 对查询结果排序
SELECT[DISTINCT] {*, column [alias], ...}
FROM
table
[WHERE
condition(s)]
[ORDER BY{column, expr, alias} [ASC|DESC]];
返回日期所在月的最后一天
oracle常用的sql语句
一、简介Oracle是一种常见的数据库管理系统,广泛应用于各类企业和组织中。
在Oracle数据库中,SQL语句是对数据库进行操作的重要工具。
本文将介绍Oracle常用的SQL语句,包括查询、插入、更新、删除等操作,以帮助读者更好地理解和应用这些语句。
二、查询数据1. SELECT语句SELECT语句用于从数据库中检索数据,语法如下:```sqlSELECT column1, column2, ...FROM table_nameWHERE condition;```其中,column1, column2是要检索的列名,可以使用*代表所有列;table_name是要检索的表名;condition是筛选条件,可选。
2. DISTINCT关键字DISTINCT关键字用于返回唯一不同的值,语法如下:```sqlSELECT DISTINCT column1, column2, ...FROM table_name;```3. WHERE子句WHERE子句用于筛选满足条件的数据,可使用运算符(=、>、<等)和逻辑运算符(AND、OR、NOT等),语法如下:```sqlSELECT column1, column2, ...FROM table_nameWHERE condition1 AND condition2;```4. ORDER BY子句ORDER BY子句用于对结果集进行排序,语法如下:```sqlSELECT column1, column2, ...FROM table_nameORDER BY column1 DESC;```其中,DESC代表降序,ASC代表升序,默认为升序。
5. GROUP BY子句GROUP BY子句用于对结果集进行分组统计,常与聚合函数一起使用,语法如下:```sqlSELECT column1, SUM(column2)FROM table_nameGROUP BY column1;```三、插入、更新和删除数据1. INSERT INTO语句INSERT INTO语句用于向数据库中插入新记录,语法如下:```sqlINSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);```2. UPDATE语句UPDATE语句用于更新数据库中的记录,语法如下:```sqlUPDATE table_nameSET column1 = value1, column2 = value2, ... WHERE condition;```3. DELETE语句DELETE语句用于删除数据库中的记录,语法如下:```sqlDELETE FROM table_nameWHERE condition;```四、连接表和子查询1. JOIN子句JOIN子句用于连接多个表的数据,常用的有INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN。
Oracle数据库常用Sql语句大全
Oracle数据库常用Sql语句大全最简单的就是查询:select语句数据库操作语言DML:update、insert、delete等数据库定义语言DDL:create、drop、alter等等oracle取前几条数据语句sqlserver中可以用top n 的方法,oracle中用rownum,但如果只用rownum会随机取数据,如果想按一定顺序取前几条数据则可这样写:select * from (select列 from 表 where 条件 order by列 desc) where rownum<>select * from (select rownum r ,* from test) ttwhere tt.r 50 and tt.r <= 100;=””>这样子写是会全表扫描的的,小的表不觉得会有多慢,数据量大了你就知道有多不好了,改成这样就不会了oracle怎幺写”IF”语句?如果是 SQL 语句里面使用。
使用 DECODE 或者 CASE WHENDECODE 的用法就是DECODE(abc, 50, 'A’, 'B’)CASE WHEN 的用法就是CASE WHEN abc=50 THEN 'A’ ELSE 'B’ END如果是在存储过程里面的话,就是简单的 IF/ELSE 了SQL 语句的话,就是SELECTabc, DECODE(abc, 50, 'A’, 'B’)FROM表什幺是oracle实例,写出在oracle如何查找实例名的sql语句oracle数据库实例(instance_name)是用于和操作系统进行联系的标识,也就是说数据库和操作系统之间的交互使用的是数据库实例。
数据库名和实例名可以相同也可以不同。
在一般情况下,数据库名和实例名是一对一的关系,但如果在oracle并行服务器架构(即oracle实时应用集群)中,数据库名和实例名是一对多的关系。
Oracle-sql语句收集整理大全
∙ 帆软(中国)有限公司∙ 商务咨询电话:86-025-5186 2240∙ 商务咨询邮箱:business@ ∙公司网址:Oracle-sql 语句收集整理大全感谢FineReport 提供的材料和整理 FineReport ——报表技术领跑者 说明:复制表(只复制结构,源表名:a 新表名:b)SQL: select * into b from a where 1<>1说明:拷贝表(拷贝数据,源表名:a 目标表名:b)SQL: insert into b(a, b, c) select d,e,f from b;说明:显示文章、提交人和最后回复时间SQL: select a.title,ername,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b说明:外连接查询(表名1:a 表名2:b)SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c 说明:日程安排提前五分钟提醒SQL: select * from 日程安排 where datediff('minute',f 开始时间,getdate())>5说明:两张关联表,删除主表中已经在副表中没有的信息SQL:delete from info where not exists ( select * from infobz whereinfo.infid=infobz.infid )∙帆软(中国)有限公司∙商务咨询电话:86-025-5186 2240∙商务咨询邮箱:business@ ∙公司网址:说明:--SQL:SELECT A.NUM, , B.UPD_DATE, B.PREV_UPD_DATE FROM TABLE1,(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATEPREV_UPD_DATE FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND FROM TABLE2 WHERETO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE,'YYYY/MM')) X, (SELECT NUM, UPD_DATE, STOCK_ONHANDFROM TABLE2 WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') ¦¦ '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y,WHERE X.NUM = Y.NUM (+)AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B WHEREA.NUM =B.NUM说明:--SQL:select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源地,高考总成绩说明: 从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)SQL:SELECT erper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear, SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN, SUM(decode(TO_CHAR(a.telfeedate,'mm'), '02', a.factration)) AS FRI,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration))AS MAR, SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04',a.factration)) AS APR, SUM(decode(TO_CHAR(a.telfeedate,'mm'), '05', a.factration)) AS MAY,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07',a.factration)) AS JUL, SUM(decode(TO_CHAR(a.telfeedate,∙帆软(中国)有限公司∙商务咨询电话:86-025-5186 2240∙商务咨询邮箱:business@ ∙公司网址:'mm'), '08', a.factration)) AS AGU,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP, SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10',a.factration)) AS OCT, SUM(decode(TO_CHAR(a.telfeedate,'mm'), '11', a.factration)) ASNOV,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12',a.factration)) AS DEC FROM (SELECT erper, a.tel, a.standfee,b.telfeedate, b.factration FROM TELFEESTAND a, TELFEE b WHERE a.tel = b.telfax) a GROUP BY erper, a.tel, a.standfee,TO_CHAR(a.telfeedate, 'yyyy')说明:四表联查问题:SQL: select * from a left inner join b on a.a=b.b right inner join c ona.a=c.c inner join d on a.a=d.d where .....说明:得到表中最小的未使用的ID号SQL:SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHEREb.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) asHandleID FROM Handle WHERE NOT HandleID IN (SELECTa.HandleID - 1 FROM Handle a)一、简单查询简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。
ORACLE基本SQL语句
ORACLE基本定义、操作语句一、表1.创建表CREATE TABLE TAB_NAME(COL_01 V ARCHAR2(10) NOT NULL,COL_02 NUMBER(8,2),COL_03 DATE);2.添加主键约束ALTER TABLE TAB_NAME ADD CONSTRAINT PK_COL_01 PRIMARY KEY(COL_01); 3.添加唯一性约束ALTER TABLE TAB_NAME ADD CONSTRAINT UK_COL_02 UNIQUE(COL_02);4.添加外键约束ALTER TABLE TAB_NAME ADD CONSTRAINT FK_COL0_03 FOREIGN KEY(COL_03) REFERENCES TAB_2(COL_03);5.添加check约束ALTER TABLE TAB_NAME ADD CONSTRAINT CHK_COL_03 CHECK(COL_01 <> ‘ABC’);6.创建索引――创建唯一索引CREATE UNIQUE INDEX IDX_NAME ON TAB_NAME(COL_01);――创建非唯一索引CREATE INDEX IDX_NAME ON TAB_NAME(COL_01);7.给表添加一个新列ALTER TABLE TAB_NAME ADD COL_04 V ARCHAR2(10);8.修改列的数据类型ALTER TABLE TAB_NAME MODIFY COL_04 NUMBER(8);9.删除一列ALTER TABLE TAB_NAME DROP COLUMN COL_04;10.更改表的名称ALTER TABLE TAB_NAME RENAME TO TAB_NEW_NAME;11.更改表的列名ALTER TABLE TAB_NAME RENAME COLUMN COL_04 TO COL_05;12.给表和列添加注释说明--add comments to the tableCOMMENT ON TABLE TAB_NAME IS‘示例表’;--add comments to the columnCOMMENT ON COLUMN TAB_NAME.COL_01 IS‘列名’;13.删除表DROP TABLE TAB_NAME;14.MERGEmerge into tj_test1 tt1using tj_test tton (tt1.id=tt.id)when matched thenupdate set=,tt1.age=tt.agewhen not matched theninsert values(tt.id,,tt.age)alter table Tab_Name modify(字段varchar(20), 字段varchar(50));二、视图1.创建视图CREATE OR REPLACE VIEW VW_NAME ASSELECT A.COL_01,A.COL_02,A.COL_03,B.COL_04FROM TAB_ONE A,TAB_TWO BWHERE A.COL_01 = B.COL_01;三、序列1.创建序列CREATE SEQUENCE SQ_NAMEINCREMENT BY 10 --序列增量START WITH 20 --开始值MAXV ALUE 1000 --最大值MINV ALUE 20 --最小值NOCACHE /*如果要指定cache给序列,应该写成CACHE N其中N为要指定的数值*/NOCYCLE; /*如果序列到了最大值还要继续取值,就写成CYCLE*/2.修改序列ALTER SEQUENCE SQ_NAMEINCREMENT BY 10 --序列增量START WITH 20 --开始值MAXV ALUE 1000 --最大值MINV ALUE 20 --最小值CACHE 5CYCLE;注:如果想要按不同的值从新开始一个序列,该序列必须删掉重建四、同义词1.创建同义词CREATE SYNONYM SY_NAME FOR TAB_NAME;五、函数创建函数CREATE OR REPLACE FUNCTION FN_NAME([参数1],[参数2],[…..]) RETURN return_typeAS--定义变量BEGIN--函数内容Return [返回值];END;六、存储过程创建过程CREATE OR REPLACE PROCEDURE SP_NAME([参数1],[参数2],[…..]) AS--定义变量BEGIN--过程内容END;七、触发器创建过程CREATE OR REPLACE TRIGGER TR_NAMEAFTER[BEFORE ] [INSERT/UPDATE/DROP] ON TAB_NAMEREFERENCING OLD AS old NEW AS newFOR EACH ROWDECLARE--定义变量BEGIN--触发器内容END;八、包和包体创建包CREATE OR REPLACE PACKAGE PK_NAMEAS--包内容END PK_NAME;创建保体CREATE OR REPLACE PACKAGE BODY PK_NAMEAS--包体的内容END PK_NAME;九、用户1.创建一个用户CREATE USER USR_NAMEIDENTIFIED BY PASSWORDDEFAULT TABLESPACE TAB_SPACE_NAMETEMPORARY TABLESPACE TMP_TABSPACE_NAMEPROFILE DEFAULT;2.给该用户授权GRANT权限类型TO USR_NAME;3.撤销用户权限REVOKE权限类型FROM USR_NAME;4.修改用户密码ALTER USER USR_NAME IDENTIFIED BY NEW_PSD;5.设定用户缺省的角色ALTER USER USR_NAME DEFAULT ROLE ROLE_NAME;设定缺省角色后,用户登陆后就只有该缺省的角色权限了。
OracleSQL语法大全
1. 对于日期型数据, 做*, / 运算不合法2. 包含空值的数学表达式的值都为空值3. 别名使用双引号!4. oracle 中连接字符串使用"||", 而不是java 中的"+"5. 日期和字符只能在单引号中出现. 输出last_name`s email is emailselect last_name || ' `s email is ' || emailfrom employees6. distinct 关键字, 以下语法错误select last_name, distinct department_idfrom employees7. WHERE 子句紧随FROM 子句8. 查询last_name 为'King' 的员工信息错误1: King 没有加上单引号select first_name, last_namefrom employeeswhere last_name = King错误2: 在单引号中的值区分大小写select first_name, last_namefrom employeeswhere last_name = 'king'正确select first_name, last_namefrom employeeswhere last_name = 'King'9. 查询1998-4-24 来公司的员工有哪些?注意: 日期必须要放在单引号中, 且必须是指定的格式select last_name, hire_datefrom employeeswhere hire_date = '24-APR -98'10. 查询工资在5000 -- 10000 之间的员工信息.1). 使用ANDselect *from employeeswhere salary >= 5000 and salary <= 100002). 使用BETWEEN .. AND .., 注意: 包含边界!!select *from employeeswhere salary between 5000 and 1000011. 查询工资等于6000, 7000, 8000, 9000, 10000 的员工信息1). 使用ORselect *from employeeswhere salary = 6000 or salary = 7000 or salary = 8000 or salary = 9000 or salary = 100002). 使用INselect *from employeeswhere salary in (6000, 7000, 8000, 9000, 10000)12. 查询LAST_NAME 中有'o' 字符的所有员工信息.select *from employeeswhere last_name like '%o%'13. 查询LAST_NAME 中第二个字符是'o' 的所有员工信息.select *from employeeswhere last_name like '_o%'14. 查询LAST_NAME 中含有'_' 字符的所有员工信息1). 准备工作:update employeesset last_name = 'Jones_Tom'where employee_id = 1952). 使用escape 说明转义字符.select *from employeeswhere last_name like '%\_%' escape '\'15. 查询COMMISSION_PCT 字段为空的所有员工信息select last_name, commission_pctfrom employeeswhere commission_pct is null16. 查询COMMISSION_PCT 字段不为空的所有员工信息select last_name, commission_pctfrom employeeswhere commission_pct is not null17. ORDER BY:1). 若查询中有表达式运算, 一般使用别名排序2). 按多个列排序: 先按第一列排序, 若第一列中有相同的, 再按第二列排序.18. 打印出"2009年10月14日9:25:40" 格式的日期和时间.select to_char(sysdate, 'YYYY"年"MM"月"DD"日" HH:MI:SS')from dual注意: 使用双引号向日期中添加字符19. 格式化数字: 1234567.89 为1,234,567.89select to_char(1234567.89, '999,999,999.99')from dual20. 字符串转为数字时1). 若字符串中没有特殊字符, 可以进行隐式转换:select '1234567.89' + 100from dual2). 若字符串中有特殊字符, 例如'1,234,567.89', 则无法进行隐式转换, 需要使用to_number() 来完成select to_number('1,234,567.89', '999,999,999.99') + 100from dual21. 对于把日期作为查询条件的查询, 一般都使用to_date() 把一个字符串转为日期, 这样可以不必关注日期格式select last_name, hire_datefrom employeeswhere hire_date = to_date('1998-5-23', 'yyyy-mm-dd')22. 转换函数: to_char(), to_number(), to_date()23. 查询每个月倒数第2 天入职的员工的信息.select last_name, hire_datefrom employeeswhere hire_date = last_day(hire_date) - 224. 计算公司员工的年薪--错误写法: 因为空值计算的结果还是空值select last_name, salary * 12 * (1 + commission_pct) year_salfrom employees--正确写法select last_name, salary * 12 * (1 + nvl(commission_pct, 0)) year_salfrom employees25. 查询部门号为10, 20, 30 的员工信息, 若部门号为10, 则打印其工资的1.1 倍, 20 号部门, 则打印其工资的1.2 倍, 30 号部门打印其工资的1.3 倍数--使用case-when-then-else-endselect last_name, department_id, salary, case department_id when 10 then salary * 1.1when 20 then salary * 1.2when 30 then salary * 1.3end new_salfrom employeeswhere department_id in (10, 20, 30)--使用decodeselect last_name, department_id, salary, decode(department_id, 10, salary * 1.1,20, salary * 1.2,30, salary * 1.3) new_salfrom employeeswhere department_id in (10, 20, 30)26. 多表连接查询时, 若两个表有同名的列, 必须使用表的别名对列名进行引用, 否则出错!27. 查询出公司员工的last_name, department_name, cityselect last_name, department_name, cityfrom departments d, employees e, locations lwhere d.department_id = e.department_id and d.location_id = l.location_id28. 查询出last_name 为'Chen' 的manager 的信息. (员工的manager_id 是某员工的employee_id)0). 例如: 老张的员工号为: "1001", 我的员工号为: "1002",我的manager_id 为"1001" --- 我是manager 是"老张"1). 通过两条sql 查询:select manager_idfrom employeeswhere lower(last_name) = 'chen' --返回的结果为108select *from employeeswhere employee_id = 1082). 通过一条sql 查询(自连接):select m.*from employees e, employees mwhere e.manager_id = m.employee_id and st_name = 'Chen'3). 通过一条sql 查询(子查询):select *from employeeswhere employee_id = (select manager_idfrom employeeswhere last_name = 'Chen')29. 查询每个员工的last_name 和GRADE_LEVEL(在JOB_GRADES 表中). ---- 非等值连接select last_name, salary, grade_level, lowest_sal, highest_salfrom employees e, job_grades jwhere e.salary >= j.lowest_sal and e.salary <= j.highest_sal30. 左外连接和右外连接select last_name, e.department_id, department_namefrom employees e, departments dwhere e.department_id = d.department_id(+)select last_name, d.department_id, department_namefrom employees e, departments dwhere e.department_id(+) = d.department_id理解"(+)" 的位置: 以左外连接为例, 因为左表需要返回更多的记录,右表就需要"加上" 更多的记录, 所以在右表的链接条件上加上"(+)"注意: 1). 两边都加上"(+)" 符号, 会发生语法错误!2). 这种语法为Oracle 所独有, 不能在其它数据库中使用.31. SQL 99 链接Employees 表和Departments 表1).select *from employees join departmentsusing(department_id)缺点: 要求两个表中必须有一样的列名.2).select *from employees e join departments don e.department_id = d.department_id3).多表链接select st_name, d.department_name, l.cityfrom employees e join departments don e.department_id = d.department_idjoin locations lon d.location_id = l.location_id32. SQL 99 的左外连接, 右外连接, 满外连接1).select last_name, department_namefrom employees e left join departments don e.department_id = d.department_id2).select last_name, department_namefrom employees e right join departments don e.department_id = d.department_id3).select last_name, department_namefrom employees e full join departments don e.department_id = d.department_id33. 查询employees 表中有多少个部门select count(distinct department_id)from employees34. 查询全公司奖金基数的平均值(没有奖金的人按0 计算)select avg(nvl(commission_pct, 0))from employees35. 查询各个部门的平均工资--错误: avg(salary) 返回公司平均工资, 只有一个值; 而department_id 有多个值, 无法匹配返回select department_id, avg(salary)from employees**在SELECT 列表中所有未包含在组函数中的列都应该包含在GROUP BY 子句中--正确: 按department_id 进行分组select department_id, avg(salary)from employeesgroup by department_id36. Toronto 这个城市的员工的平均工资select avg(salary), cityfrom employees e join departments don e.department_id = d.department_idjoin locations lon d.location_id = l.location_idwhere city = 'Toronto'group by city37. (有员工的城市)各个城市的平均工资select avg(salary), cityfrom employees e join departments don e.department_id = d.department_idjoin locations lon d.location_id = l.location_idgroup by city38. 查询平均工资高于8000 的部门id 和它的平均工资.--错误: 先过滤, 后分组. 但在过滤时, 还没有分组, 所以无法使用组函数的结果select department_id, avg(salary) avg_salfrom employeeswhere avg_sal > 8000group by department_id** 不能在WHERE 子句中使用组函数!! 可以在HAVING 子句中使用组函数select department_id, avg(salary) avg_salfrom employeesgroup by department_idhaving avg(salary) > 800039. 查询平均工资高于6000 的job_title 有哪些select job_titlefrom jobs j join employees eon j.job_id = e.job_idgroup by job_titlehaving avg(salary) > 600040. 谁的工资比Abel 高?1). 写两条SQL 语句.SELECT salaryFROM employeesWHERE last_name = 'Abel'--返回值为11000SELECT last_name, salaryFROM employeesWHERE salary > 110002). 使用子查询-- 一条SQL 语句SELECT last_name, salaryFROM employeesWHERE salary > (SELECT salaryFROM employeesWHERE last_name = 'Abel')41. 子查询注意:1). 子查询要包含在括号内2). 将子查询放在比较条件的右侧42. 查询工资最低的员工信息: last_name, salarySELECT last_name, salaryFROM employeesWHERE salary = (SELECT min(salary)FROM employees)43. 查询平均工资最低的部门信息SELECT *FROM departmentsWHERE department_id = (SELECT department_idFROM employeesGROUP BY department_idHAVING avg(salary) = (SELECT min(avg(salary))FROM employeesGROUP BY department_id)44. 查询平均工资最高的job 信息1). 按job_id 分组, 查询最高的平均工资SELECT max(avg(salary))FROM employeesGROUP BY job_id2). 查询出平均工资等于1) 的job_idSELECT job_idFROM employeesGROUP BY job_idHAVING avg(salary) = (SELECT max(avg(salary))FROM employeesGROUP BY job_id)3). 查询出2) 对应的job 信息SELECT *FROM jobsWHERE job_id = (SELECT job_idFROM employeesGROUP BY job_idHAVING avg(salary) = (SELECT max(avg(salary))FROM employeesGROUP BY job_id))45. 查询平均工资高于公司平均工资的部门有哪些?1). 查询出公司的平均工资SELECT avg(salary)FROM employees2). 查询平均工资高于1) 的部门IDSELECT department_idFROM employeesGROUP BY department_idHAVING avg(salary) > (SELECT avg(salary)FROM employees)46. 查询出公司中所有manager 的详细信息.1). 查询出所有的manager_idSELECT distinct manager_idFROM employeess2). 查询出employee_id 为1) 查询结果的那些员工的信息SELECT employee_id, last_nameFROM employeesWHERE employee_id in (SELECT distinct manager_idFROM employees)47. 各个部门中最高工资中最低的那个部门的最低工资是多少1). 查询出各个部门的最高工资SELECT max(salary)FROM employeesGROUP BY department_id2). 查询出1) 对应的查询结果的最低值: 各个部门中最低的最高工资(无法查询对应的department_id)SELECT min(max(salary))FROM employeesGROUP BY department_id3). 查询出2) 所对应的部门id 是多少: 各个部门中最高工资等于2) 的那个部门的idSELECT department_idFROM employeesGROUP BY department_idHAVING max(salary) = (SELECT min(max(salary))FROM employeesGROUP BY department_id)4). 查询出3) 所在部门的最低工资SELECT min(salary)FROM employeesWHERE department_id = (SELECT department_idFROM employeesGROUP BY department_idHAVING max(salary) = (SELECT min(max(salary))FROM employeesGROUP BY department_id))48. 查询平均工资最高的部门的manager 的详细信息: last_name, department_id, email, salary1). 各个部门中, 查询平均工资最高的平均工资是多少SELECT max(avg(salary))FROM employeesGROUP BY department_id2). 各个部门中, 平均工资等于1) 的那个部门的部门号是多少SELECT department_idFROM employeesGROUP BY department_idHAVING avg(salary) = (SELECT max(avg(salary))FROM employeesGROUP BY department_id)3). 查询出2) 对应的部门的manager_idSELECT manager_idFROM departmentsWHERE department_id = (SELECT department_idFROM employeesGROUP BY department_idHAVING avg(salary) = (SELECT max(avg(salary))FROM employeesGROUP BY department_id))4). 查询出employee_id 为3) 查询的manager_id 的员工的last_name, department_id, email, salarySELECT last_name, department_id, email, salaryFROM employeesWHERE employee_id = (SELECT manager_idFROM departmentsWHERE department_id = (SELECT department_idFROM employeesGROUP BY department_idHAVING avg(salary) = (SELECT max(avg(salary))FROM employeesGROUP BY department_id)))49. 查询1999 年来公司的人所有员工的最高工资的那个员工的信息.1). 查询出1999 年来公司的所有的员工的salarySELECT salaryFROM employeesWHERE to_char(hire_date, 'yyyy') = '1999'2). 查询出1) 对应的结果的最大值SELECT max(salary)FROM employeesWHERE to_char(hire_date, 'yyyy') = '1999'3). 查询工资等于2) 对应的结果且1999 年入职的员工信息SELECT *FROM employeesWHERE to_char(hire_date, 'yyyy') = '1999' AND salary = (SELECT max(salary)FROM employeesWHERE to_char(hire_date, 'yyyy') = '1999')50. 多行子查询的any 和allselect department_idfrom employeesgroup by department_idhaving avg(salary) >= any (--所有部门的平均工资select avg(salary)from employeesgroup by department_id)any 和任意一个值比较, 所以其条件最为宽松, 所以实际上只需和平均工资最低的比较, 返回所有值而all 是和全部的值比较, 条件最为苛刻, 所以实际上返回的只需和平均工资最高的比较, 所以返回平均工资最高的department_id51. 利用子查询创建表myemp, 该表中包含employees 表的employee_id(id), last_name(name), salary(sal), email 字段1). 创建表的同时复制employees 对应的记录create table myempasselect employee_id id, last_name name, salary sal, email from employees2). 创建表的同时不包含employees 中的记录, 即创建一个空表create table myempasselect employee_id id, last_name name, salary sal, email from employees where 1 = 252. 对现有的表进行修改操作1). 添加一个新列ALTER TABLE myemp ADD(age number(3))2). 修改现有列的类型ALTER TABLE myemp MODIFY(name varchar2(30));3). 修改现有列的名字ALTER TABLE myemp RENAME COLUMN sal TO salary;4). 删除现有的列ALTER TABLE myemp DROP COLUMN age;53. 情空表, 不能回滚!!54. 复制employees 表中100 号部门的信息到emp 中新建emp 表, 其表结构为:Name Type Nullable Default Comments--------- ------------ -------- ------- --------NAME VARCHAR2(25)EMAIL VARCHAR2(25)SAL NUMBER(8,2) YHIRE_DATE DATE Ycreate table emp as select last_name name, email, salary sal, hire_date from employees where 1 = 2;insert into emp select last_name name, email, salary sal, hire_date from employees where department_id = 100;55. 更改108 员工的信息: 使其工资变为所在部门中的最高工资, job 变为公司中平均工资最低的job1). 搭建骨架update employees set salary = (), job_id = () where employee_id = 108;2). 所在部门中的最高工资select max(salary)from employeeswhere department_id = (select department_idfrom employeeswhere employee_id = 108)3). 公司中平均工资最低的jobselect job_idfrom employeesgroup by job_idhaving avg(salary) = (select min(avg(salary))from employeesgroup by job_id)4). 填充update employees set salary = (select max(salary)from employeeswhere department_id = (select department_idfrom employeeswhere employee_id = 108)), job_id = (select job_idfrom employeesgroup by job_idhaving avg(salary) = (select min(avg(salary))from employeesgroup by job_id)) where employee_id = 108;56. 删除108 号员工所在部门中工资最低的那个员工.1). 查询108 员工所在的部门idselect department_idfrom employeeswhere employee_id = 108;2). 查询1) 部门中的最低工资select min(salary)from employeeswhere department_id = (select department_idfrom employeeswhere employee_id = 108;)3). 删除1) 部门中工资为2) 的员工信息delete from employees where salary = (select min(salary)from employeeswhere department_id = (select department_idfrom employeeswhere employee_id = 108)) and department_id = (select department_idfrom employeeswhere employee_id = 108)57. 定义非空约束1). 非空约束只能定义在行级.2). 不指定约束名create table emp2 (name varchar2(30) not null, age number(3));3). 指定约束名create table emp3(name varchar2(30) constraint name_not_null not null, age number(3));58. 唯一约束1). 行级定义①. 不指定约束名create table emp2 (name varchar2(30) unique, age number(3));②. 指定约束名create table emp3 (name varchar2(30) constraint name_uq unique, age number(3));2). 表级定义: 必须指定约束名①. 指定约束名create table emp3 (name varchar2(30), age number(3) constraint name_uq unique(name));59. 外键约束1). 行级定义①. 不指定约束名create table emp2(emp_id number(6),name varchar2(25),dept_id number(4) references dept2(dept_id))②. 指定约束名create table emp3(emp_id number(6),name varchar2(25),dept_id number(4) constraint dept_fk3 references dept2(dept_id))2). 表级定义: 必须指定约束名①. 指定约束名create table emp4(emp_id number(6),name varchar2(25),dept_id number(4),constraint dept_fk2 foreign key(dept_id) references dept2(dept_id))60. 约束需要注意的地方1). ** 非空约束只能定义在列级2). ** 唯一约束的列值可以为空3). ** 外键引用的列起码要有一个唯一约束61. 建立外键约束时的级联删除问题:1). 级联删除:create table emp2(id number(3) primary key,name varchar2(25) unique,dept_id references dept2(dept_id) on delete cascade)2). 级联置空create table emp3(id number(3) primary key,name varchar2(25) unique,dept_id references dept2(dept_id) on delete set null)62. 查询员工表中salary 前10 的员工信息.select last_name, salaryfrom (select last_name, salary from employees order by salary desc)where rownum <= 10说明: rownum "伪列" ---- 数据表本身并没有这样的列, 是oracle 数据库为每个数据表"加上的" 列. 可以标识行号.默认情况下rownum 按主索引来排序. 若没有主索引则自然排序.注意: **对ROWNUM 只能使用< 或<=, 而是用=, >, >= 都将不能返回任何数据.63. 查询员工表中salary 10 - 20 的员工信息.select *from(select rownum rn, temp.*from (select last_name, salaryfrom employees eorder by salary desc) temp)where rn > 10 and rn < 2164. 对oralce 数据库中记录进行分页: 每页显示10 条记录, 查询第5 页的数据select employee_id, last_name, salaryfrom (select rownum rn, employee_id, last_name, salaryfrom employees) ewhere e.rn <= 50 and e.rn > 40注意: **对oracle 分页必须使用rownum "伪列"!select employee_id, last_name, salaryfrom (select rownum rn, employee_id, last_name, salaryfrom employees) ewhere e.rn <= pageNo * pageSize and e.rn > (pageNo - 1) * pageSize65. 序列通常用来生成主键:INSERT INTO emp2 VALUES (emp2_seq.nextval, 'xx', ...)66.。
oracle的sql语句
oracle的sql语句Oracle的SQL语句可以用于查询、插入、更新和删除数据库中的数据。
以下是一些常见的Oracle SQL语句示例:1. 查询数据:- 查询所有记录:SELECT * FROM 表名;- 查询指定列:SELECT 列名1, 列名2 FROM 表名;- 带条件查询:SELECT * FROM 表名 WHERE 条件;- 排序查询:SELECT * FROM 表名 ORDER BY 列名ASC/DESC;- 分组查询:SELECT 列名, COUNT(*) FROM 表名GROUP BY 列名;2. 插入数据:- 插入单条记录:INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);- 插入多条记录:INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2), (值3, 值4), ...;3. 更新数据:- 更新单个字段:UPDATE 表名 SET 列名 = 新值WHERE 条件;- 更新多个字段:UPDATE 表名 SET 列名1 = 新值1, 列名2 = 新值2 WHERE 条件;4. 删除数据:- 删除所有记录:DELETE FROM 表名;- 删除满足条件的记录:DELETE FROM 表名 WHERE 条件;5. 聚合函数:- 计算总数:SELECT COUNT(*) FROM 表名;- 计算平均值:SELECT AVG(列名) FROM 表名;- 计算最大值:SELECT MAX(列名) FROM 表名;- 计算最小值:SELECT MIN(列名) FROM 表名;- 计算求和:SELECT SUM(列名) FROM 表名;这些只是一些常见的Oracle SQL语句示例,实际使用中还可以结合其他语句和函数进行更复杂的查询和操作。
SQL ORACLE查询语句大全集锦
SQL查询语句大全集锦一、简单查询简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。
它们分别说明所查询列、查询的表或视图、以及搜索条件等。
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。
代码:SELECT `nickname`,`email`FROM `testtable`WHERE `name`='张三'(一) 选择列表选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
1、选择所有列例如,下面语句显示testtable表中所有列的数据:代码:SELECT * FROM testtable2、选择部分列并指定它们的显示次序查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如:代码:SELECT nickname,email FROM testtable3、更改列标题在选择列表中,可重新指定列标题。
定义格式为:列标题=列名列名列标题如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:代码:SELECT 昵称=nickname,电子邮件=email FROM testtable4、删除重复行SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。
使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。
5、限制返回的行数使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT 时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
例如:代码:SELECT TOP 2 * FROM `testtable`代码:SELECT TOP 20 PERCENT * FROM `testtable`(二) FROM子句FROM子句指定SELECT语句查询及与查询相关的表或视图。
Oracle数据库Sql语句详解大全
WHERE条件查询-like
• 请查询出s_emp表中姓中含有字母a的员工信息: SELECT * FROM s_emp WHERE last_name like '%a%'
• 请查询出s_emp表姓中第二个字母为a的员工信息: SELECT * FROM s_emp WHERE last_name like ‘_a%'
'11-JUL-94‘
NEXT_DAY('01-SEP-95','FRIDAY') '08-SEP-95‘
LAST_DAY('01-SEP-95')
'30-SEP-95'
日期函数
ROUND('25-MAY-95','MONTH') 95 ROUND('25-MAY-95 ','YEAR') TRUNC('25-MAY-95 ','MONTH') TRUNC('25-MAY-95 ','YEAR')
日期格式
DY DAY D DD W WW,IW MM MON MONTH YYYY,YYY,YY, Y YEAR RR HH,HH12 HH24 MI SS
星期几的缩写 星期几的全拼 一周的星期几,星期天=1,星期六=7 一月的第几天,131 一个月的第几周,1 5 一年的第几周,一年的ISO的第几周 两为数的月 月份的缩写 月份的全拼 四位数的年,三位数的年
拼接两个字符串,与 || 相同 取字符串的子串 以字符给出字符串的长度 以一个值来替换空值
Oracle_SQL语句大全
Oracle SQL语句大全2009‐04‐13 15:391.desc(描述) emp 描述emp这张表2.desc dept 部门表3.desc salgrade 薪水等级4.select *from table 查找表中的元素5.dual 是系统中的一张空表6.select *from dual7.select sysdate from dual 取出系统时间8.select ename,sal*12 "annul sal"(取的别名) from emp; 查找用户姓名和用户的年薪9.任何含有空值的数学表达式的值都是空值select ename,sal*12+comm from emp;10.select ename||sal from emp 其中的||相当于将sal全部转化为字符串11.表示字符串的方法select ename ||'ajjf' from emp;12.如果其中有一个单引号就用2个单引号来代替他select ename||'sakj' 'lds'from emp;13.select distinct deptno from emp (去除部门字段中重复的部分,关键字distinct)14.select distinct deptno,job from emp;(去除这2个字段中重复的组合)15.select *from dept where deptno=10; 取出条件(取出部门编号为10的记录)16.select * from emp where ename='CLIRK'; 取出部门中姓名为clirk的记录(注意取出过程中ename用单引号隔开)17.select ename,sal from emp where sal>1500; 取出部门中薪水大于1500的人的姓名18.select ename,sal,deptno from emp where deptno<> 10 取出部门中的部门号不等于10的19.select ename,sal,deptno from emp where ename>'CBA' 取出部门中员工名字大于CBA的员工(实际比较的是ACIIS码)20.select ename,sal from emp where sal between 800 and 1500select ename,sal from emp where sal>=800 and sal<=1500; (取出800和1500之间的数)21.select ename,sal,comm from emp where comm is null (选出其中的空值)select enmae,sal,comm from emp where comm is not null(选出其中的非空值) 22.select ename,sal,comm from emp where sal in (800,1500,2000);取出这3者之中的select ename,sal,comm from emp where ename in('simth');23.select ename,sal,hiredate from emp where hiredata>'3‐04月‐81';宣传符合条件的日期24.select ename,sal,from emp where sal>1000 or deptno=10; 找出工资薪水大于1000或者部门号等于10的员工25.select ename,sal from emp where sal not in(500,1000); 查找薪水不在500到1000的员工姓名和月薪26.select ename,sal from emp where ename like '%ALL%';select ename,sal from emp where ename like '_%A%'; 查找姓名中含有ALL的客户信息,一个横线代表一个通配符27.select ename,sal from emp where ename like '_%$%%' escape '$'; 自己指定转易字符select ename,sal from emp where ename like '_%\%%'; 查找中间含有%相匹配的客户信息,运用转易字符28.select * from dept order by deptno 对表中元素按部门号排序select *from dept order by deptno desc 默认为升序,可以用desc按降序29.select ename,sal from emp where sal <>1000 order by sal desc 按照查询条件来查询,并排序(asc升序排列)30.select ename,sal*12 from emp where ename not like '_%A%' and sal>800 order by sal desc31.select lower(ename) from emp 将ename都转化为小写 lower是函数能将字母转化为小写32.select ename from emp where lower(ename) like '_%a%'; 找出ename 中所有的含有a的字符33.select substr(ename,2,3) form emp 从第2个字符开始截取3个字符34.select chr(65) from dual; 将65转化为字符35.select ascii('A') from dual 将ACSII码转化为字符串36.select round(23.565)from dual 四舍五入36.select round(23,4565,2)from dual 四舍五入到第二位37.select to_char(sal,'$99.999.9999') from emp 按指定格式输出select to_char(sal,'L99,999,9999') form emp L代表本地字符38.select hiredate from empselect to_char(hiredate,'YYYY‐MM‐DD HH:MI:SS) from emp; 时间格式的显示select to_char(sysdate,'YYYY‐MM‐DD HH:MI:ss) from dual; 十二小时制显示系统时间select to_char(sysdate,'YYYY‐MM‐DD HH24:MI:SS) from dual 二四小时制显示系统时间39.select ename,hiredate from emp where hiredate > to_date('2005‐2‐3 12:32:23','YYYY‐MM‐DD HH:MI:SS');40 select sal from emp where sal>to_number('$1,250.00','$9,999.99'); 取出比它大的一切字符串(把特定格式的数字转化成字符)41 select ename,sal+nvl(comm,0) from emp; 将comm值为空的用0来替换,单行函数(以一条记录为条件)一条对一条42.select Max(sal) from emp;select Min(sal) from emp;select avg(sal) from emp;select sum(sal) from emp;select count(*) from emp; 查看表中一共有多少条记录 select count(*) from emp where deptno=10; 查找部门10一共有多少人;43.select avg(sal),deptno from emp group by deptno; 按部门号进行分组select deptno,job,max(sal) from emp group by job,deptno; 按工作和部门号进行分组;44.select ename from emp where sal=(select max(sal) from emp); 子查询,查找部门中薪水最高的员工姓名45.group by 注意:出现在select列表中的字段,如果没有出现在组函数中必须出现在group by子句中46.select avg(sal),deptno from emp group by deptno having avg(sal)>2000; 选出部门中平均薪水大于2000的部门,47.select deptno from emp where sal>100 group by deptno having ..........order by........先取数据‐‐过滤数据‐‐‐‐‐‐分组‐‐‐‐对分组限制‐‐‐‐‐‐‐排序48.select avg(sal) from emp where sal>2000 group by deptno having avg(sal)>1500 order by avg(sal) desc;查找部门中平均薪水打印2000的员工并按部门号进行排序,查询分组后的平均薪水必须大于1500,查询结果按平均薪水从低到高排列49.select ename from emp where sal>(select avg(sal) from emp);查找出员工中薪水位于部门平均薪水之上的所有员工50.select ename,sal from emp join(select max(sal) max_sal from emp group by deptno) t on(emp.sal=t,max_sal and emp.deptno=t.deptno);查找每个部门中薪水最高的51.select e1.ename,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno; 表的自连接52.select dname,ename from emp cross join dept 交叉连接,笛卡尔SQL99中的新语法53.select ename,dname from emp join dept on(emp.deptno=dept.deptno);54.select ename,dname from emp join dept using(deptno); 查找emp 和dept表中deptno相同的部分。
oracle sql语句解析
oracle sql语句解析
Oracle SQL是一种用于管理和操作Oracle数据库的结构化查
询语言。
它是一种强大的语言,可以用于执行各种数据库操作,包
括数据查询、更新、插入和删除。
以下是对Oracle SQL语句的解析:
1. 数据查询,使用SELECT语句可以从数据库中检索数据。
可
以指定要检索的列,使用WHERE子句进行条件过滤,并且可以使用ORDER BY对结果进行排序。
2. 数据更新,使用UPDATE语句可以更新数据库中的现有数据。
可以指定要更新的表、要更新的列以及更新的条件。
3. 数据插入,使用INSERT语句可以向数据库中插入新的数据行。
可以指定要插入的表和要插入的值。
4. 数据删除,使用DELETE语句可以从数据库中删除数据行。
可以指定要删除的表以及删除的条件。
5. 数据聚合,使用聚合函数如SUM、AVG、MAX、MIN等可以对
数据进行汇总计算。
6. 数据连接,使用JOIN语句可以将多个表中的数据进行关联查询,以便获取更丰富的信息。
7. 子查询,可以在SELECT语句中嵌套子查询,以便在一个查询中使用另一个查询的结果。
8. 索引和优化,可以使用索引来提高查询性能,也可以使用EXPLAIN PLAN来分析查询语句的执行计划,以便进行性能优化。
9. 视图和存储过程,可以创建视图来简化复杂的查询,也可以创建存储过程来封装一系列SQL操作。
总的来说,Oracle SQL语句提供了丰富的功能和灵活的语法,可以满足各种数据库操作的需求。
通过合理的运用,可以高效地管理和操作Oracle数据库中的数据。
oracle语句大全及用法
oracle语句大全及用法Oracle语句是Oracle数据库中用于管理和操作数据的SQL语句。
以下是一些常用的Oracle语句及其用法:1. 数据定义语句(DDL)CREATE DATABASE:用于创建新的数据库。
CREATE TABLE:用于创建新的表。
语法如下:sql`CREATE TABLE table_name (column1 datatype1, column2 datatype2, ...);`ALTER TABLE:用于修改现有的表结构,如添加、删除或修改列。
DROP TABLE:用于删除现有的表。
CREATE INDEX:用于在表上创建索引,以提高查询性能。
2. 数据操纵语句(DML)SELECT:用于从表中查询数据。
语法如下:sql`SELECT column1, column2, ... FROM table_name;`INSERT INTO:用于向表中插入新的数据行。
语法如下:sql`INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);`UPDATE:用于修改表中的现有数据。
DELETE:用于从表中删除数据。
3. 数据控制语句(DCL)GRANT:用于授予用户或角色对数据库对象的访问权限。
REVOKE:用于撤销用户或角色对数据库对象的访问权限。
4. 事务控制语句(TCL)COMMIT:用于提交当前事务,使所做的更改永久生效。
ROLLBACK:用于撤销当前事务,恢复到事务开始前的状态。
SAVEPOINT:用于在事务中设置保存点,以便在之后的某个时刻可以回滚到该点。
5. 其他常用语句DECLARE:用于声明变量或常量,并为其分配数据类型和初始值。
BEGIN ... END:用于定义PL/SQL代码块的开始和结束。
IF ... THEN ... ELSE:用于条件判断,根据条件执行不同的操作。
ORACLE常用SQL语句大全
ORACLE常用SQL语句大全一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:/mssql7backup/MyNwind_1.dat'--- 开始备份BACKUP DATABASE pubs TO testBack4、说明:创建新表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not nul l],..)根据已有的表创建新表:A:select * into table_new from table_old (使用旧表创建新表)B:create table tab_new as select col1,col2… from tab_old definition only<仅适用于Oracle>5、说明:删除表drop table tablename6、说明:增加一个列,删除一个列A:alter table tabname add column col typeB:alter table tabname drop column colname注:DB2DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、添加主键:Alter table tabname add primary key(col)删除主键:Alter table tabname drop primary key(col)8、创建索引:create [unique] index idxname on tabname(col….)删除索引:drop index idxname注:索引是不可更改的,想更改必须删除重新建。
Oracle SQL精妙SQL语句讲解
--行列转换行转列DROP TABLE t_change_lc;CREA TE TABLE t_change_lc (card_code V ARCHAR2(3), q NUMBER, bal NUMBER); INSERT INTO t_change_lcSELECT '001' card_code, ROWNUM q, trunc(dbms_random.V ALUE * 100) bal from dual CONNECT BY ROWNUM <= 4UNIONSELECT '002' card_code, ROWNUM q, trunc(dbms_random.V ALUE * 100) bal from dual CONNECT BY ROWNUM <= 4;SELECT * from t_change_lc;SELECT a.card_code,SUM(decode(a.q, 1, a.bal, 0)) q1,SUM(decode(a.q, 2, a.bal, 0)) q2,SUM(decode(a.q, 3, a.bal, 0)) q3,SUM(decode(a.q, 4, a.bal, 0)) q4from t_change_lc aGROUP BY a.card_codeORDER BY 1;--行列转换列转行DROP TABLE t_change_cl;CREA TE TABLE t_change_cl ASSELECT a.card_code,SUM(decode(a.q, 1, a.bal, 0)) q1,SUM(decode(a.q, 2, a.bal, 0)) q2,SUM(decode(a.q, 3, a.bal, 0)) q3,SUM(decode(a.q, 4, a.bal, 0)) q4from t_change_lc aGROUP BY a.card_codeORDER BY 1;SELECT * from t_change_cl;SELECT t.card_code,t.rn q,decode(t.rn, 1, t.q1, 2, t.q2, 3, t.q3, 4, t.q4) balfrom (SELECT a.*, b.rnfrom t_change_cl a,(SELECT ROWNUM rn from dual CONNECT BY ROWNUM <= 4) b) tORDER BY 1, 2;--行列转换行转列合并DROP TABLE t_change_lc_comma;CREA TE TABLE t_change_lc_comma AS SELECT card_code,'quarter_'||q AS q from t_change_lc;SELECT * from t_change_lc_comma;SELECT t1.card_code, substr(MAX(sys_connect_by_path(t1.q, ';')), 2) qfrom (SELECT a.card_code,a.q,row_number() over(PARTITION BY a.card_code ORDER BY a.q) rnfrom t_change_lc_comma a) t1START WITH t1.rn = 1CONNECT BY t1.card_code = PRIOR t1.card_codeAND t1.rn - 1 = PRIOR t1.rnGROUP BY t1.card_code;--行列转换列转行分割DROP TABLE t_change_cl_comma;CREA TE TABLE t_change_cl_comma ASSELECT t1.card_code, substr(MAX(sys_connect_by_path(t1.q, ';')), 2) qfrom (SELECT a.card_code,a.q,row_number() over(PARTITION BY a.card_code ORDER BY a.q) rnfrom t_change_lc_comma a) t1START WITH t1.rn = 1CONNECT BY t1.card_code = PRIOR t1.card_codeAND t1.rn - 1 = PRIOR t1.rnGROUP BY t1.card_code;SELECT * from t_change_cl_comma;SELECT t.card_code,substr(t.q,instr(';' || t.q, ';', 1, rn),instr(t.q || ';', ';', 1, rn) - instr(';' || t.q, ';', 1, rn)) qfrom (SELECT a.card_code, a.q, b.rnfrom t_change_cl_comma a,(SELECT ROWNUM rn from dual CONNECT BY ROWNUM <= 100) bWHERE instr(';' || a.q, ';', 1, rn) > 0) tORDER BY 1, 2;-- 实现一条记录根据条件多表插入DROP TABLE t_ia_src;CREA TE TABLE t_ia_src AS SELECT 'a'||ROWNUM c1, 'b'||ROWNUM c2 from dual CONNECT BY ROWNUM<=5;DROP TABLE t_ia_dest_1;CREA TE TABLE t_ia_dest_1(flag V ARCHAR2(10) , c V ARCHAR2(10));DROP TABLE t_ia_dest_2;CREA TE TABLE t_ia_dest_2(flag V ARCHAR2(10) , c V ARCHAR2(10));DROP TABLE t_ia_dest_3;CREA TE TABLE t_ia_dest_3(flag V ARCHAR2(10) , c V ARCHAR2(10));SELECT * from t_ia_src;SELECT * from t_ia_dest_1;SELECT * from t_ia_dest_2;SELECT * from t_ia_dest_3;INSERT ALLWHEN (c1 IN ('a1','a3')) THENINTO t_ia_dest_1(flag,c) V ALUES(flag1,c2)WHEN (c1 IN ('a2','a4')) THENINTO t_ia_dest_2(flag,c) V ALUES(flag2,c2)ELSEINTO t_ia_dest_3(flag,c) V ALUES(flag1||flag2,c1||c2)SELECT c1,c2, 'f1' flag1, 'f2' flag2 from t_ia_src;-- 如果存在就更新,不存在就插入用一个语句实现DROP TABLE t_mg;CREA TE TABLE t_mg(code V ARCHAR2(10), NAME V ARCHAR2(10));SELECT * from t_mg;MERGE INTO t_mg aUSING (SELECT 'the code' code, 'the name' NAME from dual) bON (a.code = b.code)WHEN MA TCHED THENUPDA TE SET = WHEN NOT MA TCHED THENINSERT (code, NAME) V ALUES (b.code, );-- 抽取/删除重复记录DROP TABLE t_dup;CREA TE TABLE t_dup AS SELECT 'code_'||ROWNUM code, dbms_random.string('z',5) NAME from dual CONNECT BY ROWNUM<=10;INSERT INTO t_dup SELECT 'code_'||ROWNUM code, dbms_random.string('z',5) NAME from dual CONNECT BY ROWNUM<=2;SELECT * from t_dup;SELECT * from t_dup a WHERE a.ROWID <> (SELECT MIN(b.ROWID) from t_dup b WHERE a.code=b.code);SELECT b.code, from (SELECT a.code,,row_number() over(PARTITION BY a.code ORDER BY a.ROWID) rnfrom t_dup a) bWHERE b.rn > 1;-- IN/EXISTS的不同适用环境-- t_orders.customer_id有索引SELECT a.*from t_employees aWHERE a.employee_id IN(SELECT b.sales_rep_id from t_orders b WHERE b.customer_id = 12);SELECT a.*from t_employees aWHERE EXISTS (SELECT 1from t_orders bWHERE b.customer_id = 12AND a.employee_id = b.sales_rep_id);-- t_employees.department_id有索引SELECT a.*from t_employees aWHERE a.department_id = 10AND EXISTS(SELECT 1 from t_orders b WHERE a.employee_id = b.sales_rep_id);SELECT a.*from t_employees aWHERE a.department_id = 10AND a.employee_id IN (SELECT b.sales_rep_id from t_orders b);-- FBIDROP TABLE t_fbi;CREA TE TABLE t_fbi ASSELECT ROWNUM rn, dbms_random.STRING('z',10) NAME , SYSDA TE + dbms_random.V ALUE * 10 dt from dualCONNECT BY ROWNUM <=10;CREA TE INDEX idx_nonfbi ON t_fbi(dt);DROP INDEX idx_fbi_1;CREA TE INDEX idx_fbi_1 ON t_fbi(trunc(dt));SELECT * from t_fbi WHERE trunc(dt) = to_date('2006-09-21','yyyy-mm-dd') ;-- 不建议使用SELECT * from t_fbi WHERE to_char(dt, 'yyyy-mm-dd') = '2006-09-21';-- LOOP中的COMMIT/ROLLBACKDROP TABLE t_loop PURGE;create TABLE t_loop AS SELECT * from user_objects WHERE 1=2;SELECT * from t_loop;-- 逐行提交DECLAREBEGINFOR cur IN (SELECT * from user_objects) LOOPINSERT INTO t_loop V ALUES cur;COMMIT;END LOOP;END;-- 模拟批量提交/DECLAREv_count NUMBER;BEGINFOR cur IN (SELECT * from user_objects) LOOPINSERT INTO t_loop V ALUES cur;v_count := v_count + 1;IF v_count >= 100 THENCOMMIT;END IF;END LOOP;COMMIT;END;-- 真正的批量提交DECLARECURSOR cur ISSELECT * from user_objects;TYPE rec IS TABLE OF user_objects%ROWTYPE;recs rec;BEGINOPEN cur;WHILE (TRUE) LOOPFETCH cur BULK COLLECTINTO recs LIMIT 100;-- forall 实现批量FORALL i IN 1 .. recs.COUNTINSERT INTO t_loop V ALUES recs (i);COMMIT;EXIT WHEN cur%NOTFOUND;END LOOP;CLOSE cur;END;-- 悲观锁定/乐观锁定DROP TABLE t_lock PURGE;CREA TE TABLE t_lock AS SELECT 1 ID from dual;SELECT * from t_lock;-- 常见的实现逻辑,隐含bugDECLAREv_cnt NUMBER;BEGIN-- 这里有并发性的bugSELECT MAX(ID) INTO v_cnt from t_lock;-- here for other operationv_cnt := v_cnt + 1;INSERT INTO t_lock (ID) V ALUES (v_cnt);COMMIT;END;-- 高并发环境下,安全的实现逻辑DECLAREv_cnt NUMBER;BEGIN-- 对指定的行取得lockSELECT ID INTO v_cnt from t_lock WHERE ID=1 FOR UPDA TE;-- 在有lock的情况下继续下面的操作SELECT MAX(ID) INTO v_cnt from t_lock;-- here for other operationv_cnt := v_cnt + 1;INSERT INTO t_lock (ID) V ALUES (v_cnt);COMMIT; --提交并且释放lockEND;-- 硬解析/软解析DROP TABLE t_hard PURGE;CREA TE TABLE t_hard (ID INT);SELECT * from t_hard;DECLAREsql_1 V ARCHAR2(200);BEGIN-- hard parse-- java中的同等语句是Statement.execute()FOR i IN 1 .. 1000 LOOPsql_1 := 'insert into t_hard(id) values(' || i || ')';EXECUTE IMMEDIA TE sql_1;END LOOP;COMMIT;-- soft parse--java中的同等语句是PreparedStatement.execute()sql_1 := 'insert into t_hard(id) values(:id)';FOR i IN 1 .. 1000 LOOPEXECUTE IMMEDIA TE sql_1USING i;END LOOP;COMMIT;END;-- 正确的分页算法SELECT *from (SELECT a.*, ROWNUM rnfrom (SELECT * from t_employees ORDER BY first_name) a WHERE ROWNUM <= 500)WHERE rn > 480 ;-- 分页算法(why not this one)SELECT a.*, ROWNUM rnfrom (SELECT * from t_employees ORDER BY first_name) a WHERE ROWNUM <= 500 AND ROWNUM > 480;-- 分页算法(why not this one)SELECT b.*from (SELECT a.*, ROWNUM rnfrom t_employees aWHERE ROWNUM < = 500ORDER BY first_name) bWHERE b.rn > 480;-- OLAP-- 小计合计SELECT CASEWHEN a.deptno IS NULL THEN'合计'WHEN a.deptno IS NOT NULL AND a.empno IS NULL THEN'小计'ELSE'' || a.deptnoEND deptno,a.empno,a.ename,SUM(a.sal) total_salfrom scott.emp aGROUP BY GROUPING SETS((a.deptno),(a.deptno, a.empno, a.ename),()); -- 分组排序SELECT a.deptno,a.empno,a.ename,a.sal,-- 可跳跃的rankrank() over(PARTITION BY a.deptno ORDER BY a.sal DESC) r1,-- 密集型rankdense_rank() over(PARTITION BY a.deptno ORDER BY a.sal DESC) r2, -- 不分组排序rank() over(ORDER BY sal DESC) r3from scott.emp aORDER BY a.deptno,a.sal DESC;-- 当前行数据和前/后n行的数据比较SELECT a.empno,a.ename,a.sal,-- 上面一行lag(a.sal) over(ORDER BY a.sal DESC) lag_1,-- 下面三行lead(a.sal, 3) over(ORDER BY a.sal DESC) lead_3from scott.emp aORDER BY a.sal DESC;。
oracle经典sql语句
1、oracle将多行变成一行select d.datagetsource_id,wmsys.wm_concat(d.catagory_id)from datagetsource2catagory d group by d.datagetsource_id 2、oracle将表数据导入导出C:\Documents and Settings\Administrator>exp irdp/irdpfile=e:/数据库备份/irdp_bak_200911020927_forUpdate.dmp full-y 导出数据库的语句,最后的是full-y,不是full=y,如果用后面也可以导出,但它会把库中的所有用户都导出来。
3、oracle将树形sql语句最后加上根节点idCONNECT_BY_ROOTselect munity_id,c2c.parent_community_id,level,CONNECT_BY_ROOT community_id rootfrom community2community c2cstart with munity_id in(select community_idfrom community cywhere withdrawn = 'N')connect by prior munity_id = c2c.parent_community_id 4、查询数据库所有包含item_id字段的表的名称select t.TABLE_NAME from user_tab_columns t wheret.COLUMN_NAME like'%ITEM_ID%'group by t.TABLE_NAME;5、查询数据库回收站中被删除的表select * from recyclebin where original_name ='WEBPUBLISHAPPLY';6、闪回数据库某张表alter table WEBPUBLISHAPPLY enable row movement;flashback table WEBPUBLISHAPPLY to timestampto_timestamp('2010-08-03 00:00:00','yyyy-mm-ddhh24:mi:ss');alter table WEBPUBLISHAPPLY disable row movement;7、oracle-9i将一行记录中部分数据复制到另一行记录中update addressbook aset(a.a_sex,a.a_brithday,a.a_brithplace,a.a_address,a.a_phone)=(selectd.a_sex,d.a_brithday,d.a_brithplace,d.a_address,d.a_phone from addressbook dwhere d.a_id = '5')where a.a_id = '3';8、将表中a字段记录为1的行中的b字段全部改为2update addressbook dset d.a_brithplace = (select r.a_brithplace fromaddressbook r where r.a_id = '9')where d.a_address = (select c.a_address from addressbook c where c.a_id = '5')9、删除表且删除表所占的空间,且不能回退truncate table books10、oracle事务1)savepoint a 保存事务点2)rollback to a 回退到事务点a,且取消a之后的操作3)rollback取消全部操作4)只读事务set transaction read only;--1(会话1)update emp set sal = 3000where ename = 'smith';--2(会话2) select sal from emp where ename = 'smith';--3(会话1)当在1处设置了只读事务后,紧接着2处在3之前修改了该数据,但是在3处查看的数据还是1处这个时间点的数据,也就是修改前的数据提示:在read only事务中,是不允许进行增删改操作的5)顺序事务set transaction isolation level serializable;--1(会话1) update emp set sal = 3000where ename = 'smith';--2(会话2) select sal from emp where ename = 'smith';--3(会话1)在3处的查询语句只会查询到2处修改前的数据11、分组函数select i.item_type_id,i.submitter_id,count(1) from item i where i.item_type_id = 'ebook'or i.item_type_id = 'rwsk' group by rollup (i.item_type_id,i.submitter_id);select i.item_type_id,i.submitter_id,count(1) from item i where i.item_type_id = 'ebook'or i.item_type_id = 'rwsk' group by cube (i.item_type_id,i.submitter_id);12、同时利用两个或者多个分组函数select r.type,r.metaapplication_id,count(1) from resourceshowtype rgroup by grouping sets(r.type,r.metaapplication_id);13、自动执行内连接select c2i.collection_id,item_id,i.item_type_id fromcollection2item c2inatural join item i14、函数1)返回字符的ASCII码select ascii('a') from dual;2)将ASCII码转换为字符select chr(65) from dual;3)链接两个字符select concat('ab','cd') from dual;4)单词首字母大写select initcap('hello world') from dual;5)查看字符串a在字符串b中的位置instr(b,a,n,m),n为起始位置,初始为1,m为出现次数,初始为1select instr('hello world','l','1') from dual;6)返回字符串的长度select length('hello world') from dual;7)将条目id左边填充0直到字符长度达到10位select i.item_id,lpad(i.item_id,10,'0') from item i;select i.item_id,rpad(i.item_id,10,'0') from item i;8)将字符串中左边连续出现的'浙江大学'的任意组合去掉select ,ltrim(,'浙江大学') from community c;9)将字符串变为首字母大写或者全小写或者全部大写select nls_initcap(n'hello world') from dual;select nls_lower(n'SQL Server') from dual;select nls_upper(n'SQL Server') from dual;10)字符串替换select replace('浙江大学出版社','浙江','湖北') from dual;11)截取子字符串select substr('浙江大学出版社',1,4) from dual;15、时间1)在系统时间往后推100个月select add_months(sysdate,100),sysdate from dual;select add_months(sysdate,-100),sysdate from dual;select add_months(sysdate,-1000000000000),sysdate from dual;2)返回当前时区对应日期格式的时间select current_date from dual;3)返回当前日期格式的时间select current_timestamp from dual;4)从当前时间中抽取年月日,不能抽取时分秒select extract(year from sysdate) from dual;select extract(month from sysdate) from dual;select extract(day from sysdate) from dual;16、使用标量变量接收查询数据declarev_comtype_name %type;beginselect name into v_comtype_namefrom communitytypewhere community_type_id=&comtype_id;dbms_output.put_line('资源库名称:'||v_comtype_name); end;17、使用记录变量接受数据--oracle自定义类型种类:--1、子类型--subtype cc_num is number(16,2);--2、记录类型--type emp_record_type is record--(--ename varchar2(10),--job varchar2(9)--);--emp_record emp_record_type;--3、rowtype类型变量--emp_record emp%rowtype;declaretype emp_record_type is record(id munity_type_id%type,name %type);emp_record emp_record_type;beginselect munity_type_id,into emp_recordfrom communitytype ctwhere munity_type_id = 'ebook';dbms_output.put_line('资源库ID:'||emp_record.id); dbms_output.put_line('资源库名称:'||emp_); end;18、操纵数据declarev_community_type_namecommunitytype.english_name%type:='&englishname'; beginupdate communitytype tset t.english_name = v_community_type_namewhere munity_type_id = 'AcademicRes'; commit;end;19、数据库游标1)sql%isopen游标是否已经打开2)sql%found sql语句是否已经执行成功beginsavepoint a1;update communitytype tset t.english_name = '333'where munity_type_id = 'AcademicRes';if sql%foundthencommit;dbms_output.put_line('成功');elserollback to a1;dbms_output.put_line('失败');end if;end;3)sql%notfound4)sql%rowcount返回sql影响的行数。
oracle常用sql语句
empty_blocks, avg_space, chain_cnt, avg_row_len, sample_size,
last_analyzed
FROM dba_tab_partitions
v$rollname where v$(+) = sys.dba_rollback_segs.segment_name and
v$n (+) = v$n order by rownum
15、耗资源的进程(top session)
8、查看数据库的版本
Select version FROM Product_component_version
Where SUBSTR(PRODUCT,1,6)='Oracle';
9、查看数据库的创建日期和归档方式
Select Created, Log_Mode, Log_Mode From V$Database;
16、查看锁(lock)情况
select /*+ RULE */ ls.osuser os_user_name, ername user_name,
decode(ls.type, 'RW', 'Row wait enqueue lock', 'TM', 'DML enqueue lock', 'TX',
SELECT partition_name, high_value, high_value_length, tablespace_name,