CUUG官方博客: CUUG官网_CUUG怎么样_CUUG培训就业怎么样_CUUG学Oracle要多少钱

sql作业 1~4章 兰交大 司金成

选择:查询符合条件的行,过滤掉不符合条件的行

投影:查询符合条件的列,过滤掉不符合条件的列

连接:从多个表中查询数据。

连接是关系型数据库的核心,把数据放在不同的表里,通过关联获得完整信息。

Select table_name from user_table;     查看当前用户的所有表的信息

Describe  :描述表的结构                     :desc emp;

Column...format   :  格式化列的宽度      例: column hiredate format a18;

                                            Col hiredate for a18;


关键字: distinct/group by(消除重复行) 

     Between and (范围)            : select ename,sal from emp where sal between 800 and 1000;    : 小到大

         In                                  例:select empno,ename,sal,mgr from emp where mgr in (7902,7566,7788);

       Like(模糊查询)                 :select * from emp where ename like '%MI%';  匹配字符:%(零个或多个)  _(一个)

        Escape(转义)                   :select * from emp1 where ename like '%\_%' escape '\'; 

         And  or  not    与 或 非

保存到     save /home/oracle/p1_01.sql

查看    get /home/oracle/p1_01.sql  或  !cat /home/oracle/p1_01.sql 

执行   @/home/oracle/p1_01.sql

如果条件列是数字型的,可以直接写;

如果条件列是字符型或日期型的,需要使用单引号;

where 子句中使用 rownum 伪列进行限定时,使用<或<=,使用>不返回行。

select rownum,deptno,dname from dept where rownum =2; 

优先级规则:  比较操作符>not>and>or

Order by(排序)   desc (降序)  asc(升序)(默认)    例:select * from emp order by sal desc;

                                 例:select empno,ename,deptno from emp order by 3,1;

注: select 语句中有 distinct 关键字, order by 后面的列  必须出现在 select 子句中。

包含 null 值的列排序时,默认把 null 值看做无限大:

处理单行的函数 : (字符函数、日期函数、数字函数、转换函数、decode)


字符函数

lower(小写) 、upper(大写) 、initcap(首字母大写 、字符串分隔符)

Concat :  连接字符串,列,表达式   例:select concat(‘good’,‘dba’) from dual;

Substr :  截取字符串            例:select substr(‘english’,2,3) from dual;  注:2:截取位置;3:截取长度

Length:  获取字符串长度(字符数)  例:select length(‘oracle’) from dual;

Instr  : 后面字符串在前面字符串中第一次出现的次数    例:select instr(‘beijing’,’ij’,3,5) from dual;

        注:3:从第三个字符开始   4:第四次出现的位置         结果为0 则未找到

Lpad/rpad : 左补齐/右补齐          例:select  sal  lpad(sal ,6,3) from emp; 注:6:总长   3:补的字符

Trim : 去掉前后空格       例:select trim(‘  oracle    ’) from dual;  

去掉字符     Select trim(leading ‘*’ from ‘***oracle****’) from dual; 

                  注: leading(开头),trailing(结尾) ,Both(两头)   :删除字符 


数字函数

round: 四舍五入         例:select round(123.456,2) from dual;   结果:123.46

Trunc: 截取             例:select trunc(123.456,2) from dual;   结果:123.45     

Mod: 取余             例:select mod(1600,300) from dual;     结果:100


日期函数

 sysdate:   返回oracle数据库服务器操作系统当前的日期和时间    例:select sysdate from dual;

      Select sysdate ,sysdate+1 from dual;    一天之后      select sysdate ,sysdate+1/24 from dual;  一小时后                             Select sysdate ,sysdate+1/24/60 from dual;     一秒之后

 Alter session set nls_date_format=’yyyy-mm-dd hh24:mi:ss’;   修改时间格式

Months_between       两个日期之间的月数    例:           

            select empno,ename,sal months_between(sysdate,hiredate) months from emp;

 Add months   :  为日期增加月份        例:select sysdate,add_months(sysdate,1) from dual;    一个月后的现在

 Select sysdate,add_months(sysdate,[+,-] 12) from dual;  一年后/前

 next_day    :一个日期的下一个指定日子    例:select next_day(sydate,’MONDAY/3’) from dual;  下周一(当前时间)last_day    : 某月最后一天(当前时间)     例: select sysdate,last_day(sysdate) from dual;

round : 对日期四舍五入                           例: select sysdate,round(sysdate,[’mi/DD’]) from dual;

trunc : 对日期取整                                  例: select sysdate,trunc(sysdate,[’dd/mm/yyyy’]) from dual;


转换函数

 to_char                                 例:select to_char(sydate,’yyyy-mm-dd hh24:mi:ss am/AM’) from dual;  

                     例:select sal,to_char(sal,’$999.00’) from emp;  注:位数不够显示乱码


To_number : 将字符串转换为数字          

To_date  : 将字符串转换为日期

NVL(epr1,epr2)  :  如果epr1为null 则返回epr2   否则为epr1  例: select ename,sal*12+nvl(comm.,0) from emp;

NVL(epr1,epr2,epr3) : epr1非空  则返回epr2  否则 返回epr3


   

表连接:(等连接,非等连接,自然连接,外连接)

 等连接:select select emp.ename,emp.deptno,dept.deptno,dept.dname from emp,dept where emp.deptno = dept.deptno;

 非等连接:select e.empno,e.ename,e.sal,s.losal,s.hisal,s.grade from emp e,           

                 salgrade s where e.sal >= s.losal and e.sal<=s.hisal;  

外连接(左外连接)

select e.empno,e.ename,e.sal,d.deptno,d.dname  from emp e,dept d  where e.deptno=d.deptno(+); 

            右外连接:

select e.empno,e.ename,e.sal,d.deptno,d.dnam  from emp e,dept d  where e.deptno(+)=d.deptno;

全外连接:

select e.empno,e.ename,e.sal,d.deptno,d.dname  from emp e full outer join dept d  on (e.deptno=d.deptno);

        自连接: select e.empno,e.ename,e.mgr,m.empno,m.ename  from emp e,emp m  where e.mgr=m.empno;


作者:司金成 分类:学员作业 浏览:467 评论:0
留言列表
发表评论
来宾的头像

点击关闭
  • 在线客服