现在的位置: 首页 > 综合 > 正文

oralceday02

2013年02月27日 ⁄ 综合 ⁄ 共 2742字 ⁄ 字号 评论关闭

 

1.last_name的最后3个字符
 select last_name ,substr(last_name,-3,3) from s_emp;
 select last_name ,substr(last_name ,length(last_name)-2,3) from s_emp;

2.to_char(par1)函数 :可以把其他类型转成字符串
 select to_char(123) from dual;
  to_char(par1,par2) :par2表示:格式=>是单引号引起来的 'fmL'//fm可写可不写,最好写。
L:根据系统的语言选择本地货币符号
9:代表任意数字
0:代表强制显示前导0
,:千位分隔符,货币表示的形式
.:小数点
例如:'fmL999,999.99'
 select to_char(salary,'fmL099,999.00') from s_emp;
 select userenv('lang') from dua;
  oracle的语言设置环境变量 :NLS_LANG='SIMPLIFIED CHINESE_GHINA.ZHS16GBK'
   NLS_LANG='AMERICAN_AMERICA.ZHS16GBK'

!本质含义是,退出本环境去执行这个命令。 所以!表示shell哦
 如果配置错误,则会提示如下内容:
   connect access NLS_LANG....不能访问这个环境变量的值。

3。日期:
 默认的格式: dd-MON--yy
 select sysdate from dual ;
 切换成中文:dd-2月-yy  语言不同 会造成日插入失败
注意:sql脚步在英文下写的,应该切换到英文环境和日期;如果是在中文下写的,应该切换到中文环境下和日期下。否则脚本会执行出错
 
4。to_number() 可以把字符串变成数字
 select last_name from s_emp where id=1;
 select last_name from s_emp where id='1';
 以上2句话执行效果一样,这是oracle的隐士转换,所以这个to_number()变得没有什么意义了
,因为默认就是这样子的。

5。函数嵌套:
 select first_name ,manager_id ,last_name from s_emp where id = 1;
 select id,first_name,last_name,nvl(to_char(manager_id),'boss') from x;
我们可以把数字类型的字段,列转换string,然后就可以用字符来显示罗。这都可以。我勒个去阿!

6。多表查询:
  s_dept 部门表。 s_region 地区表。

7。我发现这个老师有个优点:就是什么东西都会去弄清楚,连笛卡尔积这些东西都会去调查得清楚。

8.两个表用等号做的连接---等值连接 s_emp s_dept s_region
      where a=b
   不用等号做的连接---非等值连接
     where a>1050
  特殊的连接:自连接

9。表和表的连接:
 ================================
10.外连接:一个也不能少(+)是oracle中独有的。
 外连接的结果集=内连接的结果集+内连接匹配不上的记录。
where e.managerid(+)=m.id;//即把id(+)所对应的表的所有数据都加入进来。

外连接即:1。找出2张表中符合条件的记录2。其中一张表的所有记录都包括进来。

update s_emp set salary=salary+1000 where manager_id is null;//修改数据
commit;//oracle中不是自动提交事物的,所以需要手工commit;

select first_name ,salary,grade from s_emp where salary between losal and hisal ;

select first_name ,salary ,nvl(to_char(grade),"特级") from s_emp,salgrade where salary between losal(+) and hisal(+);

=========================
insert into s_dept values(100,'it',1);//插入数据
commit;
 select * from s_dept;
 
drop table s_emp cascade constraints;//删除表
----------------------------------------------------------------------
sql99标准:外连接; 同(+)一样的
 left outer join on 条件 //左边的都拿过来
 right outer join on 条件//右边的都拿过来
 full outer join on 条件//左右都拿过来,除去重复的。

例子:select m.first,m.id,e.id from s_emp m left outer join s_emp e on e.id = m.id where e.id is null;// m 发起 连接 e,m 左,e 右

全外连接=左外连接+右外连接-重复的记录(合并结果集)
oracle 中没有直接实现的语法,可以使用union 去重(复),union all 不去重(复)

select id from s_emp union select id from s_emp;

单独的join 和 inner join的使用:
-------------------------------------------------
select first_name ,name from s_emp ,s_dept d where dept_id =d.id;

select first_name ,name from s_emp join s_dept d on dept_id =d.id;
 
select first_name ,name from s_emp inner join s_dept d on dept_id =d.id;

 

分组:
select count(id) from s_emp ;
group by 是一个集合的数据按照规则分成更小的组
where 限制行的返回
having 限制组数据的返回
组函数:
 count() avg() sum() max() min()

子查询:
  select id from dept where id=(select dept_id from s_emp where first_name = 'Carmen' );
having后可以使用子查询

老师推荐:不错
 from 后可以使用子查询:你可以把sql语句理解成一张内存表
 select * form (select * from abc) b where b.id=3;
作业:
 

 

 

 

 

 

 

抱歉!评论已关闭.