还剩22页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
DayOl
1.s_emp s.dept表的字段含义first_name名last_name姓title职位dept_id部门号提成commission_pct(有空值)
2.列出所有人的年薪select first_name,salary*12from s_emp;
3.给列起别名select first_name,salary*12Ann_Sal from s_emp;select first_name,salary*12Ann Sal from s_emp;select first_name,salary*12as nAnnSal from s_emp;
4.处理空值的函数nvlpl,p2null Oracle当做无穷大来处理空值不等于0空值不等于空格算数体现式中为空值,返回空值select first_name,salary*12*1+nvlcommission_pct,0/100from s_emp;
5.SQLPLUS命令a L列出上一次敲入的命令b clearscr或者!clear清屏
6.字段列名拼接II字符串拼接Oracle中字符和字符串用单引号表达双引号用于表达别名select first_name|r JllasCname employee from s_emp;select first_name|r isint departmentf||dept_idH7from s_emp;##列出42号部门的平均工资##若有groupby子句,select背面可跟group by背面跟的体现式以及组函数,其他会报错有关group by选择having还是whereWhere在分组之前过滤写在group之前效率高Having写在group by之后在分组之后做过滤;select dept_id,avgsalaryfrom s_empwhere dept_id=42group by dept_id;##若没有group by子句,select背面有一种组函数,其他都必须是组函数select maxdept_id,avgsalaryfrom s_empwhere dept_id=42;作业insert intosalgrade values6,10000,15000;##列出每个工资级别有多少员工?##列出3,5级有多少员工##列出每个工资级别有多少员工若该级别没有员工,也要列出Day
0311.子查询##先执行子查询;子查询只执行一遍##若子查询返回值为多种,Oracle会去掉反复值之后,将成果返回主查询##谁是受老板剥削工资最低的人?select first_name,salaryfrom s_empwhere salary二select minsalary from s_emp;##谁跟SMITH的职位是同样的?select last_name,titlefrom s_emp wheretitle=select title from s_emp where last_name=,Smith!and last_name!=Smith;##假如表中有反复值,如两个Smith,会报错##single-row subqueryreturns morethan onerow单行子查询返回多行##修改为in可以不????????????可以select last_name,titlefrom s_emp wheretitle=any selecttitle from s_emp wherelast_name=,Smith,and lastname!=Smith;##哪些部门的平均工资比32部门的工资高?select dept_id,avgsalaryfrom s_empgroup bydept_idhaving avgsalaryselect avgsalary from s_emp wheredept_id=32;##那些人是领导?子查询select first_namefrom s_empwhere id in select manager_id from s_emp;##那些人是领导?袤连接select distinctm.first_namefrom s_emp mjoin s_emp eon e.manager_id=m.id;##Ben的领导是谁?子查询select first_namefrom s_empwhere id二select manager_id from s_emp wherefirst_name=Ben;##Ben领导谁?子查询select first_namefrom s_empwhere manager_id=select id from s_emp wherefirst_name=fBenf;##Ben的领导是谁?表连接select m.first_namefrom s_emp mJoins_emp eone.first_name=Ben and e.manager_id=m.id;##Ben领导谁?表连接select e.first_namefrom s_emp ejoin s_emp mon m.first_name=,Ben!ande.manager_id=m.id;##select first_namefrom s_empwhere idin select manager_id from s_emp;##对110311来说,成果集中假如有milL则整个成果集为mill##结论对not in来说,子查询成果集中是不能有null的select first_namefrom s_empwhere id not in select manager_id from s_emp;##查询那些人是员工?select first_namefrom s_empwhere id not inselectmanager_id from s_emp wheremanager_id isnot null;I=Jmi
12.子查询与空值##哪些部门的员工工资等于本部门员工平均工资##多列select first_name,dept_id,salaryfrom s_empwhere dept_id,salary inselect dept_id,avgsalary from s_emp groupbydeptjd;13关联子查询
14.同表中一列相等一列比大小用关联子查询##哪些员工的工资比本部门的平均工资高select first_name,dept_id,salaryfrom s_emp outerwhere salaryselect avgsalary from s_emp innerwhere outer.dept_id=inner,dept-id;
15.常用的关联子查询EXISTS NOTEXISTS##找到即返回##哪些部门有员工?select dname from deptowhere existsselect1from emp iwhere o.deptno=i.deptno;##那些人是员工?select first_name from s_emp awhere not existsselect1from s_emp bwhere a.id=b.manager_id;总结子查询非关联in/not in不提议关联exists比inner join优势/not exist即outer join+is null
16.IN和EXISTS的比较(非关联和关联子查询的比较)
17.标量子查询##列出员工名和领导名?select first_name employee,select first_name from s_empiwhereo.manager_id=i.id Managerfroms_emp o;
18.CASE WHEN体现式##实现31部门,32部门工资分别涨
1.1倍和
1.2倍##假如没有else返回空值select first_name,salary,case when dept_id=31then salary*
1.1whendept_id=32then salary*
1.2elsesalaryend ala_salfrom s_emp;##工资1000涨300块,1000工资1500涨500,其他人不动selectfirst_name,salary,case when salary1000then salary+300whensalary1000and salary1500then salary+500elsesalaryend ala_salfrom s_emp;
19.DECODE函数等同于Case when##decode参数13,参数11,参数12,参数13…9##表达假如参数1的值为参数2则参数3;参数11的值为参数12则参数13…select first_name salary,decodedept_id,31,salary*l.l32,salary*L2,5933,salary*L3,salary aft_salfrom s_emp;select first_namefrom s_emp outerwherenot existsselect1froms_emp innerwhere inner.id=outer.manager_id;##列出所有员工select first_namefrom s_emp outerwherenotexistsselect1froms_emp innerwhere outer.id dinner.manager_id;Day
0420.约束not miH非空约束这是一种列级约束在建表时,在数据类型的背面加上not null,也就是在插入时不容许插入空值create tablestudentid number primary key,name varchar232notnull,address varchar232;primary key主键约余PK保证记录的主键唯一且非空,并且每一种表中只能有一种主键foreign key外建约束FK被引用的表,叫做parent table父表,引用方的表叫做child table子表,要想创立子表,就要先创立父表,后创立子表,记录的插入也是如此,先父表后子表,删除记录,要先删除子表记录,后删除父表记录,要修改记录,假如要修改父表的记录要保证没有被子表引用要删表时,要先删子表,后删除父表unique key唯一键,值为唯一的,假如创立一种uk,系统自动建一种唯一索引唯一约束,是会忽视空值的,唯一约束,规定插入的记录中的值是为一的create tablestudentid number,name varchar232,addressvarchar232,primary keyid,unique address;check约束检查约束,可以按照指定条件,检查记录的插入check中不能使用尾列,不能使用函数,不能引用其他字段create tablesal alnumber,checkal1000;
21.primary key约束主键约束第一种形式create tabletestc number primary key;第二种形式create tabletestc number,primary keyc;表级约束create tabletest c1number constraintspkcl primary key;此约束有名字pkcl
22.foregin keyfk外键约束:先定义父表,再定义子表carete tableparentclnumber primary key;create tablechild cnumber primary key,c2number references parentcl;或表级约束定义create tablechild cnumber primary key,c2number,foreign keyc2referencesparentcl;create tabletestc1numberprimary key;设置主键create tabletestc1number constraintstest_c1primary key;定义约束名,默认约束名为SYS_在列背面定义约束底为列级约束create tabletestcl numberprimary keycl;所有列定义完后再定义约束称为表级约束能定义联合主键cretae tabletestcl number,c2number,priary keycl,c2;定义联合主键create tablechildcl numberprimary key;先要定义父表create tablechildcl numberprimarykey,c2number referencesparentcl;然后定义子表referencesparent定义外键create tablechildcl numberprimarykey,c2number referencesparentcl ondeletecascate;on deletecascate为级联删除create tablechildcl numberprimarykey,c2number referencesparentc1ondelete set null;on deletesetnull删除后将外键置空create tablechild clnumberprimarykey,c2number,foreignkeyc2referencesparentcl;
23.两表没有任何关联时会产生迪卡尔乘积select first_name,name froms_emp,s_dept;
24.insert操作,插入记录DML操作insert intostudent valuel/xxx\,xxx,;insert intostudentid,name,address valuel/xxx7xxx!;注意有空值的话隐式插入INSERT INTOs_dept id,name VALUES12,MIS;攵往想为空的字段吊插数据,系统默认为NULL显示插入;INSERT INTOs_dept VALUES13,Administration NULL;select*froms_emp where1=2;这样选不出纪录,以便察看表构造
25.update修改操作update table表名set字段名1二数据1或体现式1,字段名2二数据2或体现式2[whereupdate shenfenzhenset num=99where sid=2;
26.delete删除操作delete from表名[where用delete操作删除的记录可以通过rollback命令回滚操作,会恢复delete操作删除的数据delete操作不会释放表所占用的空间,delete不适合删除记录多的大表delete操作会占用大量的系统资源
27.alter table命令alter table命令用于修改表的构造(这些命令不会常常用)增长字段alter table表名add(字段字,字段类型)删除字段(alter tbale表名drop column字段;8i后来才支持)给列更名才支持alter table表名rename column旧字段名to新字段名;修改字段alter table表名modify(字段,类型)(此时应注意的问题,更改时要看详细值状况之间的转达换,改为字符类型时,必须要为空)not null约束是使用alter table..modify(..,not null),来加上的增长约束alter table表名add constraint[约束名]约束(字段);只可以增长表级约束解除约束(删除约束)alter table表名drop约束;(对于主键约束可以直接用此措施,由于一张表中只有一种主键约束名,注意假如主键此时尚有其他表引用时删除主键时会出错)alter tablefather dropprimarykeycascade;(假如有子表引用主键时,要用此语法来删除主键,这时子表还存在只是子表中的外键约束被及联删除了)alter table表名drop constraint约束名;(怎样取一种约束名a、人为的违反约束规定根据错误信息获取!b、查询视图获取约束名!)使约束失效或者生效alter table表名disable fromprimarykey;(相称于把一种表的主键禁用)alter table表名enable primarykey;(enable时会自动去检查表的记录是不是符合规定,假如有脏数据时必须要先删除脏数据才可以enable)更改表名rename旧表名to新表名;删除表trucate table表名;(表构造还在,数据所有删除,释放表所占的空间,不支持回退,常用删除大表)Day05今天的note不全,请自己补充
1.哪些列更适合做索引##表大,成果集小常常出目前where子句的列常常用于表连接的列主键列PK、唯一键列UKcreate tabletestcreate uniqueindex test_cl_idx ontestcl;
2.新的建表语句create tabletest_01asselect*from test;
3.某些概念建索引的目的就是为了加紧查询速度索引就相于一本的书的目录索引点系统空间,属于表的附属物删除一种表时,相对应的索引也会删除索引是会进行排序
4.查看表的rowid##每条记录均有自己的rowid selectrowid,first_name froms_emp;
5.创立视图creating views视图名;视图就相称于一条select语句,定义了一种视图就是定义了一种sql语句,视图不占空间,使用view不会提高性能,不过能简朴化sql语句(扩展知识oracle8i后来的新视图)MV物化视图(占存储空间,把select成果存在一种空间,会提高查询视图,增强实时性,不过存在刷新问题,物化视图中的数据存在延迟问题,重要应用在数据仓库中用要用于聚合表)使用视图的好处控制数据访问权限怎样创立一种视图的例子create or replace viewstest_vi asselect*from testlwhere cl=l;orreplace的意义,假如view存在就覆盖,不存在才创立force|no force,基表存在是使用,不存在是则创立该表此时往表testl(base table基表)中插入数据时表中没能变化,视图中的数据发生变化从视图中插数据时相对应的表会发生变化
7.清除反复值distinct##该企业有哪些职位?select distinct title froms_emp;##各个部门有哪些不一库的职位?##distinct的功能部门号单独反复,职位单独反复,部门号和职位联合不反复select distinctdept_id,title froms_emp;##会报错,由于distinct只能出目前select背面,否则会导致逻辑不通select dept_id,distincttitle froms_emp;X
8.列出表中所有字段##注意写*会减少效率,企业中一般会严禁写*;select*froms_emp;
9.Oracle中写SQL大小写区别在功能上无影响,性能上有影响##注意写SQL,一般企业均有规范
10.where控制子句##年薪不小于
1.2w的员工的年薪?##假如salary字段上建了索引,第一种写法,索引用不上,因此慢select first_name,salary*12a_salfrom s_empwhere salary*121;##假如salaiy字段上建了索引,第二种写法,效率高些select first_name,salary*12a_salfrom s_empwhere salary1000;##会报错,where子句背面不可以跟“列别名”,where子句执行在select语句之前select first_name,salary*12a_salfrom s_empwhere a_sal1;##EX.不会报错,order by子句可以使用“别名”select first_name,salary*12a_salfrom s_emporder bya_sal;IL注意单引号中大小写敏感##列出Carmen的年薪是多少?Select first_name,salary*12a_salFrom s_emp往视图中插数据时,会直接插进基表中,查看视图中的数据时,相称于就是执行创立时的select语句限制对数据库的访问,简化查询简朴视图来自于单表,且select语句中不能包括函数,能进行DML操作复杂视图来源于多张表,不能执行DML操作
6.删除视图drop views视图名
7.行列转置问题
8.子查询还可以跟在from背面select e.first_name,e.salary,a.asalfrom s_emp e joinselect dept_id,avgsalary asal froms_emp groupbydept_id aone.dept_id=a.dept_idand e.salarya.asal;
9.Rownum##出现两条记录select first_name,rownum froms_emp where rownum=2;##无记录,由于rownum的特点是必须从1条记录开始找select first_name,rownum froms_emp where rownum between4and9;##排名问题找出前N条记录##找出工资最高的前10个人?select rownum,first_name,salary fromselect first_name,salaryfrom s_emporder bysalary descwhererownum=10;##分页问题##找出第11条到第20条的记录(先找出前20条记录,再过滤掉前10条)##要点给rownum起别名##越往后走越慢,这种做法效率较低select rn,first_name,salary(from selectrownum rn,first_name,salaryfrom s_emp)whererownum=20where rnbetween11and20;
10.(集合运算)Union和Union ALL拼成果集##去重select deptno from deptunionselect deptno from emp;##不去重select deptno from deptunionallselect deptno from emp;
11.(集合运算)intersect去重后的交集select deptnofrom deptintersectselect deptnofromemp;
12.(集合运算)minus找出不包括的selectdeptnofrom deptminusselectdeptnofromemp;
13.Rename更名##改表名rename abcto testabc;##给列更名alter tabletestabc renamecolumn clto clO;外延与复习
1.查询系统表##查询本顾客下所拥有的所有表的表名select tablename fromuser tables;
2.SQLPLUSa)SQLPLUS的buffer中会缓存最终一条sql语句i.可以使用方来执行这最终一条命令iii.L命令list令(sqlplus命令)可以显示buffer中】【终一条命ii.可以使用edit命令来编辑最终一条sql语句b)desc[表名]##sqlplus命令,注意他不是sql语句,用于查看表的构造descript的缩写desc s_emp;
3.将SQL语句写入指定的文献spool a.lst
4.sql脚本a)也就是在文献中写有sql语句的文献,可以在sqlplus中运行b)引入sql脚本i.sqlplus顾客名/密码@sql脚本ii.注意在顾客名密码输入结束后一定要加空格然后再写@sql脚本,iii.在脚本中最终一行写上“exit”则运行完脚本后来,回到shell上
5.Oracle数据库中的空表dual测试表select sysdatefrom dual;
6.单行函数1)字符函数字符是大小写敏感的转小写lower(字段名)-其中的参数可以是一种字符串常量或是一种字段名转大写upper(字段名)首字母大写initcap(字段名)字符串拼接concat(字段1,字段2)截取子串substr(字段名,起始位置,取字符个数)dual表,是专门用于函数测试和运算的,他只有一条记录字符串拼接concat(...,....)求指定子串substr(…,起始位置,取字符个数)可以使用表达从右向左取,取的时候可以从左往友取例select substr(first_name,-2,2)sub froms_emp;(取后两个)select substr(first_name,2,2)sub froms_emp;(取前两个)四舍五入roun d(数据,保留小数点后几位)2)数值函数可以用负数表达小数点前,0,表达小数点后第一位,也就是保留个位,表达个位(保留到十位)例select round
15.36,lfrom dual;截取数字函数tnmc(数据,保留的位数(小数点后位数))截取个位之后补0例select trunc
123.456,lfrom dual;3)日期函数日期格式,全日期格式世纪信息,年月日,时分秒缺省日期格式,日一月一年dd-mon-rr修改目前会话的日期格式,会按照指定的格式输出日期alter sessionset nls_date_format=*yyyy mmdd hh24:mi:ss,;返回目前日期sysdate例select sysdatefrom dual;select sysdate+1from dual;获得明天的日期,加L单位是天日期是格式敏感的求两个日期间相隔了多少个月months_between(date1,date2)加减指定数量的月份add_months(date,月数),月数可认为负,负值就是减去对应的月数从date日期开始的第一种星期五next_daydate,FriDay返回月末的日期last_daydate截取日期tnmcdate「年或月或日或时分秒,例select next_daysysdate2fromdual;9例select truncadd_monthssysdate4/monthf fromdual;ROUND25-MAY-95VMONTH01-JUN-95ROUND,25・MAY・95;YEAR01-JAN-95TRUNC25-MAY-95/MONTH101-MAY-95TRUNC25-MAY-95「YEAR01-JAN-95练习返回下个月的第一天的日期select roundlast_daysysdate/MONTHf fromdual;selectadd_monthstruncsysdate/MONTHf4;4)不一样数据类型间转换函数将日期转成字符tochar(date「日期格式,)日期格式要用有效格式,格式大小写敏感yyyy mmdd hh24:mi:ss\♦year,(全拼的年);mm,(数字表达的月),month,(全拼的月),,day,(星期的全拼),ddspth,(日期的全拼),yy mmdd,例select to_char(sysdate/yyyy mmdd hh24:mi:ss,)fromdual;将字符转换成数字to.numberC
1...1)将数字转字符to_char(number,fmt是数字格式将字符串转成日期to_date二日期格式,例select to_charto_datef11O3「yyyy mmdd^/dd-month-yy1fromdual;Where firstname=Carmen;
12.大小写转换函数lower upper##列]出Carmen的年薪是多少?select first_name,salary*12a_salfrom s_empwhere lowerfirst_name=fcarmen1;
13.wheresalarybetween1000and1500;AND和between and连接符##找出员工工资在1000与1500之间select first_name,salaryfrom s_empwhere salary=1000and salary=1500;##between and就表达了如上含义select first_name,salaryfrom s_emp
14.OR连接符IN表述形式=ANY##找出
31、
41、43部门员工的姓名和部门号select first_name,dept_idfrom s_empwhere dept_id=31or dept_id=41or dept_id=43;##简朴的表述形式inselect first_name,dept_idfrom s_empwhere dept_idin31,41,43;##另一种装述形式in相称于=anyselect first_name,dept_idfrom s_empwhere dept_id=any31,41,43;##从括续区间中取值使用Between-And,从离散数值中取值用IN
15.LIKE运算符SUBSTR函数Length函数(通配符%表达0或多种字符;_表达任意单个字符)##效率高些wherelast_name likeM%##成果等同如上,where substrlast_name,1,1=M;##列出名字的最终两个字母select first_name,substrfirst_name,-2,2froms_emp;##歹口出名字的最终两个字母length函数select substrfirst_name,lengthfirst_name-1,2froms_emp;
16.escape关键字(表达后边的符号不是通配符)select talble_name fromuser_tables wheretalbe_name likeS\_%escape
17.IS NULL判断字段与否为空IS NOTNULLselect first_name,commission_pct froms_emp wherecommission_pct isnull;
18.NOT BETWEENANDNOT INNOT LIKEIS NOTNULL##除了
31、
41、43部门的部门员工的状况select first_name,dept_id froms_empwhere dept_idnotin31,41,43;##等价写法select first_name,dept_id froms_empwhere dept_id!=31and dept_id!=41and dept_id!=43;##等补写法vall31,41,43select first_name,dept_id froms_empwhere dept_id all31,41,43;##任何■数据与NULL比较,都返回false,##使用notinO时,假如集合中有mill值,则查不出任何记录,对也没影响select first_name,dept_idfroms_empwhere dept_idnotin31,41,43,null;
19.注意下两句SQL的区别,理解OR和AND##找出部门号为44,工资不小于1000的员工或者部门号为42的所有员工?select last_name,salary,dept_idfrom s_empwhere salary=1000and dept_id=44or dept_id=42;##找出部门号为44或耆42的,并回工资不小于1000的员工select last_name,salary,dept_idfrom s_empwhere salary=1000and dept_id=44or dept_id=42;
20.隐式数据类型转换“##如下式相似的成果,系统做了隐式数据类型转换,均为字符转数值select first_name,salary froms_emp wheresalary=1450;select first_name,salaryfroms_emp wheresalary=1450’;##相称于select first_name,salaryfroms_emp whereto_numbersalary=1450;##版严格的数据类型匹ia相称重要selectfirst_name,salaryfroms_emp wheresalary=1450;
21.显式数据类型转换to_char函数##输出所有员工的manager_id,假如没有manager_id,则用BOSS填充selectfirst_name,nvlto_charmanager_id/Boss froms_emp;Day
021.表和表之间的关系s_emp员工表s_dept部门表s_region部门所在地区表salgrade工资等级表员工表emp部门表dept
2.等值连接,(##查询Carmen所在部门的地区?Canmen在哪个地区上班?)##中间表“部门表”##用几张表就JOIN几次##等值连接(内连接的一种)父表的主键==子表的外键select e.first_name,r.namefrom s_emp ejoin s_dept don e.dept_id=d.idand e.first_name=Carmen-------------------为彳可where不彳亍?
3.And在外连接之前做过滤,where在外连接之后做过滤join s_region rond.region_id=r.id;##亚洲地区有哪些员工?select e.first_name,r.namefrom s_emp ejoin s_dept don e.dept_id=d.idjoin s_region ron d.region_id=r.id andr.name=Asia’;为何where能替代and
4.非等值连接##列出员工的工资以及对应的工资级别?select e.ename,e.sal,s.gradefrom emp ejoin salgradeson e.sal betweens.losal ands.hisal;##SMITH的工资级别?select e.ename,e.sal,s.gradefrom emp ejoin salgradeson e.sal betweens.losal ands.hisaland e.ename二SMITH;##3,5级有哪些员工(哪些员工属于3,5级)?select e.ename,e.sal,s.gradefrom empejoin salgradeson e.sal betweens.losal ands.hisal ands.grade in3,5;
5.自连接##列出员工名和领导名的对应关系##成果为24个,少一种managejid为空的人BOSS丢了selecte.id,e.first_name emplayee,m.id,m.first_name manager froms_empejoin s_empmon e.manager_id=m.id;##列出哪些人是领导?select distinctm.first_namefroms_empejoin s_emp mon m.id=e.manager_id;
6.outer join外连接##内连接from tljoin t2on tl.id=t
2.id##from tlleft outer join t2on tl.id=t
2.id左边的表做驱动表##from tlright outerjoin t2on tl.id=t
2.id右边的表做驱动表##外连接处理的问题驱动表中的记录在成果集中“一种都不少”##列出员工名和领导名的对应关系?select e.first_nameemployee,nvlm.first_name/Boss!managerfroms_emp eleftouterjoins_emp mone.manager_id=m.id;##怎样号外连接##先写出内连接,再确定哪张表当驱动表就可以##哪个部门没有员工?14条记录,少1条select e.ename,e.deptno fromempejoin dept don e.deptno二d.deptno;##哪个部门没有员工?15条记录,select e.ename,e.deptno,d.deptno d.dname fromemp eright join dept done.deptno二d.deptno;##哪个部门没有员工?15条记录selectd.deptno,d.dname,e.ename,e.deptnofromemp eright join deptdone.deptno二d.deptnowhere e.empno isnull;##使用外连接处理了两类问题L把所有成果列出到成果集
2.处理否认问题(不是,没有,不包括)##那些人是员工?(即那些人不是领导?)##思绪##先处理那些人是领导##能匹配的是领导##把匹配不上的挑出来##select e.first_name,m.first_namefrom s_emp erightjoins_emp mone.manager_id=m.id;##加条件select e.first_name,m.first_namefrom s_emp erightjoins_emp mone.manager_id=m.idwhere e.id isnull;------------------------------为何用and会出现成果错误????、/--------------------##最终列出m.first_name即可selectm.first_namefrom s_emp erightjoins_emp mone.manager_id=m.idwhere e.id isnull;用and和where会得到不一样的成果什么时候用and什么时候用where
7.And在外连接之前做过滤,where在外连接之后做过滤
8.Where在得出成果后来过滤很重要别把##select e.ename,d.dnamefrom emperightjoindeptdone.deptno=d.deptnoand e.ename=SMITH;##驱动表的过滤所有写在where之后select e.ename eename,d.dname denamefromempe rightjoindeptdone.deptno=d.deptnoand e.ename=SMITH;where e.empno isnull;##选择left jon或者rightjoin不重要,重要的是选择哪张表做驱动表
9.full outjoin用的比较少
10.组函数##组函数一堆数据返回的成果##max##avg##min##avg##求所有人的平均工资##求所有人的平均提成select avgnvlcommission_pct,0froms_emp;##coimt处理的成果假如全为空值,成果返回0##计算有多少条记录select countid froms_emp;##求按提成分组,计算人数select commission_pct,countidfroms_empgroup bycommission_pct;##coimt函数中可以加入关键字select counttitlefroms_emp;##等同于select countalltitlefroms_emp;##把反复值去掉,再做记录select countdistincttitlefroms_emp;。
个人认证
优秀文档
获得点赞 0