Chinaunix首页 | 论坛 | 博客
  • 博客访问: 182681
  • 博文数量: 92
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1413
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-04 21:12
文章分类
文章存档

2013年(92)

我的朋友

分类: 信息化

2013-04-26 02:39:45

1.用子查询,查询谁是普通员工 ? ? select?first_name,id from?s_emp?where id?in?(领导的id); ? ? select?first_name,id from?s_emp?where id?in?(select?distinct?manager_id?from?s_emp); ? ? select?first_name,id from?s_emp?wh  ere id?in?(1,2,3,黑盒子); ? ? select?first_name,id from?s_emp?where id not?in?(select?distinct?manager_id?from?s_emp); ? ? 注重:not??in??运用时要注重NULL值 ? ? select?first_name,id from?s_emp?where id ? ? not?in?(select?distinct?manager_id?from?s_emp?where?manager_id?is?not?null); ? ? select?first_name,id??from?s_emp?where id ? ? not?in?(select?distinct?nvl(manager_id,-1)?from?s_emp?); ? ? select?first_name,id??from?s_emp?where id ? ? not?in?(select?distinct?nvl(manager_id,1)?from?s_emp?); ? ? select?first_name,id??from?s_emp?where id not?in?(select?distinct?nvl(manager_id,25)?from?s_emp?); ????//logic??error ? ? 找出和id?是1的职位相同的员工 ? ? select?title??from??s_emp?where?id=1; ? ? select??first_name,title?from?s_emp?where?title=(select?title from s_emp?where?id=1)?and id!=1; ------------------------------------------ SQL数据类型: ? ? number???????数字类型 ? ? varchar2(n)??变长字符串 ? ? char(n)??????定长字符串??4k ? ? date?????????日期类型 ? ? CLOB?????????大字符类型??4g ? ? BLOB?????????大二进制类型?4g? 日期类型: ? ? 表达系统其时时辰???sysdate ? ? 和言语相关的-------NLS_LANG 英文默许格式 ? ? DD-MON-YY ? ? 07-NOV-12 ? ? 07-11月-12 处置日期的函数 ? ? 言语环境 ? ? 时辰的表达疑问 ? ? to_date(要改换的日期字符串,格式字符串) ? ? 建表???字段??都要遵照标识符的定义 ? ? create?table?表名( ? ? ? ? 字段名????类型, ? ? ? ? 字段名????类型, ? ? ? ? 字段名????类型 ? ? ); ? ? create?table??testtype( ? ? ? ? id?????number, ? ? ? ? fname??varchar2(10), ? ? ? ? sname??char(10), ? ? ? ? birday?date ? ? ); 刺进语句 ? ? insert?into?testtype?values(1,'xsy','xsy',sysdate); ? ? insert?into?testtype?values(9527,'zxc','zxc','01-NOV-08'); ? ? insert?into?testtype?values(9527,'zxc','zxc','01-11月-08'); ? ? ? ? to_date ? ? insert?into?testtype?values(1,'abc','abc',to_date('2008-08-08?08:08:08','yyyy-mm-dd?hh:mi:ss')); ? ? yyyy???四位年 ? ? mm?????二位月 ? ? dd?????日 ? ? hh?????12小时的???hh24 ? ? mi?????分钟 ? ? ss?????秒 ? ? day????表达星期几 ? ? mon????月的英文缩写 ? ? month??? ? ? to_char(日期,'日期格式') ? ? select?to_char(sysdate,'yyyy-mm-dd?hh24:mi:ss?day?mon')?from dual; ? ? to_date??便是按照格式放入日期 ? ? to_char??按照格式来闪现日期 日期的加减法: ? ? select?to_char(sysdate-1,'yyyy-mm-dd?hh24:mi:ss?day?mon')?from dual; 向前走一个小时 select?to_char(sysdate 1/24,'yyyy-mm-dd?hh24:mi:ss?day?mon')?from dual; 往前加一个月???往后推一个月 select?to_char(add_months(sysdate,1),'yyyy-mm-dd?hh24:mi:ss?day?mon')?from dual; select?to_char(add_months(sysdate,2),'yyyy-mm-dd?hh24:mi:ss?day?mon')?from dual; next_day??下一个星期几是几号 select?next_day(sysdate,'星期五')?from?dual; select?next_day(next_day(sysdate,'星期五'),'星期五') from?dual; last_day??本月的结尾一天 select?to_char(last_day(sysdate),'yyyy-mm-dd?hh24:mi:ss?day?mon')?from dual; 补偿: round(日期) select?to_char(sysdate,'yyyy-mm-dd?hh24:mi:ss?day?mon'),to_char(round(sysdate 1/24),'yyyy-mm-dd?hh24:mi:ss?day?mon')?from dual; 默许对天进行四舍五入? select?to_char(sysdate,'yyyy-mm-dd?hh24:mi:ss?day?mon'),to_char(round(sysdate,'mm'),'yyyy-mm-dd?hh24:mi:ss?day?mon')?from dual; select?to_char(sysdate,'yyyy-mm-dd?hh24:mi:ss?day?mon'),to_char(round(sysdate,'y'),'yyyy-mm-dd?hh24:mi:ss?day?mon')?from dual; trunc(日期) select?to_char(sysdate,'yyyy-mm-dd?hh24:mi:ss?day?mon'),to_char(trunc(sysdate,'mm'),'yyyy-mm-dd?hh24:mi:ss?day?mon')?from dual; select?to_char(sysdate,'yyyy-mm-dd?hh24:mi:ss?day?mon'),to_char(trunc(sysdate,'y'),'yyyy-mm-dd?hh24:mi:ss?day?mon')?from dual; 在一个月的任何时辰实行一条语句,得到的都是下一个月的初步的时辰 to_char() trunc(add_months(sysdate,1),'mm') trunc(last_day(sysdate) 1) ---------------------------------------------- SQL捆绑的种类 ? ? 主键????------primary?key ? ? 仅有????------unique ? ? 非空????------not?null ? ? 检查????------check ? ? 外键????------foreign?key??references 表上建立捆绑:对数据的结尾一道屏障?? ? ? 主键????------仅有??且?非空,一个表最多只能有一个主键 ? ? 仅有????-----------不能有重复的 ? ? 非空????-----------不能有NULL值 ? ? 检查????------字段要符合检查条件 ? ? 外键????------------涉及到两张表 ? ? ?s_dept??-----id??(主表) ? ? ?s_emp???-----dept_id(子表) ????定义了外键的表便是子表 ? ? ?s_dept??-----region_id ? ? ?s_region?----id(主键) ????外键:引用主表的字段,有必要有仅有性捆绑。外键的取值只能是主表字段的值,要么是NULL,这样能保证子表数据的完整性,一旦违反外键捆绑,就会报数据完整性捆绑。 捆绑的语法: 列级捆绑:在定义表的列的时分?直接定义的捆绑 1.主键-------列级 create?table???testconstraint_pk( ????id????number, ????name??varchar(30) ); insert?into?testconstraint_pk?values(1,'aobama'); drop?table??testconstraint_pk; create?table???testconstraint_pk1( ????id????number?primary?key, ????name??varchar(30) ); insert?into?testconstraint_pk1?values(1,'aobama'); 如果违法捆绑?会出现系统的捆绑名 create?table???testconstraint_pk2( ????id????number?constraint? ????testconstraint_pk2_id_pk?primary?key, ????name??varchar(30) ); insert?into?testconstraint_pk2?values(1,'aobama'); 需要咱们建立一张表?有两个字段? id???number name?varchar2(20) 需要id?设置列级的主键捆绑?? ????name?设置列等级的仅有性捆绑 create??table???test_c_pkuk( ????id?????number?constraint? ????test_c_pkuk_id_pk?primary?key, ????name???varchar(30)?constraint ????test_c_pkuk_name_uk?unique ); insert?into?test_c_pkuk?values(211,'abc'); 0001:?违反仅有捆绑条件?(OPENLAB.TEST_C_PKUK_NAME_UK) not??null??的列级捆绑和主键言语相同 检查捆绑 需要咱们建立一张表?有两个字段? id???number salary??number 需要id?设置列级的主键捆绑?? ????salary?设置列等级的检查捆绑??需要薪酬 ????大于3500 create??table???test_c_pkck( ????id?????number?constraint? ????test_c_pkck_id_cpk?primary?key, ????salary???number?constraint ????test_c_pkck_salary_ck??check(salary>3500) ); insert?into?test_c_pkck?values(10087,3500); 表级捆绑:在全部的列定义完成后??对表的某些 列加的捆绑 为什么要有表级捆绑? 建立一张表??有三个字段 fid???number? sid???number? name??varchar2(30) 需要?fid??和?sid??联合做主键 需要?fid??和?sid??联合仅有 处置联合捆绑 not??null??这个捆绑?不可能出现联合非空 全部not?null??没有表级捆绑 语法方法如下: create?table??test_table_pk( ????id???number, ????name??varchar2(30), ????salary?number, ????constraint??test_table_pk_id_pk?? ????primary?key(id) ); 运用表等级捆绑建立表 fid???????number sid???????number name??????varchar2(20) salary????number fid??sid??要联合做主键 name???仅有 salary??需要大于8000? create?table??test_table_con1001( ????fid???????number, ????sid???????number, ????name??????varchar2(20), ????salary????number, ????constraint??test_table_con1001_fsid_pk? ????primary?key(fid,sid), ????constraint??test_table_con1001_name_uk ????unique(name), ????constraint??test_table_con1001_salary_ck ????check(salary>8000) ); -------------------------------- 外键: ?????--主表:有些表 ?????drop?table?myemp; ?????drop?table?mydept; ?????create??table??mydept( ?????????id?????number?primary?key, ??name???varchar2(30) ?????); ????/*子表:员工表*/ ?????create??table??myemp( ?????????id????number??primary?key, ?????????name??varchar2(30), ?????????fid???number?constraint?myemp_fid_fk ?????????references??mydept(id)? ?????); ? 1.先建立主表??后子表 2.刺进数据?一般先刺进主表?? ??除非子表的外键运用NULL值 ??insert?into??mydept?values(1,'test'); ??insert?into??myemp?values(2,'taoge',1); 3.删去?数据?先删去子表??后删父表 ??除非你设置了级联(级联置空??级联删去)? 4.删去表 ??先删子表?后删父表 ??drop???table??s_dept?cascade?constraints;? ??(先革除主外键联络?再删去表) 把下面的外键联络改成?表级外键捆绑 ?????create??table??mmdept( ?????????id?????number?primary?key, ??name???varchar2(30) ?????); ????/*子表:员工表*/ ?????create??table??mmemp( ?????????id????number??primary?key, ?????????name??varchar2(30), ?????????fid???number?, ??constraint?mmemp_fid_fk ?????????foreign??key(fid)? ??references??mmdept(id)? ?????); 级联??-----级联置空???级联删去 drop?table?mmdept; drop?table?mmemp; ????create??table??mmdept( ?????????id?????number?primary?key, ??name???varchar2(30) ?????); ?????insert?into?mmdept?values(1,'test'); ?????commit; ????/*子表:员工表*/ ?????create??table??mmemp( ?????????id????number??primary?key, ?????????name??varchar2(30), ?????????fid???number?, ??constraint?mmemp_fid_fk ?????????foreign??key(fid)? ??references??mmdept(id)? ??on?delete?cascade? ?????); ?????insert?into?mmemp?values(1,'zs',1); ?????insert?into?mmemp?values(2,'zss',1); ?????insert?into?mmemp?values(3,'zsss',1); ?????commit; 当主表删去数据时级联?删去子表相关的数据 ?create??table??mmemp( ?????????id????number??primary?key, ?????????name??varchar2(30), ?????????fid???number?, ??constraint?mmemp_fid_fk ?????????foreign??key(fid)? ??references??mmdept(id)? ??on?delete?set?null? ?????); ------------------------------------------ 捆绑: ???5类捆绑----a??b?c??d??e ???语法----表级?和列等级 ???not???null ???check ???外键----级联置空??删去 ------------------------------------------ 数据库中dml insert??? delete?? update? 1.刺进语句?????insert create?table??testdmla( ????id????number??primary?key, ????fname???varchar2(10), ????sname???char(10) ); insert??into??表名??values? (字段值1,字段值2,....); 刺进值的次第?和?desc??出现的字段次第相同 insert?into??testdmla?values(1,'abc','abc'); select??length(fname)?,length(sname)??from? testdmla; select?*?from?testdmla?where?fname='abc'; select?*?from?testdmla?where?sname='abc'; select?*?from?testdmla?where?fname='abc??'; select?*?from?testdmla?where?sname='abc??'; 定长字符串?如果数据长度不可则补空格 insert?into?testdmla(id,sname)? values(100,'baoge'); 有必要包含全部的非空字段 注册一个帐号? insert?into?testdmla??values(10086, 'quange','chen'); insert?into?testdmla??values(10087, 'moyan','mo'); commit;???------供认本次事务(生意)? rollback;?------吊销本次事务(生意)?? 一般??事务谁主张??谁结束 drop?table?testdmla; create?table??testdmla( ????id????number??primary?key, ????fname???varchar2(30), ????sname???char(30) ); insert?into?testdmla???select?id ,first_name,last_name?from?s_emp; insert?into?testdmla(id,fname)???select?id ,first_name?from?s_emp; 2.删去数据 ??delete??from??表名?where?条件; ??delete?from?testdmla?where?id=1; ??commit; ??rollback; 3.更新数据?update ??update???表名??set??字段名=值 ??,字段名2=值?where??条件; ??update??testdmla??set?fname='who' ??where??id=10086; dml?语句都具有事务特性???事务对错自动 提交的 ddl??是自动提交事务 select??没有事务特性 ?  
阅读(341) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~