飞道的博客

Oracle数据库基本SQL语句2:应付90%日常查询,过一下看都会没有

322人阅读  评论(0)

第一部分地址:https://blog.csdn.net/scut_yfli/article/details/104786477

六、格式转换


  
  1. --TO_NUMBER
  2. select to_number( '123') from dual; --123
  3. --TO_DATE
  4. select * from table1 where birthdate = to_date( '1980年12月17日', 'yyyy"年"mm"月"dd"日"');
  5. select * from table1 where hiredate = to_date( '1980-12-17', 'yyyy-mm-dd');
  6. --TO_CHAR
  7. select to_char( sysdate, 'yyyy "年" mm "月" dd "日" day') from dual; --2020年 03 月 10 日 星期二
  8. select to_char( 1234, '$9,999') from dual; --$1,234

七、字符处理函数


  
  1. --ASCII码转换为字符
  2. select chr( 65) from dual; --A
  3. --字符转换为ASCII码
  4. select ascii( 'A') from dual; --65

八、数据判断处理


  
  1. --处理Null值
  2. select nvl( null, 10) value from dual; --10
  3. select nvl(score, 10) score from student; --score不为空时返回10
  4. select nvl2( null, 10, 20) value from dual; --20
  5. select nvl2(score, 10, 20) score from student; --score不为空时返回10
  6. --decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
  7. select decode( sign(变量 1-变量 2), -1,变量 1,变量 2) from dual; --实现取变量1、变量2中的较小值
  8. --使用case分类
  9. select case when score between 0 and 60 then 'F'
  10. when score between 60 and 80 then 'C'
  11. when score between 80 and 90 then 'B'
  12. when score between 90 and 100 then 'A'
  13. else 'NULL'
  14. end
  15. from table1;

九、表连接

关于各种连接的解释,参考文章:https://blog.csdn.net/scut_yfli/article/details/104665248


  
  1. --左外部连接:
  2. select * from table1 left join table2 on table1.key = table2.key
  3. select * from table1,table2 where table1.key = table2.key(+)
  4. --右外部连接
  5. select * from table1 right join table2 on table1.key = table2.key
  6. select * from table1,table2 where table1.key(+) = table2.key
  7. --完全外部连接
  8. select * from table1 full outer join table2 on table1.key = table2.key
  9. --内部连接
  10. select * from table1 inner join table2 on table1.key = table2.key
  11. --左反连接
  12. select * from table1 left join table2 on table1.key = table2.key where table2.key is null
  13. --右反连接
  14. select * from table1 right join table2 on table1.key = table2.key where table1.key is null
  15. --全反连接
  16. select * from table1 full outer join table2 on table1.key = table2.key where table1.key is null or table2.key is null

十、集合操作


  
  1. --并集:将查询的返回组合成一个结果, union all不过滤重复
  2. select * from table1 where id < 4
  3. union
  4. select * from table1 where id > 2 and id < 6
  5. --交集:返回查询结果中相同的部分
  6. select * from table1 where id < 4
  7. intersect
  8. select * from table1 where id > 2 and id < 6
  9. --差集:返回在第一个查询结果中与第二个查询结果不相同的那部分行记录
  10. select * from table1 where id < 4
  11. minus
  12. select * from table1 where id > 2 and id < 6

十一、性能相关
 


  
  1. --表压缩
  2. alter table table1 move compress; --压缩
  3. alter table table1 move nocompress; --解压
  4. --取消表日志
  5. alter table table1 nologging;
  6. alter table table1 logging;
  7. --改变优化器模式
  8. select /*+ rule */ * from table1 where id = 100;

十二、函数及过程


  
  1. --函数:编写一个函数计算学生某一门课程在班级内的排名
  2. create or replace function sf_score_pm(
  3. p_in_stuid in varchar2, --学号
  4. p_in_courseid in varchar2 --课程ID
  5. )
  6. return number
  7. is
  8. ls_pm number:= 0;
  9. ls_score number:=0;
  10. begin
  11. --获取该学生的成绩
  12. select t.score into ls_score from score t
  13. where t.stuid = p_in_stuid
  14. and t.courseid = p_in_courseid;
  15. --获取成绩比该学生高的人数
  16. select count( 1) into ls_pm from score t
  17. where t.courseid = p_in_courseid
  18. and t.score>ls_score;
  19. --得到该学生的成绩排名
  20. ls_pm:=ls_pm+1;
  21. return ls_pm;
  22. exception
  23. when no_data_found then
  24. dbms_output.put_line('该学生的课程:'||p_in_courseid|| '的成绩在成绩表中找不到');
  25. end;
  26. --过程:与函数类似,但没有返回值
  27. create or replace procedure sf_score_pm(
  28. p_in_stuid in varchar2, --学号
  29. p_in_courseid in varchar2 --课程ID
  30. )
  31. as
  32. begin
  33. --......
  34. end;

 


转载:https://blog.csdn.net/scut_yfli/article/details/104787772
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场