mysql 單表,多表,符合條件,子查詢


單表:

HAVING過濾

二次篩選 只能是group by 之后的字段

1.查詢各崗位內包含的員工個數小於2的崗位名、崗位內包含員工名字、個數

select post,group_concat(name),count(1) from employee group by post having  count(1)<2;

2. 查詢各崗位平均薪資大於10000的崗位名、平均工資

select post,avg(salary) as a from employee group by post having a >10000;(怕avg為關鍵字,用as a 代替) 

3. 查詢各崗位平均薪資大於10000且小於20000的崗位名、平均工資

select post,avg(salary) as a from employee group by post having a>10000 and a<20000;

order by 查詢排序

 

排序 order by age desc  / asc

1. 查詢所有員工信息,先按照age升序排序,如果age相同則按照hire_date降序排序
select * from employee order by age asc,hire_date desc;
2. 查詢各崗位平均薪資大於10000的崗位名、平均工資,結果按平均薪資升序排列

select post,avg(salary) from employee group by post having avg(salary)>10000 order by avg(salary) asc; (order by 后面一定要有參數)

limit  限制查詢的記錄數:

 

select * from employee order by salary desc limit 5,5; (默認為0

 從排好序的第五條開始,找5個)

 

多表查詢

  • 多表連接查詢

select * from employee,department where employee.dep_id = department.id

外鏈接操作:

1.語法

inner /left/right  join (顯示全部 有nul不顯示,優先左邊,沒有關聯的表為null/右邊優先)

select * from employe inner join department on  employee.dep_id = department.id

全外鏈接 union

select * from employee left join department on employee.dep_id = department.id
union
select * from employee right join department on employee.dep_id = department.id

 

 

符合條件查詢

以內連接的方式查詢employee和department表,並且employee表中的age字段值必須大於25,

即找出年齡大於25歲的員工以及員工所在的部門

 

select employee.name,department.name from employee inner join department on employee.dep_id = department.id  where age >25;

(on 后面跟着where 條件)

1、查詢平均年齡在25歲以上的部門名

select name from department where id in( select dep_id from employee group by dep_id having avg(age) >25) ;

通過在emp 表中找到的dep_id 對應上 dep 表中的id 而找到name

2、查看不足1人的部門名

select name from department where id not in(select  dep_id from employee group by dep_id) ;

(利用共同的dep_id來判斷)

3、查詢大於所有人平均年齡的員工名與年齡

select name,age from employee where age> (select avg(age) from employee);

(這里找的是員工名和年齡 跟部門沒有關系,,,)

4、查詢大於部門內平均年齡的員工名、年齡

1)先對員工表(employee)中的人員分組(group by),查詢出dep_id以及平均年齡。
(2)將查出的結果作為臨時表,再對根據臨時表的dep_id和employee的dep_id作為篩選條件將employee表和臨時表進行內連接。
(3)最后再將employee員工的年齡是大於平均年齡的員工名字和年齡篩選。

select * from employee inner join (select dep_id,avg(age) as b from employee group by dep_id) as A on employee.dep_id = A.dep_id where employee.age>A.b;

 5.查詢每個部門最新入職的那位員工

select name from employee inner join( select post,max(hire_date) as newtime from employee group by post) as A on employee .post = A.post where employee.hire_date=A.newtime;

同上,都是關於進行 on dep_id 的判斷 ,第二個則是關於where 的判斷

 

 

pymysql模塊的使用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM