您的位置:首页 - 教程 - Oracle - 正文
oracle之sql基础

where  限制条件

1    比较操作符
    = < > <= >=
    <>  != ^= any  all
    > any()   大于any中的任意一个的,也就是大于最小的,()中间的条件以逗号分割
    > all()       大于all中的所有的,也就是大于最大的
    显示员工表中职位是SALESMAN 的部门编号
    
    字符型需要加上单引号

操作符
    确定范围: between  ... and ; not between  ... and   包括边界值
    确定集合:    in  ; not in
    空值: null  , not null
    模糊匹配:    like  ; not like , escape , % , _
                    % 匹配0个或多个字符
                    _ 匹配1个字符
                    escape 指定转移字符

 

查询薪水不在2000和4000之间的ename
    select ename from emp where sal not between 2000 and 4000;
    select ename from emp where not sal between 2000 and 4000;
    区别:上面运算一次,下面是2个运算符,先运行between and 再执行not ,结果一样,但是下面运行效率较低
    
    显示职位是salesman and clerk 的员工编号,薪水和入职时间
    select empno,sal,hiredate from emp where job in ('salesman','clerk');
    
    显示姓名中以A开头的员工
    select ename from emp where ename like 'A%';
    
    显示姓名中第三个字符是A的员工
    select ename from emp where ename like '__A%';
    
    显示姓名中含有 % 的员工
    select ename from emp where ename like '%/%%' escape '/';              转移字符可以任意指定
    select ename from emp where ename like '%a%%' escape 'a';
    
    查找奖金为空的员工
    select ename from emp where comm is not null;            is
    
    逻辑条件
    not   and   or
    可以使用() 改变优先级
    
    
    算术运算
    
    


变量
SQL> select ename from emp where empno=&epn;
Enter value for epn:        输入值就可以查询
old   1: select ename from emp where empno=&epn
new   1: select ename from emp where empno=7839

SQL> set verify off  取消新旧值的显示

SQL> save  /tmp/epn.sql

可以把这条语句写入一个sql脚本,每次调用
SQL> @ /tmp/epn.sql

sql语句执行顺序是从右向左
select ename,&epn from emp where empno=&&epn;            这样是两个变量,会提示先输入后面的变量值,在输入前面的
    
select ename,&&epn from emp where empno=&epn




排序  
order  by        永远放在sql语句的最后,排序会占用内存资源,能不用尽量不用

number类型  0-9
char 字符型        a-z  A-Z
日期: 1-12
null:  排序中,NULL的值是最大的


order by ... asc| desc
asc 升序  desc 降序
默认是升序,asc可以省略,按照ascII 码排序

#export NLS_LANG='Simplified Chinese'_china.al32utf8;   导入字符集,可以看到汉语字符串
#unset NLS_LANG        取消

查找汉语排序的方式

conn / as sysdba        需要切换到sysdba用户
select tname from  tab where tname like '%NLS%'        查找含有NLS的表和视图
desc v_$nls_parameters
 
select parameter,value from v$nls_valid_values where parameter='SORT' and value like '%CHINESE%'

按照指定的方式排序
select name from china order by nlssort (name,'nls_sort=SCHINESE_RADICAL_M')

按照列名
        
按照别名
        select ename,empno as epn ,sal,job.hredate from emp order by epn desc;        epn是empno别名
按照顺序
           select ename,empno as epn ,sal,job.hredate from emp order by 3 desc;   3代表sal,多字段中的第三个
           select ename,empno as epn ,sal,job,hiredate from emp order by 2,3 desc;  先按2排,2相同的再按3排
           

日期排序
        
        
——————————————————————————————————————————————————————        
        
函数
函数作用: 返回值
函数的分类:
    单行函数,对一行数据进行处理,返回一个值;
        字符函数,数值函数,日期函数,转化函数,通用函数,正则表达式函数
    多行函数,又名聚合函数,对多行数据进行处理,返回一个值;
        sum, count ,max ,min ,avg
    分析函数,可以返回多个值,以后单独讲
    
不同函数的用法



    
    
 Installing and Upgrading            安装与升级
 Getting Started        
 Database Administration            数据库管理
 Application Development            开发
 Grid Computing        grid
 Performance
 High Availability        高可用
 Data Warehousing and Business Intelligence
 Unstructured Data and Content Management
 Information Integration
 Security         安全
    
    
OpenOpen Database Administratio    
Supporting Documentation
    Concepts     HTML     PDF
    Reference     HTML     PDF
    
SQL, PL/SQL, and PL/SQL Packages    
    SQL Language Reference     HTML     PDF
        5 Functions
    
    
    
    
    字符函数
    upper(x)        大写
    lower(x)        小写
    initcap(x)        每个字符串首字母大写,其他字母小写,字符串以空格分割
    select upper('hello') from dual;              
    select lower('hello') from dual;
    select initcap('hello world') from dual;
    
        
    concat(x,y)  链接函数,如果要链接3个以上的字符串,需要嵌套使用concat(concat(x,y),z)
    ascii(x)    查看呢ascii码
    length(x)  统计长度,按字符统计
    lengthb(x)     按字节统计
    lengthc(x)        按unicode统计
    
    substr(x,y,z)        在x中截取从y位置开始,长度为z的字符;z可以省略,表示到字符串最后;y可以为负数,表示倒数第y位置开始
            SQL> select substr('123.456.789',5,3) from dual;

    instr(x,y,z,c)        从x字符串中查找y字符串,从第z位置开始,第c次出现的位置    z 和c 可以不写,默认为1,z可以为负,表示从右向左第z个字符开始从右向左查找
            SQL> select instr('hello chengdu chengdu','du',2,1) from dual;
            SQL> select instr('hello chengdu','e',-2,1) from dual;        返回值    9
            
    trim(x)        去掉字符串前后的空格    
            SQL> select length('   chengdu  '),trim('   chengdu  ') from dual;
    
    trim(leading | trailing | both  x from y)            从头/从尾/从两头 掉y中的x字符,只能去掉单个字符
            SQL>select trim(trailing 'x' from 'xabcx')  from dual;
    
    ltrim(x,y) ,rtrim(x,y)            11g后增加的,可以去除多个字符                
    ltrim从左边,在x中匹配y中的任意字符,并去除,返回剩下的字符串
            SQL> select ltrim('abaacdeabc','ab') from dual;   返回 cdeabc
            SQL>select ltrim('abababcabab','ab') from dual;  返回 cabab
            SQL>select ltrim('ababababab','ab') from dual;   返回为空

   rpad(x,y,z)        右填充函数,如果x不满足y位,则在其右边填充z满足y位
   lpad(x,y,z)        左填充
            SQL> select rpad(ename,12,'*') from scott.emp;            返回值SMITH*******
            
    chr(x)   把x作为ascii 码 转换成对应的字符
            SQL>select chr(37) from dual;         返回值 %
    replace(x,y,z)        把x中的y子字符串 用z字符串替换    
            SQL> select replace('chinese','ese','a') from dual;        返回值  china
            

数值函数

    abs(x)    返回x绝对值
    power(x,y)        x的y次方
    ceil(x)    向上取整,x整数部分+1,x为负数取整数部分
    floor(x)    向下取整,只取x整数部分,x为负数取x整数部分-1
    sign(x)        x小于0 返回-1    x等于0 返回0  x大于0 返回1
    round(x,y)    从小数点后y位置,对x进行四舍五入
    mod(x,y)        x除以y 取余
    bitand(x,y)         转换成二进制进行异或运算


日期函数
    sysdate        系统时间,可以自己定义格式???
        SQL> alter session set nls_date_format='yyyymmddhh24:mi:ss'
    systimestamp
    add_months(x,y)        在x的基础上,加上y个月,y可以为负数
    moths_between(x,y)        x和y之间相差的月数,天数会换算成月变成小数,x小于y,返回负数
    last_day(x)        x月的最后一天是几号
    next_day(x,y)        在x的基础上,下一个y是几号,y是星期几的英文拼写,并且需要使用 单引号 '',如next_day(sysdate,'FRIDAY')
    CURRENT_DATE
    CURRENT_TIMESTAMP
    trunc(x)     时间四舍五入,只保留日期,即每天零点
        trunc(x,'Q')   按季度四舍五入
        trunc(x,'Q') -1      上个季度的最后一天
    round(sysdate,'mm')  按照月对当前时间进行四舍五入        yy年,dd天


评论: