posts - 18,  comments - 1,  trackbacks - 0


          兩表沒(méi)有任何關(guān)聯(lián)時(shí)會(huì)產(chǎn)生迪卡爾機(jī):
          select first_name , name from s_emp , s_dept;
          等值連接:
          練習(xí)一:查看員工的姓名和員工部門(mén)號(hào):(要考慮到表中實(shí)際數(shù)據(jù)中空值的影響)
          select first_name , name from s_emp, s_dept where s_emp.dept_id=s_dept.id;
           
          練習(xí)二:每個(gè)員工所在的部門(mén)和部門(mén)所在的地區(qū)
          select first_name , name from s_emp, s_dept, s_region where s_emp.dept_id=s_dept.id and s_dept.region_id=s_region.id;

          非等值連接
          練習(xí)三:查出每個(gè)員工和每個(gè)員工的工資級(jí)別)
          select a.ename , a.sal, b.grade from emp a , salgrade b where a.sal between b.losal and b.hisal;
          select a.ename , a.sal, b.grade from emp a , salgrade b where a.sal>=b.losal and a.sal<=b.hisal;

          自連接:
          select first_name , manager_id from s_emp;
          練習(xí)四:查出所有員工的部門(mén)領(lǐng)導(dǎo)的名稱:( 這種sql會(huì)少一條記錄,總經(jīng)理沒(méi)有被配置上)
          select e.first_name , m.first_name from s_emp e , s_emp m where e.manager_id=m.id;7fg
           
          外連接:(防止空值時(shí),用(+)的一方會(huì)模擬一條記錄配置另一方)這就稱為外連接,一個(gè)記錄都不能少;
          select e.first_name , m.first_name from s_emp e , s_emp m where e.manager_id=m.id(+);

          練習(xí)五:查看員工分部的部門(mén):
          select distinct(deptno) from emp ;
          找出沒(méi)有員工的部門(mén):(很經(jīng)典的一個(gè)例子,用外連接來(lái)解決的標(biāo)準(zhǔn)做法,這是一種方式,用子查詢也可以實(shí)現(xiàn))
          第一步:
          select e.deptno , d.deptno from emp e , dept d where e.deptno(+)=d.deptno;
          第二步:(!L_=N
          select e.deptno , d.deptno from emp e , dept d where e.deptno(+)=d.deptno and e.deptno is null;

          練習(xí)六:查詢員工有多少人有提成:
          select count( commission_pct ) from s_emp ;
          select sum(commission_pct)/ count(*) from s_emp;
            
          練習(xí)七:?jiǎn)T工分部在多少個(gè)不同的部門(mén):
          select count(dept_id) from s_emp;
          select count(distinct dept_id) from s_emp;
           
          練習(xí)八:求各個(gè)部門(mén)的平均工資:
          select dept_id , avg(salary) aa from s_emp group by dept_id order by aa ;
          select dept_id , avg(salary) aa from s_emp group by dept_id ;
          //體會(huì)下句sql
          select region_id , count(*) from s_dept ****此句會(huì)有錯(cuò),請(qǐng)多體會(huì)********
          select max(region_id) , count(*) from s_dept; (強(qiáng)制語(yǔ)法上可以正確,但是不能保證結(jié)果也會(huì)正確)

          練習(xí)九:求各個(gè)部門(mén)不同工種的平均工資:
          select dept_id , title, avg(salary) from s_emp group by dept_id , title ;

          練習(xí)十:查詢哪些部門(mén)的平均工資比2000高:
          select dept_id, avg(salary) aa from s_emp group by (dept_id) having avg(salary)>2000;

          練習(xí)十一:除了42部門(mén)以外的部門(mén)的平均工資:
          select dept_id , avg(salary) from s_emp group by (dept_id ) having dept_id!=42;
          select dept_id , avg(salary) from s_emp where dept_id!=42 group by (dept_id ) ;(此種sql效率要高,先過(guò)濾再計(jì)算)

          練習(xí)十二:求各個(gè)部門(mén)的平均工資:
          //****這問(wèn)題很經(jīng)典,為了過(guò) oracle sql 語(yǔ)法關(guān)而寫(xiě)max(d.name)
          select max(d.name) , avg(e.salary) , max(r.name) from s_emp e, s_dept d , s_region r where e.dept_id = d.id and

          d.region_id=r.id group by d.id ;

          關(guān)于子查詢: Subqueries
          練習(xí)十三:找出所有員工中,工資最低的那個(gè)員工:( 利用子查詢 )
          select first_name, salary from s_emp where salary = ( select min(salary) from s_emp) ;
          //這樣寫(xiě)會(huì)出錯(cuò)姓名和工資不一致
          select max(first_name), min(salary) from s_emp;

          練習(xí)十四:查詢誰(shuí)跟Smith的工種一樣:
          select last_name from s_emp where last_name='Smith';
          //下種寫(xiě)法可能還存在bug,沒(méi)有考慮到數(shù)據(jù)的全面性,有潛在性問(wèn)題
          select last_name , title from s_emp where title =( select title from s_emp where last_name='Smith' )and

          last_name <> 'Smith' ;
          //這種寫(xiě)法才考慮的比較全面
          select last_name , title from s_emp where title in ( select title from s_emp where last_name='Smith' ) and

          last_name <> 'Smith' ;
          使用子查詢時(shí)應(yīng)注意: 單行子查詢返回多個(gè)結(jié)果時(shí)會(huì)有錯(cuò)誤 single-row subquery returns more than one value(
          練習(xí)十五:查出哪些員工的工資比平均工資低:
          select * from s_emp where salary < ( select avg(salary) from s_emp) ;
          哪些部門(mén)的平均工資比32部門(mén)的平均工資要低:
          第一步先查出各個(gè)部門(mén)的平均工資:
          select min(avg(salary ) ) from s_emp group by dept_id;
          第二步再查出哪個(gè)部門(mén)的工資是最低的:
          select dept_id, avg(salary) from s_emp group by dept_id having avg(salary) = (select min(avg(salary) ) from

          s_emp group by dept_id ) ;
          練習(xí)十六:哪個(gè)部門(mén)里沒(méi)有員工(用子查詢的方式來(lái)實(shí)現(xiàn)):
          select deptno from dept where deptno not in ( select deptno from emp );

          posted on 2007-03-20 12:48 sunny 閱讀(433) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2007年3月>
          25262728123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          相冊(cè)

          收藏夾

          朋友

          搜索

          •  

          最新評(píng)論

          評(píng)論排行榜

          主站蜘蛛池模板: 伊金霍洛旗| 定西市| 福清市| 龙胜| 冷水江市| 普宁市| 甘孜| 内丘县| 晋江市| 仁化县| 玉屏| 临江市| 东港市| 黔东| 工布江达县| 贵南县| 日土县| 盐津县| 武鸣县| 闽侯县| 天峻县| 雷州市| 灌南县| 集贤县| 繁峙县| 射洪县| 阳朔县| 呼伦贝尔市| 塘沽区| 花垣县| 沧源| 江门市| 正宁县| 广宗县| 凤阳县| 德钦县| 高阳县| 桐城市| 南丹县| 简阳市| 南木林县|