1. 程式人生 > >python學習筆記 day44 mysql 練習題(二)

python學習筆記 day44 mysql 練習題(二)

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;