SQL的函数

oracle_install
oracle默认的端口:1521
DB_name  

    -->数据库名(数据库的唯一标识)
oracle_SID 
    -->实例名,一般要求与数据库名DB_name相同。
global_name  
    -->DB_name_domain
RAC 
          -->oracle集群

登录用户名:

sys  
    -->超级用户    DBA  默认安装产生  sys "/as sysdba"表明身份
system 
DBA权限            默认安装产生  system /xx(密码)
 
                                user /xx

oinstall --> 安装,升级

dba 
    --> 管理,维护
=================================================================================================

SQL 语句: "concat_substr_length_instr_lpad_trim_replace_round_trunc_mod_to_char_avg_count_sum_min_max_distinct_having_连接"


单行函数:

多行函数:

(1)字符函数: 
-->大小写控制函数:改变字符的大小写
lower('sql cource') 
  sql cource
upper('sql cource') 
  SQL COURCE
inicat('sql cource') Sql Cource

行记录对大小写是敏感的

select ename from emp where ename='SCOTT';
select 
ename,sal from emp where lower(ename)='king';  --->将所有的ename 转化为小写,然后再与king进行匹配

(2)字符控制函数:控制函数

concat ||
substr
length
instr
lpad || rpad
trim
replace

例子:

concat ('hello','world') 
连接字符:        结果:helloworld      --->select concat('hello','world') from dual 其中dual是一张空表
substr ('helloworld',4,3) 截取字符: 
      结果:low
substr ('helloworld',1,5)  
                结果:hello
length ('helloworld') 
      计算字符长度:  结果:10  -->字符长度为10
instr 
('helloworld',r)    计算字符位置:  结果:8
lpad 
  (sal,10,'*')            结果:******5000
rpad 
  (sal,10,'$')            结果:6000$$$$$$
trim 
  ('h'from 'helloworld') 截取一个字符 结果:elloworld

select replace(map,substr(map,4,1),null) from test;

==========================================================================================
两个例子:"lpad" 
&& "rpad"
SQL> select lpad(sal,10,'*') from emp;
LPAD(SAL,1
----------
*******800
******1600
******1250
******2975
******1250
******2850
******2450
******3000
******5000
******1500
******1100

SQL> select rpad(sal,10,'$') from emp;


RPAD(SAL,1

----------
800$$$$$$$
1600$$$$$$
1250$$$$$$
2975$$$$$$
1250$$$$$$
2850$$$$$$
2450$$$$$$
3000$$$$$$
5000$$$$$$
1500$$$$$$
1100$$$$$$
==========================================================================================
(3)数字函数
round :四舍五入
trunc :截断
mod 
  :取模求余
 

例子:select round(45.932,2),round(45.932,0) from dual;
 
    结果:  ROUND(45.932,2) ROUND(45.932,0)
 
                --------------- ---------------
 
                45.93                          46

select trunc(45.634,0) 
              from dual;
select mod(1600,3) 
                      from dual;
select empno.sal,mod(sal,1000) from emp;

(4)日期函数

世纪,年,月,日,时,分,秒
默认的日期格式: DD-MON-YY

修改默认的时间显示格式: "nls_date_format"

例子:
 
    修改日期的显示格式:alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

日期函数数学运算:

 
    select ename from emp
 
      where (sysdate-hiredate)/365>20;

"to_char"

select ename,to_char(hiredate,'fmDD Month yyyy') from emp;
 
    --->使用to_char函数使得显示的格式为:fmDD Month yyyy
 
    --->其中fm是使得前面的0去掉:


(5)通用函数

将空值转换成一个已知的值-->nvl
nvl (commission,0)
nvl (hiredate,'01-JAN-97')

例子: select ename,sal,nvl(comm,0) from emp;--->把comm列当中的空值 转换为0


nullif 函数

如果两个表达式不想等,返回第一个值,如果相等,则返回空值
select ename,length(ename),job,length(job),nullif(length(name),length(job) ) result from emp;

decode()函数--> 相当于if ...then...;if...then...

select ename,job,sal,decode(job,'SALESMAN',1.1*sal,'MANAGER',1.2*sal,sal) salnew from emp;

(6)分组函数

组函数:
avg
count
max
min
sum

例子: select avg(sal),max(sal),min(sal),sum(sal) from emp;

 
        select count(*) from emp;
 
       
distinct
distinct :返回非空且不重复的记录总数
select count(distinct job) from emp;

group by

group by子句语法---->可以将表中数据分成若干组
在select 列表中所有未包含在组函数中的列都应该包含在group by中。
 
                \-->这里的组函数是指avg,count,max,min,sum;
语法: select ename,deptno,avg(sal) from emp group by deptno,ename;
 
      这个时候ename,deptno没有包含组函数,而avg(sal)包含组函数,因此,deptno,ename应该放在group by 后面。

(7)过滤函数having

having avg(sal) > 2000;
select deptno,max(sal) from emp group by deptno having max(sal)>2000 order by max(sal);

(8)多表查询:

笛卡尔集:---> select * from emp,dept -->将会出现笛卡尔集现象。
1.省略连接条件
2.连接条件无效
3.所有的表中的所有行互相连接

多表查询的语法结构:

select e.ename,e.sal from emp e ,dept d
where e.deptno=d.deptno
and e.loc='CHICAGO'

连接类型:

Equi.join 
    等连接:  n张表至少需要n-1个条件
non-Equijion 非等连接: 例如 between ..and ...
outer join 
  外连接
self join 
    自连接


cross joins

natural joins
full join 
       

例子: 等连接

select e.ename,e.sal,d.loc,d.dname from emp e,dept d
where e.deptno=d.deptno;
查询用户名,薪水,所在城市,部分名称。


非等连接

select e.ename,e.sal,g.empno from emp e,job_grade g
where e.sal between g.minsal and g.maxsal;
上面的意思是:从emp表中取 ename跟sal两列,条件是emp.sal的数值要求在job_grade 中minsal 与maxsal之间。

外连接

select e.ename,e.sal,d.loc from emp e ,dept d
where e.deptno(+)=d.deptno; 
--->全部扫描,由于(+)在"="左边,则全部扫描=号 右边的表。

显示table1 中不满足条件的行记录:

select table1.column,table2.column from table1,table2
where table1.column=table2.column(+);
 
                        --->全部扫描,由于(+)在"="右边,则全部扫描=号 左边的表。

"左连接" "右连接" "外连接" "内连接"





ENAME 
                      SAL LOC
---------- ---------- -------------
SMITH 
                      800 DALLAS
ALLEN 
                    1600 CHICAGO
WARD 
                      1250 CHICAGO
JONES 
                    2975 DALLAS
MARTIN 
                  1250 CHICAGO
BLAKE 
                    2850 CHICAGO
CLARK 
                    2450 NEW YORK
SCOTT 
                    3000 DALLAS
KING 
                      5000 NEW YORK
TURNER 
                  1500 CHICAGO
ADAMS 
                    1100 DALLAS

ENAME 
                      SAL LOC
---------- ---------- -------------
JAMES 
                      950 CHICAGO
FORD 
                      3000 DALLAS
MILLER 
                  3000 NEW YORK
 
                                        BOSTON
 
                                        perk









你可能感兴趣的:(数据结构,oracle,sql)