Oracle基础知识将Oracle中的日期设置为英文:alterSessionsetnls_date_language=american;SQL:结构化查询语言DML:数据操作语言insert、update、delete、mergeDDL:数据定义语言create、alter、drop、truncateDCL:数据控制语言Grantrevoke事物控制语句commitrollbacksavepoint一、关系数据库管理术语主键(PK)和外键(FK)主键:唯一识别表中记录。取值唯一,非空外键:建立表与表之间的关联关系。取值必须是所关联列中的值或空值二、数据库对象视图:表的映像真正的数据存在表里序列数(Sequence):产生主键值确保主键唯一索引(index):加快查找速度同义词或者别名(Synonym):程序单元(Programunit)PL/SQL:ProcedureLanguage/SQL过程化结构查询语言属于第三代语言只适用于Oracle在SQL添加一些过程处理语句存在过程化语言程序变得更加简单三、数据完整性约束实体:主键要求,非空唯一参考:外键必须是所关联列中的值或者是空值列:数据类型限制自定义类型的限制:符合业务规则实体完整性、参照完整性、自定义完整性Oracle9i:internetOracle10g:grid网格化计算telnetIPsqlplus(briup/briup)SQL和PL/SQL是语言SQL*Plus客户端工具第一章selectingrows一、格式:select[distinct]{*,column[alias],…..}fromtable;1)distinct删除重复的记录selectdistinctnamefroms_emp;selectdistinctdept_id,title这时distinct限制多个约束dept_id和titlefroms_emp;而且distinct要紧跟在select之后2)*选出所有的列的记录select*froms_emp;查询表中所有的信息selectdept_id,last_name,manager_idfroms_emp;将表中的属性都显示出来也就显示全表信息在java中与数据库连接时尽量不要使用*号可读性差效率低3)列标签的默认情况日期、字符串默认在左边数字数据默认在右边标签默认显示大写4)算数表达式add:+subtract:-mutiply:*divide:/5)给列指定别名selectlast_name,salary*12astotal可以将as省略froms_emp;selectlast_name,salary*12as“totalsalary”在Oracle中很少出现双引号别名是一个froms_emp;当列的别名出现空格,特殊字符或者大小写敏感时,将别名用双引号括起来6)字符串连接用twoverticalbars||来连接字符串selectfirst_name||last_nameasnamefroms_emp;selectfirst_name||‘’||last_nameasnamefroms_emp;当连接字符串时出现空格时用单引号字符串常量用单引号引起来7)空值处理空值处理NULL是不确定的无法进行比较insertintotable_namevalues(NULL,NULL);练习:查询员工的年总工资(包括提成工资,可按月基本工资进行提成)selectlast_name,title,salary*12*(1+commission_pct/100)froms_emp;这个语句将会使得没有提成的员工工资为空如果算数表达式中存在空值运算,最终运算结果为空selectlast_name,tilte,salary*12*(1+nvl(commission_pct,0)/100)froms_emp;nvl处理函数则必须处理的值类型一样nvl(start_date,’01-JAN-95’)nvl(salary,1000)8)SQL*Plus知识点sqlplususername/passworddescs_dept查看s_dept表下的列信息1、sql*plus编辑命令atext追加信息selectid如果想在id后面追加name则可以加入这个命令:a,namefromxtt_student;结果为:selectid,namefromxtt_student;c/old/new修改信息sselectidfromxtt_student;c/sselect/selectdel删除缓冲区的一行del2删除缓冲区中的第二行Itext有效行下插入内容listn查看缓冲区下某行ntext替换某行2、sql*plus文件命令savefilename把缓冲区内容写入文件中getfilename把文件的内容读到缓冲区内startfilename执行文件调用sql脚本@filename执行文件editfilename编辑文件spoolfilename记录输出查看老师视频spoolhello.sqlselectid,last_namefroms_emp;spooloff将查询的内容写到hello.sql文件中exit退出9)列命令clear:清楚列的格式限制format:改变列的显示格式heading:设置列的名字justify:设置列的排列格式左,中,右例子:columnlast_nameheading‘Employee|Name’formata15columnsalaryjustifyleftformat$99,999.00columnlast_name查看格式限制columnlast_nameclear;第二章selectingrows的限制和排序一、orderbyasc升序排序,默认desc降序排序orderby在select命令的最后--------------------------------例子-----------------------------------------selectlast_nameEMPLOYEE,start_datefroms_emporderbyEMPLOYEEdesc;按EMPLOYEE降序排列或者按位置selectlast_name,salaryfroms_emporderby1;或者selectlast_name,dept_id,salaryfroms_emp;orderbydept_id,salarydesc;则是先按dept_id升序排列,在按salary降序排列二、where字符串和日期用单引号括起来数字不需要用单引号字符大小写敏感日期默认格式DD-MON-YY1、逻辑比较操作符===!=^=2、SQL比较操作符between….and….notbetweeninnotinlikenotlikeisnullisnotnull------------------------例子-----------------------------------selectfirst_name,last_name,start_datefroms_empwherestart_datebetween’09-may-91’and’17-jun-91’;必须是小到大selectid,name,region_idfroms_deptwhereregion_idin(1,3);在某某范围之间selectlast_namefroms_empwherelast_namelike‘M%’;selectlast_namefroms_empwherelast_namelike‘\_a%’escape‘\’将\设置为转义字符selectid,name,credite_ratingfroms_customerwheresales_rep_idisnull;3、逻辑操作符andornot第三章SingleRowFunctions单行函数一、字符函数lower:lower(‘SQLServer’)sqlserver将字符串转换为小写upper:upper(‘SQLServer’)SQLSERVER将字符串转换为大写initcap:initcap(‘SQLServer’)SqlServer将字符串首字母大写concat:concat(‘Good’,‘String’)GoodString连接字符串substr:substr(‘String’,1,3)Str取字符串从1位置开始取三个length:length(‘string’)6求字符串的长度nvl:为空值指定属性值例子selectlast_name,salaryfroms_emp;wherelower(last_name)=”SMITH”;二、数字处理相关函数round:将数值四舍五入trunc:将数值截断mod:取余round(45.923,2)45.92round(45.923,0)46round(45.923)46round(45.923,-1)50负数:表示把小数点虚拟的移动几位,把小数点后面的几位四舍五入trunc(45.923,2)2表示小数点后取两位trunc(45.923)45截断trunc(45.923,-1)40mod(1600,300)100取余数三、日期类型函数a、months_between:求两个日期之间的月数selectmonths_between(’01-SEP-95’,’11-JAN-94’)fromdual;19.774194大的在前小的在后换位置为负b、add_months:将月份向后退几个月selectadd_moths(’11-JAN-94’,6)fromdual;’11-JUL-94’计算所有员工到现在入职多少天selectlast_name,start_date,sysdate-start_datedaysfroms_empc、next_day:日期的下一天selectnext_day(’01-SEP-95’,‘FRIDAY’)fromdual;’08-SEP-95’d、last_day:一个月的最后一天selectlast_day(’01-SEP-95’)fromdual;’30-SEP-95’e、round:round操作日期类型第二个参数year对月进行进位逢7进1month对天进行进位逢16进1selectround(to_date(’25-may-95’,‘DD-MON-YY’),‘month’)fromdual;01-JUN-95selectround(to_date(’25-may-95’,‘DD-MON-YY’),‘year’)fromdual;01-JAN-96f、trunctrunc操作日期类型第二个参数month对天进行舍位year对月进行舍位selecttrunc(to_date(’25-may-95’,‘DD-MON-YY’),‘month’)fromdual;01-may-95selecttrunc(to_date(’25-may-95’,‘DD-MON-YY’),‘month’)fromdual;01-JAN-95日期的默认是:DD-MON-YYselectsysdatefromdual查看当前系统时间SYSDATE是一个函数返回日期和时间没有参数g、伪列systimestamp也是一个伪列显示的时间更加精确Rownum代表行数rowid代表存储地址默认按rowid排序插入的顺序和显示的顺序不一定一样所有要根据orderby查询表中第一条记录rownum:限制a、,=无限制b、=只对1有意义c、无意义selectrownum,last_name,salaryfroms_empwhererownum=1selectsysdate+100当前时间的后100天fromdual(将默认日期按照指定的格式显示selectto_char(sysdate,'year-month-ddsp-hh24:mi