python學習筆記 day44 mysql 練習題(二)
阿新 • • 發佈:2018-11-03
1. 練習題二題目來自於:http://www.cnblogs.com/wangfengming/articles/7889786.html
這部分的習題 大致看了一下,沒有實際建立表來做,這裡選幾個比較有代表性的題大致說一下思路:
表的資訊如下:
24. 刪除工資重複的人員,保留年齡最大的一個:
思路:
先對人員person表基於salary分組,然後統計屬於一組(salary相同的)id個數--count(id)是否大於1 ,以及選max(age) 就能基於分組整合出來一張表 ,將這張表與原始表基於salary建立關聯,進行連線,連線好之後的一張新表 篩選count(id)>1 age<max(age)---因為是工資相同的,保留年齡最大的那個人 ,這樣選出來的都是應該被刪掉的,接下來那一張新的表(由person表複製的)刪掉應該刪掉的資訊即可;
create table person_copy select * from person; -- 首先複製一張新的表,跟person資料一樣,便於刪掉資訊 delete from person_copy where id in ( select id from perosn as t1 left join ( select salary,count(id)as number,max(age)as age from person group by salary ) as t2 on t1.salary=t2.salary where number>1 and t1.age<t2.age; -- 內層的select主要是基於salary分組,為了跟原來的表進行連線,根據count(id)>1 age<max(age)篩選出需要刪掉的資料項 )
27. 檢視哪些人員的門派已登記地理位置.
思路: 使用聯合查詢,或者內連線查詢:
select class,address from person,dept where person.class=dept.dname; -- 聯合查詢 select class,address from person inner join dept on person.class =dept.name;-- 內連線查詢
28. 查詢所有人員門派的位置資訊,不存在位置資訊則不顯示
思路:使用左連線查詢
select name,class,address from person left join dept on person.class=dept.dname;
29.在湖北省內的門派中的人員有哪些.
思路:使用聯合查詢:
select name,class,address from person,dept where person.class=dept.dname and address="湖北";
30.在陝西省內門派中的工資小於5000,年齡大於20歲的人員有哪些,按主鍵倒序排列
思路: 使用聯合查詢:
select name,age,salary,class,address from person,dept where person.class=dept.dname and salary<50000 and age>20 and address="陝西" order by person.id desc;