




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、java企业级项目开发班oracle 10g课堂笔记2015年10月30日目 录第一章:oracle 10g介绍一、oracle 10g安装二、oracle 10g 设置命令开始运行 输入 sqlplus打开oracel操作客户端登录用户: scott 密码:tiger在输入用户名: 用户名/密码注销登录: quit 可以退出当前登录状态从当前账户切换到另一个指定账户上connect 用户名/密码对一个账户进行锁定和解锁操作第一步: 以管理员的身份登录,然后去解锁普通锁定的用户说明需要登录的用户被锁定,必须通过解锁后才能登录解锁命令: alter user 普通账户名 account unlo
2、ck|lock;unlock :解锁 lock:锁定注意:必须在管理员身份登录后才能进行解锁或锁定操作清理屏幕host cls 将当前屏幕清理对命令窗口进行属性的修改:为了方便显示数据将命令窗口的宽: 300 个字符, 行:9999设置查询数据显示的一行字符数:set linesize 300;注意:每一次进入客户端进行数据显示的时候,都必须重新设定设置一页显示行数set pagesize 30; 注意:每一次进入客户端进行数据显示的时候,都必须重新设定若system用户被锁定,怎么样来进行解锁锁定systemSystem/managerAlter user system account lo
3、ck;解锁systemSystem/manager as sysdbaAlter user system account unlock;登录 sys账户Sys/admin as sysoperSql语言: sql89、sql92、sql99结构化的查询语言:定义功能(DDL): create drop alter 主要对于结构进行修改操作功能(DML):insert update delete 主要对记录进行修改查询功能(DQL):select 查询控制功能(DCL):第二章:SQL查询语言的语法Scott用户下表结构:雇员表字段名类型字段中文说明EmpnoNumber(4) 主键雇员编号En
4、ameVarchar2(10) 雇员姓名JobValurchar2(9)职称MgrNumber(4)领导编号Hiredatedate入职日期SalNumber(7,2)工资CommNumber(7,2)奖金DeptnoNumber(2)部门编号部门表字段名类型字段中文说明DeptnoNumber(2)部门编号DnameVarchar2(14)部门名称LocVarchar2(13)地址工资等级表字段名类型字段中文说明GradeNumber工资等级LosalNumber最低工资HisalNumber最高工资SQL查询语言:一、 简单查询SELECT ALL|DISTINCT<字段名列表>
5、;|常量|表达式 Select <所求内容> :查询结果中的列Select <所求内容> from <来自的表名列表>查询出雇员表的所有信息Select * from emp;* :代表指定表的所有字段名列表select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;Select后面:可以跟指定的字段名列表,每一个字段之间用逗号隔开查询出雇员姓名和工资信息(投影)select ename as 雇员姓名,sal 工资 from emp;Select后面查询某一个字段,给结果字段重新取名(别名)A)
6、 字段名 as 别名B) 字段名 空格 别名可以一个表取别名Select a.empno,a.ename from emp a;通常给表名取别名: 表名 空格 别名 给字段取别名 ,字段名 as 别名Ed命令的使用(可以将sql语句写在指定的文本文件中,然后引入执行)Ed 回车会自动修改上一条执行过sql语句,并且打开文件后可以对语句进行修改,修改后保存按/回车就可以执行修改好的命令Ed 文件名 回车文件名:是一指定的文件,若文件存在,直接打开,若不存在会提示创建该文件可以引入外部写好sql语句文件直接执行 文件名 回车查询出雇员表的职称,重复出现只显示一次Select distinct jo
7、b from emp;Select all|distinct :all:默认情况,将重复记录显示出来 Distinct :去掉查询结果中的重复记录重复记录:水平上一横数据都一模一样将雇员表按下列格式显示出来雇员编号为:7369 雇员姓名:jack 职称是:manager 入职日期:select 'empno: '|empno|' ename:'|ename|' job: '|job|' mgr: '|mgr |' sal: '|sal from emp;Select 后面可以出现常量,和其他不连接用 “|”该常量所
8、在位置,是结果中一个列,并且其值是其本身查询出雇员的年薪select ename as 雇员姓名,sal*12 as 年薪 from empSelect后面可能出现表达式,查询不会改变原表中的值,若结果中的值需要改变时,必须在select后面跟表达式二、限定查询格式: select <所求内容> from <表名列表>where <筛选条件>所求内容: distinct <字段名列表><常量><表达式>查询出雇员工资大于或等于3000的所有雇员信息思路:筛选条件:sal >= 3000所求内容:empno,ename
9、,job,mgr,hiredate,sal,comm,deptno所用的表:empselect empno,ename,job,mgr,hiredate,sal,comm,deptno from emp where sal >= 3000;书写条件:字段名 运算符 具体的值查询出JONES员工的信息思路:筛选条件:ename = JONES所求内容: *所用的表: empSelect * from emp where ename = JONES注意问题:1. 查询的值是字符型,写值的时候必须使用定界符单引号内2. 查询值必须分大小写,sql语句书写的其他地方部分大小写查询出工资大于等于1
10、000并小于等于2500之间的所有员工信息思路:筛选条件:sal >= 1000 and sal <=2500所求内容:*所用的表:empselect * from emp where sal>=1000 and sal <=2500与运算:必须两个条件都要同时满足的记录才会显示在结果中条件1 and 条件2 and 条件3查询出工资在3000以上,或职称为MANAGER的所有职工筛序条件:sal >3000 or job = MANAGER所求内容:*所用的表:empselect * from emp where sal > 3000 or job = &
11、#39;MANAGER'或运算:表示只要满足其中一个条件即可条件1 or 条件2 or条件3查询出职称为MANAGER或SALESMAN,并且工资在2000到3000之间(含)的雇员信息。思路:筛选条件:(job=MANAGER OR JOB=SALESMAN) AND (SAL>=2000 AND SAL<=3000)所求内容:*所用的表:empselect * from emp where (job='MANAGER' OR JOB='SALESMAN') AND (SAL>=800 AND SAL<=3000);注意:运算过
12、程中and优先级别高于or的,注意加括号来改变优先级别设置日期显示的格式:alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'查询出奖金为空的所有员工信息筛选条件: comm is null Select * from emp where comm is null;查询奖金不为空的雇员信息Select * from emp where comm is not null;查询出职称为 MANAGER,SALESMAN,CLERK的雇员信息做法1: Select * from emp where job='MAN
13、AGER' OR JOB='SALESMAN' OR JOB='CLERK'做法2:Select * from emp where job in('MANAGER', 'SALESMAN', 'CLERK');字段名 in|not in (值的列表)In: 属于Not in:不属于查询出以雇员姓名中包含有N字符的所有雇员信息select * from emp where ename like '%N%'模糊查询条件: 字段名 like 带有通配符的字段值通配符: %:可以和任意多个字符相匹配
14、(匹配即相等) _:可以和任意一个字符相匹配查询出雇员姓名中第二个字符为I的所有雇员信息select * from emp where ename like '_I%'查询出工资在1000到3000之间的职工 姓名和职称思路:筛选条件: sal >=1000 and sal <=3000所求内容: ename,job所用的表: empSelect ename,job from emp where sal >=1000 and sal <=3000查询出工资在1000到2000之间(含)的所有雇员信息字段名 between <下限值> and
15、<上限值> :写在where后面,表示指定字段的值在上下限值之间并且包含上下限值。select * from emp where sal>=1000 and sal<=2000;select * from emp where sal between 1000 and 2000;Oracle数据库中的单行函数单行函数:只对一个值进行操作单行函数的语法单行函数名(字段名|表达式,参数1,参数2,)参数说明:Fuction_name 函数名称column 列名expression 表达式arg1,arg2, 参数单行函数分类:字符函数:接收字符输入并返回字符或数值数值函数:接
16、受数据输入并返回数值日期函数:对日期型数据进行操作转换函数:从一种数据类型转换为另外一种数据类型通用函数:NVA 函数 DECODE 函数字符函数:接收字符输入并返回字符或数值1、lower(字符表达式)函数原型: lower(字符表达式) 返回:字符串功能:将指定字符串转化为小写 注意:伪表 dual例题1:select lower('HELLO WORLD!') from dual;例题2:查询出job中含有G字母的雇员姓名,职称(g字母大小写不区分)select ename as 雇员姓名,job as 职称 from emp where lower(job) like
17、'%g%'2、upper(字符表达式) 函数原型: upper(字符表达式) 返回值类型:字符型功能:将小字母转换为大写字母select upper('hello world!') as result from dual;3、initcap(字符表达式) 函数原型:initcap(字符表达式) 返回值类型: 字符型功能:将制定字符串的首字母转换为大写字母,其余字符小写select initcap('hello WORLD!') as result from dual;4、concat(字符串表达式1,字符串表达式2)函数原型: concat(字符
18、串表达式1,字符串表达式2) 返回值类型: 字符串功能: 将指定两个字符串进行收尾连接,最终成为一个字符串和 <字符表达式1 >| <字符表达式2> 等价,字符常量必须写在一对单引号之间select concat('hello','world') as result from dual;select 'hello'|'world' as result from dual;select concat(ename,job) as result from emp;5、substr(字符表达式,起始位置,长度)函数
19、原型:substr(字符表达式,起始位置,长度)功能:从指定的字符表达式中取出从起始位置到规定长度的子串注意:1) 改函数若省略,长度,从起始位置一直取到字符串的尾部2) 起始位置:可以为正式时,从左边开始计数,若为负数时,从右边开始计数若起始位置的值为0或1的时候,从左边第一个开始取子串(包含起始位置)3)column <字段名> format a<列宽> 功能:设置指定字段的显示列宽,一遍将列名显示完全6、length(字符表达式)函数原型:length(字符表达式) 返回值类型: 数值型功能:返回指定字符串的长度注意:汉字并不是两个宽度查询出雇员名字有6个字符组成
20、的所有雇员信息select * from emp where length(ename) = 6;7、replace(字符表达式1,字符表达式2,字符表达式3)函数原型: replace(字符表达式1,字符表达式2,字符表达式3) 返回值类型:字符型功能:在字符表达式1中寻找到字符表达式2的内容时用字符表达式3来替换注意:1) 该函数区分大小写2) 将字符表达式3用空串来代替时,可以删除字符表达式1中的指定字符表达式28、chr(整数)函数原型:chr(整数) 返回值类型:字符型 功能:将指定整数作为ASCII码返回对应的一个字符select chr(65) as result from du
21、al;9、ascii(字符)函数原型:ascii(字符) 返回值类型:数值型 功能:将指定字符的ASCII码返回select ascii('A') from dual;数值型函数函数说明ABS(value)返回指定数值的绝对值CEIL(value)返回大于或等于Value的最小整数值FLOOR(value)返回小于或等于value的最大整数值COS(value)求余弦值COSH(value)求反余弦值EXP(value)返回以e为底的指数值LN(value)返回以value为底的自然对数LOG(x,y)返回以x为底y的对数POWER(value,exponent)求value的
22、exponent的指数值ROUND(value,precision)按value的precision精度四舍五入MOD(value,divisor)取余SQRT(value)返回value的平方根trunc(value)取整数部分,不会进行四舍五入操作1、abs(数值)函数原型Abs(数值表达式)功能返回数值表达式的绝对值例题select abs(-100) as result from dual;2、ceil(数值表达式)函数原型ceil(数值表达式)功能大于或等于数值表达式的最小整数例子3、Floot(数值表达式)函数原型Floot(数值表达式)功能小于或等于数值表达式的最大整数例题pow
23、er(数值表达式1,数值表达式2)函数原型power(数值表达式1,数值表达式2)功能求数值表达式1的数值表达式2次方例题Round(数值表达式,整数表达式)函数原型Round(数值表达式,整数表达式)功能将数值表达式1,保留整数个小数后得到的结果整数表达式2:个位为0,往整数部分走是负数,往小数部分走是正数表示例子 Mod(value,divisor)函数原型Mod(被除数,除数)功能返回两个数的余数例题SQRT(value)函数原型SQRT(数值表达式)功能求出数值表达式的算术平方根例题日期函数函数说明ADD_MONTHS(date,count)指定日期 date上增加count个月LAS
24、T_DAY(date)返回日期date所在月的最后一天MONTHS_BETWEEN(date1,date2)返回date1到date2之间相隔的月数NEW_TIME(date,this,orther)指date由this时区转为other时区NEXT_DAY(date,day)返回指定日期或最后一个星期几的日期.day为星期几SYSDATE获取当前的系统日期CURRENT_TIMESTAMP()获取当前的系统日期及时间add_months(日期表达式1,数值表达式)函数原型1) add_months(日期表达式1,数值表达式)功能在日期表达式的基础上加上数值表达式个月份后的那个日期返回值类型日
25、期型注意Select sysdate from dual; 返回当前系统的日期例题今天日期基础上加1个月后是那个日期2、Last_day(日期表达式)函数原型Last_day(日期表达式)功能返回日期表达式当前月份最后一天的日期返回值日期型 Months_between(日期表达式1,日期表达式2)函数原型Months_between(日期表达式1,日期表达式2)功能:求出日期表达式1和日期表达式2之间所相差的月数返回值类型数值型例题NEXT_DAY(日期表达式,指定星期几)函数原型NEXT_DAY(日期表达式,指定星期几)功能指定日期表达式下一个星期的指定星期几的日期 返回值类型是,日期例题
26、类型转换函数To_char()将数字或日期转化为字符串函数原型To_char(日期表达式|数值表达式,格式)功能将数字或日期转化为字符串当参数为日期时to_char()在使用的时候要用到格式控制的符,格式控制符不区分大小写字母 年:Y,年份为四位数,故应写成:YYYY或yyyy 月:M,月份为两位数,故应写成:MM或mm 日:D,日为两位数,故应写成:DD或dd格式前加fm表示去掉前导0日期当格式用yyyy单独可以将指定日期的年份取出mm取出月份dd 取出日部分当参数为数值型时1) 格式可以用9或0来作为格式的限定2) 若数值表示的货币,可以中格式前加$符号,显示值时,显示前导$3) 若要显示
27、¥货币符,应用本地货币符,中前面加前导L4) 可以用 000,000,000来添加数值的千位符显示返回值类型字符串类型to_char()在使用的时候要用到格式控制的符,格式控制符不区分大小写字母 年:Y,年份为四位数,故应写成:YYYY或yyyy 月:M,月份为两位数,故应写成:MM或mm 日:D,日为两位数,故应写成:DD或ddTo_number()将当前的固定格式的字符串转化为数字能够转换的字符(09的数字字符 正负号,小数点,e字母看情况)To_date()将当前固定格式的字符串转化为日期To_date(字符表达式,格式)查询结果的排序:u ORDER BY 排序字段名1 DESC|AS
28、C,排序字段名2 DESC|ASCu 排序对最后的结果进行排序,ORDER BY 一般写中SQL语句的最后一个部分u 若排序字段有多个时,从左到右依次,若第一个排序字段有相同值时,然后按第二个排序字段区进行排序。u 默认是升序排序(ASC,也可以不写ASC)按工资的降序显示所有雇员信息select * from emp order by sal desc;先按部门的升序,部门相同的按工资的降序排序,若工资相同时再按入职时间升序显示出雇员信息select * from emp order by deptno asc,sal desc,hiredate asc;SQL强化训练选择部门30中的所有职
29、工筛选条件:deptno = 30所求内容:emp.*来自的表:empSelect 所求内容 from 来自的表 where 筛选条件select emp.* from emp where deptno = 30;列出所有业务员(CLERK)的姓名,编号,和部门编号筛选条件: job = CLERK所求内容:ename,empno,deptno所用的表:empselect ename,empno,deptno from emp where job='CLERK'找出奖金高于薪金的员工筛选条件:comm > sal所求内容:emp.*来自的表:empSelect emp.*
30、 from emp where comm > sal;找出奖金高于薪金的60%的员工筛选条件:comm > sal*0.6所求内容:*来自的表:empSelect * from emp where comm > sal*0.6;找出部门10中所有经理(MANAGER)和部门20中所有业务员(CLERK)的详细资料筛选条件:(deptno = 10 and job= MANAGER) or (deptno = 20 and job = CLERK )所求内容: *来自的表: empselect * from emp where (deptno=10 and job='M
31、ANAGER') or (deptno = 20 and job='CLERK');找出部门10中所有经理(MANAGER),部门20中所有业务员(CLERK),既不是经理又不是业务员但其薪水大于等于2000的所有员工的详细资料筛选条件:(deptno =10 and job =MANAGER) OR (deptno =20 and job=CLERK) OR (job!=MANAGER AND JOB !=CLERK AND SAL >=2000)所求内容: *来自的表: empSELECT * FROM EMP WHERE (DEPTNO=10 AND JOB
32、='MANAGER') OR (DEPTNO = 20 AND JOB='CLERK') OR (JOB != 'MANAGER' AND JOB != 'CLERK' AND SAL >= 2000) ;找出收取佣金的员工的不同工作筛选条件: SAL IS NOT NULL所求内容: JOB所用的表: empSELECT DISTINCT JOB FROM EMP WHERE SAL IS NOT NULL;找出不收取佣金或收取的佣金低于1000的员工筛选条件: sal is null or sal <1000所求内
33、容: *所用的表: empselect * from emp where sal is null or sal<1000;找出各月倒数第3天受雇的所有员工筛选条件: hiredate = LAST_DAY(HIREDATE)-2 所求内容: *来自的表:empselect * from emp where hiredate = last_day(hiredate)-2;找出早于12年前受雇的员工筛选条件:trunc(months_between(sysdate,hiredate)/12) > 12select * from emp where trunc(months_betwee
34、n(sysdate,hiredate)/12) > 12;以首字母大写的方式显示所有员工的姓名select initcap(ename) as ename from emp;显示正好为5个字符的员工姓名select ename from emp where length(ename) = 5;显示不带有”R”的员工姓名select * from emp where NOT(ename like '%R%');select * from emp where ename not like '%R%'显示所有员工姓名的前三个字符select substr(ena
35、me,1,3) as ename from emp;显示所有员工的姓名,并用a替换所有Aselect replace(ename,'A','a') as ename from emp;显示满10年服务年限的员工姓名和受雇日期select ename,hiredate from emp where trunc(months_between(sysdate,hiredate)/12)>=10;显示员工的详细资料,按姓名由大到小排序select * from emp order by ename desc;显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排
36、在最前面select ename,hiredate from emp order by hiredate asc;select * from emp order by trunc(months_between(sysdate,hiredate)/12) desc;显示所有员工的姓名,工作和薪金,按工作降序排列,若工作相同则按薪金升序排序select ename,job,sal from emp order by job desc,sal asc;显示所有员工的姓名,加入公司的年份和月份,按受雇日期所在的月排序,若月份相同,则将最早年份排在最前面select ename,to_char(hire
37、date,'yyyy') as year,trunc(months_between(sysdate,hiredate) as month from emp order by to_char(hiredate,'fmmm'),year asc;select ename,to_char(hiredate,'yyyy') as year,trunc(months_between(sysdate,hiredate) as month from emp order by to_char(hiredate,'fmmm'),2 asc;显示一个
38、月为30天的情况所员工的日薪金,忽略余数select trunc(sal/30) as 日薪金 from emp;找出在(任何年份)2月受聘的所有员工selct * from emp where to_char(hiredate,'fmmm') = '2'对每个员工,显示其加入公司的天数select trunc(sysdate-hiredate) as 入职天数 from emp;显示姓名中任意位置包含“A”的所有员工姓名select ename from emp where ename like '%A%'以年月日方式显示所有员工的服务年限se
39、lect trunc(months_between(sysdate,hiredate)/12) as year,trunc(mod(months_between(sysdate,hiredate),12) month, trunc(sysdate-add_months(hiredate,months_between(sysdate,hiredate) as dayfrom emp;三、 多表查询查询格式SELECT <所求内容> FROM <表1>,<表2> WHERE <连接条件> AND <筛选条件>用到多张表时,需要重表之间的连
40、接 连接(内连接(等值连接和自然连接)和外连接(左连接,右连接,全连接)连接:将多张有联系的表组合称为一张例题1:查询出查询每一个雇员的雇员信息和工资等级信息所求内容:emp.*,grade所用的表:emp,salgrade连接条件: sal>=losal and sal <= hisalSelect emp.* ,grade from emp,salgrade where sal>=losal and sal <= hisal;例题2:查询出雇员姓名以及雇员所做的部门名筛选条件:所求内容: ename,dname所用的表:emp,dept连接条件:emp.deptno
41、 = dept.deptnoselect a.ename,b.dname from emp a,dept b where a.deptno = b.deptno;例题3:查询出雇员姓名,所做部门名,工资等级筛选条件:所求内容:ename,dname,grade所用的表:emp,dept,salgrade连接条件:emp和dept : emp.deptno = dept.deptno Emp 和grade: sal>=losal and sal <= hisalselect ename,dname,grade from emp,dept,salgrade where (emp.dep
42、tno = dept.deptno) and (sal>=losal and sal<=hisal);例题4:查询出工资等级为5的所有职工所中的部门信息筛选条件:grade = 5所求内容:dept.*所用的表:1)从筛选条件来自的表 salgrade2) 从所求内容中来自动表 dept3) 两张表若需要连接,就必须有一张中间表emp才能将上面两张表连接起来,中间表也要包括进来select a.* from dept a,emp b,salgrade c where a.deptno = b.deptno and (b.sal>=c.losal and b.sal <=
43、 c.hisal) and grade = 5;例题5:查询出地址中NEW YORK工作的雇员信息例题6:查询出地址中NEW YORK工作的雇员姓名和工资等级四、左、右连接查询左连接查询:以左边表为标准查询内容,左边表的所有记录都会出现的查询结果中,若中右边有对应记录则对应出现,没有对应右边表字段值出用null来填充补齐。改变:左边表名.公共字段名 = 右边表名.公共字段名(+)例题:将dept、emp两张表进行左连接查询select * from dept,emp where dept.deptno = emp.deptno(+);右连接:以右边表为标准,去连接左边表,右边表的所有记录都会出
44、现在查询结果中,有对应则对应,没有对应的左边表字段值用null值填充。连接条件:左边表名.公共字段名(+) = 右边表名.公共字段名例题:将dept、emp两张表进行右连接查询select * from dept,emp where dept.deptno(+) = emp.deptno;SQL:1999SQL定义 (了解)SELECT table1.column,table2.columnFROM table1 CROSS JOIN table2|NATURAL JOIN table2|JOIN table2 USING(column_name)|JOIN table2 ON (table1
45、.column_name=table2.column_name)|LEFT|RIGHT|FULL OUTER JOIN table2 ON (table1.column_name=table2.column_name)1、交叉连接(CROSS JOIN):迪卡尔积运算92标准:select * from emp,dept;99标准:select * from emp cross join dept;2、table1 INNER JOIN table2 ON (table1.column_name=table2.column_name)、内连接(实质就是等值连接)例题:Emp表和dept表进行内
46、连接(列相加,记录相对应)92标准: select * from emp,dept where emp.deptno = dept.deptno;格式: select <所求内容> from 表1,表2 where 表1.公共字段名 = 表2.公共字段名99标准: select * from emp inner join dept on emp.deptno = dept.deptno;格式:select <所求内容> from 表1 INNER JOIN表2 ON 表1.公共字段名 = 表2.公共字段名select * from emp join dept on em
47、p.deptno = dept.deptno;格式:select <所求内容> from 表1 JOIN表2 ON 表1.公共字段名 = 表2.公共字段名99标准:select * from emp join dept using(deptno);格式: select <所求内容> from 表1 Join 表2 USING(公共字段名)用USING(公共字段名) 来代替连接条件3、自然连接 (NATURAL JOIN):是等值连接基础上去掉一个重复的列所得到结果就是自然连接得到结果例题:写emp和dept两张进行自然连接92标准:select emp.*,dname,
48、loc from emp,dept where emp.deptno = dept.deptno;99标准:select * from emp natural join dept;4、外连接(左连接,右连接,全连接)Table 1 LEFT|RIGHT|FULL OUTER JOIN table2 左连接/右连接/全连接1、左连接92标准:select * from emp,dept where emp.deptno = dept.deptno(+);格式: select <所求内容> from 表1,表2 where 表1.公共字段名=表2.公共字段名(+)99标准:select
49、 * from emp left join dept on emp.deptno = dept.deptno;select <所求内容> from 表1 left outer join表2 on表1.公共字段名=表2.公共字段名2、右连接92标准:select * from emp,dept where emp.deptno (+)= dept.deptno;格式: select <所求内容> from 表1,表2 where 表1.公共字段名(+)=表2.公共字段名99标准:select * from emp right join dept on emp.deptno
50、 = dept.deptno;select <所求内容> from 表1 right outer join表2 on表1.公共字段名=表2.公共字段名3、全连接92标准:没有表达方式99标准:select * from emp full join dept on emp.deptno = dept.deptno;select <所求内容> from 表1 full outer join表2 on表1.公共字段名=表2.公共字段名四、嵌套查询将某一个查询的结果作为另一查询的条件值,查询成为嵌套查询Select <所求内容> from <所求内容来自的表&
51、gt; where 公共字段名 IN|NOT IN (SELECT 公共字段名 from 筛选条件所涉及的表 where 筛选条件 and 其他条件 ) and 其他条件若子查询前面:> < >= <= = 时,子查询的结果只能有一个容易子查询前面: in | not in,子查询的结果又多个1)例题查询出地址在NEW YORK的雇员编号,雇员姓名 A)先将地址在NEW YORK部门编号是多少select deptno from dept where loc = 'NEW YORK' B)在通过上面的部门编号求出所有该部门的雇员信息select * fr
52、om emp where deptno = 10;select * from emp where deptno = (select deptno from dept where loc = 'NEW YORK');2)查询出工资雇员编号为7788雇员的工资高于的所有雇员信息select * from emp where sal >= (select sal from emp where empno=7788);3)查询出和雇员编号为7788或 7839雇员在同一个部门的雇员信息select * from emp where deptno in (select deptno
53、 from emp where empno=7788 or empno = 7839);4) 查询出不和雇员编号为7788或 7839雇员在同一个部门的雇员信息select * from emp where deptno not in (select deptno from emp where empno=7788 or empno = 7839);五、组函数 计算查询组函数:对一组数据进行操作的函数SUM() 求和函数AVG() 求平均值MAX() 求最大值MIN() 求最小值COUNT() 统计应用组函数:例题:计算出所有雇员的工资总和select sum(sal) as sum_sal
54、from emp;例题:求出所有雇员的平均工资select avg(sal) as avg_sal from emp;例题:求出所有雇员中最低工资和最高工资select max(sal) as max_sal,min(sal) as min_sal from emp;例题:统计出雇员表中出现的部门有多少个(重复值统计问题)参数中加: distinct 重复值只统计一次select count(distinct deptno) as count_dept from emp;例题:查询出工资高于平均工资的所有雇员信息select * from emp where sal > (select
55、avg(sal) from emp);注意:当组函数作为条件时,不能写中where后面,只能写group by 部分的having后面作为分组所满足的条件。例题:查询出工资都高于20部门的所有员工的雇员信息。select * from emp where sal > (select max(sal) from emp where deptno = 20);例题:查询出工资等级为5级的雇员的所在部门名称内容.分析:筛选条件:grade = 5所求内容:dname所用的表:所求内容涉及的字段来自的表 dept 筛选条件涉及字段来自的表 salgrade Dept和salgrade两张表没有直
56、接联系,必须使用中间表 emp后,两张表才能连接,查询时必须包含中间表。方法1:思想:将dept,salgrade,emp三张表等值连接成为一张表后,进行条件和所内容的筛选select distinct dname from dept,emp,salgrade where dept.deptno = emp.deptno and (sal>=losal and sal <=hisal) and grade = 5;方法2:思想:将dept和emp先连接成为一张表后,再和salgrade进行嵌套查询select distinct dname from dept,emp where dept.deptno = emp.deptno and sal >= (select losal from salgra
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行业务流程优化与风控管理方案
- 房地产项目营销服务合同协议书
- 智能财税综合实训 下篇 第四章工作领域一-任务一、任务二
- 医疗急救车到达时间预测模型
- 建筑节能优化方案设计与实践
- 部编版语文三年级上册第四单元教材解读大单元集体备课
- 《商业插画创意与表现》-6.4.商业插画的分类应用-品牌与形象插画
- 社会福利项目可行性分析
- 2025年有限空间作业安全案例分析考试题
- 2025年乡村医生考试题库:农村妇幼保健知识孕产妇护理试题
- 安全周例会汇报模板、安全汇报模板
- 尿动力学检查操作指南2023版
- 化学核心素养的课堂教学-基于核心素养的高中化学教学 课件
- GA/T 2000.19-2014公安信息代码第19部分:现役军人和人民武装警察申领居民身份证申请号
- DB31T 1137-2019 畜禽粪便生态还田技术规范
- 张居正改革-完整精讲版课件
- excel-操作技巧培训课件
- 腹膜透析的原理和应用讲课课件
- 中北大学火炮概论终极版
- 2022年CAD快捷键-CAD常用快捷键命令大全
- 流感病人的护理ppt课件
评论
0/150
提交评论