oracle的基本语句

sql中的select 语句

spool d:\基本查询.txt
--spool 录屏所录的为文本文件
--清屏
host clear(linux)
host cls (window)
--当前用户
show user
--当前用户下的表
select * from tab;(tab数据字典,表和视图)
--员工表的结构
desc emp
empno 员工号 ename 员工名字 job 工作 mgr 老板
hiredate 入职日期 sal 月薪 comm 奖金 deptno 部门号
--查询所有的员工信息
select * from emp
--设置行宽
show linesize
set linesize 150
--设置列宽
col ename for a8 (设置名字这行的宽度为8个字符)
col sal for 9999(4列用数字进行代表)
/ (执行上一条语句)
/*sql优化(数据库的优化)
1.尽量使用列名
*/

光标所在的位置代表上一条记录
若sql语句书写错误,修改的方法
--c命令 change
2 (代表修改第二条)
c /form/from (将什么修改成什么)
/ (执行上一条语句)
-- sql 语句是支持算术表达式的
select empno,ename,sal,sal*12,comm,sal*12+comm
from emp
/* sql语句中的空值问题
1.包含null的表达式都为null,解决方法
滤空函数nvl(a,b)若a为空,则值为b,若a不空,则值为a
2.null 永远!=null
is nll 代表等于空
3.如果集合当中含有null,不能使用not in ;但是可以使用in
*/

--列的别名
select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0)
from emp
ed 打开默认的编辑器
select empno as "员工号",ename "姓名" ,sal 月薪 ,sal*12 as ,comm as ,sal*12+nvl(comm,0) as
from emp
as "员工号"和"姓名"两个别名没有区别
别名当中含有关键字或者含有特殊的符号或者纯数字则要加上""

select *|{distinct column|expression [alias]}
from table

--distinct
select distinct deptno,job form emp;(两列看成整体不重复)

--连接符 和--concat的作用相同(连接字符串)
select ‘hello‘||‘ world‘ 字符串 from dual;
select concat(‘hello‘,‘ word‘) from dual;
当进行操作的时候和任何表都没有关系的时候
select 3+2 from dual;

--解释dual:伪表
dual 的出现仅仅是为了满足select语句的要求(sql99当中要求select必须和from相互配套)
--查询员工信息:***的薪水是***
select ename||‘的薪水是‘||sal 信息 from emp;

hadoop的数据仓库hive支持sql92 可以直接写select
--字符串
单引号:表示日期和字符
双引号:表示列的别名

--sql和sqlplus
sql 增删改查(改变数据)
sqlplus oracle提供的工具(不能修改数据)
两者的区别:
sql 没有进行缩写(insert select update delete)
sqlplus 进行缩写(desc ed c col for)

linux 当中的端口不能改到1024以下(linux系统保留)

oracle服务监听器监听的端口为1521,通过监听1521端口登录到数据库(orcl)的服务上

--任务调度:(oracleJobSchedulerORCL)
到达时间后做什么事情
oracleDBConsoleorcle(oracle的控制台,相当于一个监听1158端口)

进行管理数据库:
192.168.56.101:1158/em/console/logon/logon
sys
password
sysdba

isqlplus只能在oralce9i 和oracle 10g才有(sqlplus的网页版)
192.168.56.101:5560/isqlplus
scott
password
网页版遵守http协议,明文协议不安全

11g 当中遵守https 加密协议

--spool off

单行函数:
函数:简化操作
函数:
单行函数(nvl)
单行进行变换产生结果
字符;数值;日期;转换;通用;条件表达式

多行函数(max)
多行进行变换产生结果

单行函数:
大小写控制: lower(小写) upper(大写) initcap(首字母大写)
字符函数: concat(字符串连接) concat(a,b) 将a和b相互连接
substr(字符串的子串) substr(a,b,c) 从a中,第b位开始取c位
length(长度) length(a)字符长度 lengthb(a)字节长度
instr(一个字符串来当中查找另外一个字符串) instr(a,b) 返回位置/没有返回0
lpad|rpad(左填充,右填充) lpad(a,b,c) 将a,填充到b位,填充的字符为c
trim(去掉前后指定的字符) trim(a from b) 将b 当中的前后a去掉
replacel(用什么去替换什么) replalce(a,b,c) 将a中的b都替换为c

数值函数: round(a,b) a保留b位小数(四舍五入)保留小数,四舍五入
trunc(a,b) 截断,截断后的数值

日期:
mysql : date datetime(含有年月日)
oracle: date= 日期+时间(DD-MON-RR)
--查询当前时间:
select sysdate from dual

to_char 把什么东西按照什么格式转换为字符串

select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss‘) from dual;

日期的运算只有加和减没有乘和除(两个日期不能相加(没有意义)
--昨天 今天 明天
select (sysdate-1) 昨天,sysdate 今天,(sysdate+1) 明天
from dual

--计算员工的工龄: 天 星期 月 年
select ename,hiredate,(sysdate-hiredate) 天,(sysdate-hiredate)/7 星期,
(syddate-hiredate)/30 月,(sysdate-hiredate)/365 年

from emp;
--两个日期相差的月数: months_between(a,b)
--添加多少个月:add_months(sysdate,56)
--当前月最后一天:last_day(sysdate)
--指定日期的下一个日期 next_day
/*
next_day 的应用:每个星期一自动备份数据
异地容灾(数据库远程备份)
1.分布式数据库
2.快照和触发器
*/
select next_day(sysdate,‘星期一‘) from dual
select round(sysdate,‘month‘),round(sysdate,‘year‘) from dual

转换函数:数据类型的转换(隐式类型和显式类型)
select * from emp where hiredate="17-11月-81" (隐式类型转换)
显示类型转换:
number character date
to_char;to_number;to_date

yyyy year mm month dy day dd

to_char 将日期转换为字符串(to_number 相反)
select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss"今天是"day‘) from dual;

--查询员工薪水:两位小数,千位符 货币代码
select to_char(sal,‘L9,999.99‘) from emp;

to_date 将字符转换为日期(字符按照日期格式转换为日期)
to_date(char,‘format_model‘)和to_char 相反

通用函数:适用于任何的类型,同时也适用于空值
oracle 当中含有2的是不含2的增强

--nvl2(a,b,c) 当a =null 的时候,返回c;否则返回b
select sal*12+nvl2(comm,comm,0) from emp;

--nullif(a,b) 当a=b的时候,返回null;否则返回a
select nullif(‘abc‘,‘abc‘) 值 from dual;

--coalesce 从左到右找到第一个不为null的值
select comm,sal,coalesce(comm,sal) "第一个不为空的值" from emp;

条件表达式:if-then-else的逻辑时:
case expr when expr1 then return_expr1
when expr2 then return_expr2
when expr3 then return_expr3
else else_expr
end
--涨工资
select ename,job,sal 涨前
case job when ‘president‘ then sal+1000
when ‘manager‘ then sal+800
else sal+400 涨后
from emp;

case job when sal<3000 then ***
when sal>=3000 and sal<6000 then ***
else ***

select ename,job,sal 涨前
decode(job,‘president’,sal+1000
‘manager‘ ,sal+800
sal +400) 涨后
from emp;

过滤和排序
--字符大小写敏感,日期格式敏感(默认 DD-MON-RR)
日期和字符串要包含在单引号中
select *
from emp
where hiredate =‘17-11月-81‘
where hiredate = ‘1981-11-17‘ 错误
--查询默认的格式:
select * from v$nls_parameters(动态视图)(取得操作系统的语言)
alter session|system set NLS_DATE_FORMAT=‘yyyy-mm-dd‘
比较运算:赋值使用:=符号
java : int a =0;
pl/sql: a number :=0
between and 1.含边界 2.小值在前,大值在后
in(null,30)(可以) 和 not in (null,30,40) (不可以)
--like 模糊查询 % 代表所有的字符 _ 代表任意的一个字符
--查询员工当中含有下划线的员工
select *
from emp
where ename like ‘%\_%‘ escape ‘\‘ (escape声明转移字符为\)

时间: 2024-10-26 18:09:03

oracle的基本语句的相关文章

oracle学习--循环语句

oracle学习--循环语句  loop循环: create or replace procedure pro_test_loop is i number; begin i:=0; loop i:=i+1; dbms_output.put_line(i); if i>5 then exit; end if; end loop; end pro_test_loop; while循环: create or replace procedure pro_test_while is i number; b

Oracle分页查询语句的写法(转)

分页查询是我们在使用数据库系统时经常要使用到的,下文对Oracle数据库系统中的分页查询语句作了详细的介绍,供您参考. Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用.Oracle分分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHER

Oracle 动态SQL语句

Oracle 动态SQL语句 (2012-06-18 16:36:12) 转载▼ 标签: oracle it   EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQLpackage包. 它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTEIMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.尽管DBMS_SQL仍然可用,但是推荐使用EXECUTEIMMEDIATE,因为它获的收益在包

Oracle之sql语句优化

项目中虽然使用了orm映射,但Oracle系统的优化还是很有价值的,这里从sql语句的角度对常用的语句做下总结. 1.from字段中的优化: Oracle安照从右到左的顺序加载表数据,应该把可以排除数据最多的表放到后面(基础表). 比如,在关联查询中,把课程表放到后面,成绩表放到前面,因为课程表数据一般比较少,关联的时候可以快速的过滤掉一些成绩数据. 2.where中的优化: 对可以过滤数据最多的,放到后面,原理也是Oracle执行从下到上(从右到左)的顺序. 3.使用列名替代*: 省去从字典表

oracle常用SQL语句(汇总版)

Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ……) FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’ 如果字段值里包含单引号’ 需要

PowerDesigner使用Oracle建库语句中&quot;&quot;双引号的问题

这几天使用powerdesigner建库,general database导出的sql建表语句带有""双引号,结果导致我的库中表名都是小写的,但是Oracle查询等语句默认都是大写判断的,因此很是不方 便,以前使用pd没发现这个问题,可能是版本升级导致的,查了一下,原来需要Pd再设置一下:两种方式1.pd Edit Current DBMS-ORACLE9i2::Script\Sql\Format\CaseSensitivityUsingQuote将双引号的设置改为NO 2.变通方法就

【Oracle】常用语句集合

1 oracle常用经典SQL查询 2 常用SQL查询: 3 4 1.查看表空间的名称及大小 5 6 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size 7 from dba_tablespaces t, dba_data_files d 8 where t.tablespace_name = d.tablespace_name 9 group by t.tablespace_name; 10 11 2.查看表空间物

Oracle insert all语句介绍

Oracle 中insert语句的高级用法,INSERT ALL 语句介绍: 1.无条件insert all 全部插入 CREATE TABLE t1(product_id NUMBER, product_name VARCHAR2(80),MONTH NUMBER); INSERT INTO t1 VALUES(111, '苹果',1); INSERT INTO t1 VALUES(222, '橘子',1); INSERT INTO t1 VALUES(333, '香蕉',1); COMMIT

ORACLE MERGE INTO语句,unable to get a stable set of rows in the source tables报错解决

ORACLE数据库,MERGE INTO语句,经常会出现  ORA-30926: unable to get a stable set of rows in the source tables   这个错误,如下图所示: 经检查,这个错误是由于数据来源表(即语句中,from关键字后面的表)存在数据重复造成的.在实际项目研发中,我们一般不能随便改动数据表的记录,那么如何避免这种错误的产生以及如何改正错误呢? 请看下面的SQL: MERGE INTO TEMP_ZL_ACCOUNTLIST t1 U

Oracle的update语句优化研究

最近研究sql优化,以下文章转自互联网: 1.     语法 单表:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 如:update t_join_situation set join_state='1'whereyear='2011' 更新年度为“2011”的数据的join_state字段为“1”.如果更新的字段加了索引,更新时会重建索引,更新效率会慢. 多表关联,并把一个表的字段值更新到另一个表中的字段去: update 表a set a.字段1 = (sele