Oracle9i第5章SQL基础.ppt
《Oracle9i第5章SQL基础.ppt》由会员分享,可在线阅读,更多相关《Oracle9i第5章SQL基础.ppt(59页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章第四章 SQL SQL基础基础SELECTSELECT语句语句SELECT SELECT 的简单语法:的简单语法:SELECT DISTINCT|ALL*|column1,column2.SELECT DISTINCT|ALL*|column1,column2.FROM table_1|(subquery)aliasFROM table_1|(subquery)alias,table_2|(subquery)alias.,table_2|(subquery)alias.WHERE conditionWHERE conditionCONNECT BY condition START WIT
2、H conditionCONNECT BY condition START WITH conditionGROUP BY expn HAVING expnGROUP BY expn HAVING expn UNION ALL|INTERSECT|MINUS SELECT.UNION ALL|INTERSECT|MINUS SELECT.ORDER BY expn ASC|DESC ORDER BY expn ASC|DESC FOR UPDATE OF user.table|view column FOR UPDATE OF user.table|view column NOWAITNOWAI
3、T简单简单SELECTSELECT查询查询select deptno,dname,loc from dept;select deptno,dname,loc from dept;select deptno,dname,loc from dept order by dname;select deptno,dname,loc from dept order by dname;select*from dept order by deptno desc,dname;select*from dept order by deptno desc,dname;select*from dept order by
4、 dname,deptno asc;select*from dept order by dname,deptno asc;select*from dept where dname like%SA%order by select*from dept where dname like%SA%order by deptno desc,dname;deptno desc,dname;注意:注意:n在在SQLSQL语句中,引用的字符串必须在单引号内,而不是双引号。语句中,引用的字符串必须在单引号内,而不是双引号。n如果需要在字符串内放如果需要在字符串内放“”号,应该写两次。比如语句号,应该写两次。比如语
5、句“select select*from dept where dname=SAES*from dept where dname=SAES”中的中的“SAESSAES”字符字符就是如此。就是如此。n要注意空值的表示方法是要注意空值的表示方法是IS NULLIS NULL或或IS NOT NULLIS NOT NULL。n在在OracleOracle中使用中使用%来匹配任何字符串使用来匹配任何字符串使用_ _来匹配任何字符。来匹配任何字符。汇总数据汇总数据select count(*)from dept;select count(*)from dept;select deptno,count(*
6、)from emp group by deptno;select deptno,count(*)from emp group by deptno;将返回工资总额小于将返回工资总额小于1000010000的部门和实际工资总额的部门和实际工资总额select deptno,sum(sal)from emp group by deptno select deptno,sum(sal)from emp group by deptno having sum(sal)10000;having sum(sal)10000;select count(distinct deptno)from emp;selec
7、t count(distinct deptno)from emp;内连接内连接select a.empno,a.ename,a.job,b.dname select a.empno,a.ename,a.job,b.dname from emp a,dept b from emp a,dept b where a.deptno=b.deptno;where a.deptno=b.deptno;外连接外连接外部关联关联了两个表并使得即使第二个表没有与第一个表符外部关联关联了两个表并使得即使第二个表没有与第一个表符合的记录也能返回结果。合的记录也能返回结果。select dept.deptno,em
8、p.ename,bonus.sal,m select dept.deptno,emp.ename,bonus.sal,m from emp,dept,bonus where emp.deptno(+)=dept.deptno from emp,dept,bonus where emp.deptno(+)=dept.deptno and bonus.ename(+)=emp.ename;and bonus.ename(+)=emp.ename;注意:注意:n表可以外部连接到至多一个其它的表表可以外部连接到至多一个其它的表nOracleOracle是使用的是是使用的是(+)(+)号作为外连接标识号
9、作为外连接标识交叉连接交叉连接n交叉连接不带交叉连接不带WHEREWHERE子句,它返回被连接的两个表所有数子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。条件的数据行数。n在表中有数据的情况下:在表中有数据的情况下:select ycit.*,ycit1.*from ycit,ycit1;select ycit.*,ycit1.*from ycit,ycit1;select deptno,ena
10、me from emp where deptno in(select select deptno,ename from emp where deptno in(select deptno from dept);deptno from dept);select deptno,ename from emp a where exists select deptno,ename from emp a where exists(select loc from dept b where(select loc from dept b where a.deptno=b.deptno);a.deptno=b.d
11、eptno);连接查询连接查询比如有两张表比如有两张表empemp和和log_emplog_emp,其中,其中empemp中保存的是现行编中保存的是现行编制员工的编号和姓名,制员工的编号和姓名,log_emplog_emp中保存着已经退休员工的中保存着已经退休员工的编号和姓名。如果要查询所有员工信息,可以执行下面的编号和姓名。如果要查询所有员工信息,可以执行下面的操作:操作:select empno,ename from emp select empno,ename from emp union union select empno,ename from log_emp;select empn
12、o,ename from log_emp;使用空值使用空值空值是三值逻辑,以下列语句为例:空值是三值逻辑,以下列语句为例:select*from emp where deptno=10 and deptno 10select*from emp where deptno=10 and deptno 10等同于等同于select*from emp where deptno is not nullselect*from emp where deptno is not null插入新数据插入新数据向表中插入行的一般用法:向表中插入行的一般用法:insert into tablename(column1
13、,column2,column3insert into tablename(column1,column2,column3,)values(value1,value2,value3,)values(value1,value2,value3,););注意:注意:只要值的列表和表的列名精确匹配,就可以省略列全部列表。只要值的列表和表的列名精确匹配,就可以省略列全部列表。如,如果向如,如果向deptdept表中增加一个新的部门,可以通过下面语句:表中增加一个新的部门,可以通过下面语句:insert into dept(deptno,dname,loc)values(50,insert into de
14、pt(deptno,dname,loc)values(50,System,Nanjing);System,Nanjing);插入一个查询结果插入一个查询结果insert into tablename(column1,column2,column3insert into tablename(column1,column2,column3,)subquery;)subquery;insert into bonus insert into bonus select ename,job,sal,comm from emp;select ename,job,sal,comm from emp;在在INS
15、ERTINSERT语句中没有给出列的列表,意味着在语句中没有给出列的列表,意味着在BONUSBONUS表中表中的全部列都必须和的全部列都必须和SELECTSELECT查询中的对应列的排列次序相同。查询中的对应列的排列次序相同。更新数据更新数据UPDATE tablenameUPDATE tablenameSET column1=value1,SET column1=value1,Column2=values2,Column2=values2,WHERE condition;WHERE condition;update dept set loc=Shanghai where deptno=50;
16、update dept set loc=Shanghai where deptno=50;使用基于子查询的更新使用基于子查询的更新UPDATE tablenameUPDATE tablenameSET(column1,column2,SET(column1,column2,)=)=(SELECT column3,column4,(SELECT column3,column4,FROM tablename2FROM tablename2WHERE conditions1)WHERE conditions1)WHERE conditions2;WHERE conditions2;update bo
17、nus update bonus set(job,sal,comm)=(select job,sal,comm set(job,sal,comm)=(select job,sal,comm from emp from emp where empno=7788)where empno=7788)where ename=SCOTT;where ename=SCOTT;n注意:注意:无论什么时候在更新语句的无论什么时候在更新语句的SELECTSELECT子句中使用子查询时,都子句中使用子查询时,都必须确认子查询确实返回了一行。必须确认子查询确实返回了一行。如果子查询没有返回行,那么所有被更新的列都将
18、被置为空。如果子查询没有返回行,那么所有被更新的列都将被置为空。如果子查询返回的不止一行,如果子查询返回的不止一行,OracleOracle将返回一个错误信息。将返回一个错误信息。删除数据删除数据使用使用DELETEDELETE命令从表中删除行。命令的基本形式如下所示:命令从表中删除行。命令的基本形式如下所示:DELETE FROM tablename WHERE condition;DELETE FROM tablename WHERE condition;delete from log_emp where deptno=10;delete from log_emp where deptno
19、=10;TRUNCATE tablenameTRUNCATE tablenameSQLSQL中的单记录函数中的单记录函数nOracleOracle的的SQLSQL语句中用到的函数分为单值函数和多值函数,语句中用到的函数分为单值函数和多值函数,单值函数又分为字符函数和数字函数。单值函数又分为字符函数和数字函数。单记录字符函数单记录字符函数ASCII()ASCII()是字符串。返回与指定的字符对应的十进制数。是字符串。返回与指定的字符对应的十进制数。select ascii(A)A,ascii(a)a,ascii(0)select ascii(A)A,ascii(a)a,ascii(0)zero,
20、ascii()space from dual;zero,ascii()space from dual;select ascii(select ascii(赵赵)zhao,length()zhao,length(赵赵)leng from)leng from dual;dual;CHR(NCHAR)CHR(NCHAR)给出整数,返回对应字符。给出整数,返回对应字符。select chr(54740)zhao,chr(65)chr65 from dual;select chr(54740)zhao,chr(65)chr65 from dual;CONCAT(,)CONCAT(,)select con
21、cat(select concat(010-010-,8801 81598801 8159)|)|转转2323 赵元杰电话赵元杰电话 from dual;from dual;INITCAP()INITCAP()返回字符串返回字符串c1 c1 并第一个字母变为大写。并第一个字母变为大写。select initcap(simth)upp from dual;select initcap(simth)upp from dual;INSTR(,)INSTR(,)在一个字符串中搜索指定的字符,返回发现指定的字符的在一个字符串中搜索指定的字符,返回发现指定的字符的位置。位置。C1:C1:被搜索的字符串被搜
22、索的字符串C2:C2:希望搜索的字符串希望搜索的字符串I:I:搜索的开始位置,缺省是搜索的开始位置,缺省是1 1J:J:出现的位置,缺省是出现的位置,缺省是1 1。SELECT INSTR(Oracle Training,ra,1,2)SELECT INSTR(Oracle Training,ra,1,2)Instring FROM DUAL;Instring FROM DUAL;INSTRB(,)INSTRB(,)除了返回的字节外除了返回的字节外 ,与,与INSTR INSTR 相同。相同。LENGTH()LENGTH()返回字符串返回字符串 c c 的长度。的长度。select name,
23、length(name),addr,length(addr),sal,select name,length(name),addr,length(addr),sal,length(to_char(sal)length(to_char(sal)from nchar_tst from nchar_tstNAME LENGTH(NAME)ADDR LENGTH(ADDR)SAL LENGTH(TO_CHAR(SAL)NAME LENGTH(NAME)ADDR LENGTH(ADDR)SAL LENGTH(TO_CHAR(SAL)赵元杰赵元杰 3 3 北京市海淀区北京市海淀区 6 99999.99 8
24、6 99999.99 8LENGTHB()LENGTHB()以字节返回字符串的字节数。以字节返回字符串的字节数。select name,lengthb(name),length(name)select name,lengthb(name),length(name)from nchar_tst;from nchar_tst;NAME LENGTHB(NAME)LENGTH(NAME)NAME LENGTHB(NAME)LENGTH(NAME)-赵元杰赵元杰 6 3 6 3LOWER()LOWER()返回字符串并将所有字符变为小写。返回字符串并将所有字符变为小写。select lower(AaBb
25、CcDd)AaBbCcDd from dual;select lower(AaBbCcDd)AaBbCcDd from dual;UPPER()UPPER()将给出字符串变为大写。将给出字符串变为大写。select upper(AaBbCcDd)AaBbCcDd from dual;select upper(AaBbCcDd)AaBbCcDd from dual;RPAD(stringRPAD(string,LengthLength,set)set)LPAD(stringLPAD(string,LengthLength,set)set)RPAD RPAD在列的右边粘贴字符;在列的右边粘贴字符;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle9i SQL 基础
限制150内