1.單表查詢
having:二次篩選,having后面的字段只能是分組(group by)之后字段

1.查詢各崗位內包含的員工個數小於2的崗位名、崗位內包含員工名字、個數 select post,group_concat(name),count(1) from employee group by post having count(1) < 2; 2. 查詢各崗位平均薪資大於10000的崗位名、平均工資 select * from employee where salary not in (select avg(salary) as A from employee group by post having A > 10000); select post,avg(salary) as A from employee group by post having A > 10000 3. 查詢各崗位平均薪資大於10000且小於20000的崗位名、平均工資 select post,avg(salary) from employee group by post having avg(salary) between 10000 and 20000; order by asc 升序 desc 降序 limit 0,5 第一個參數起始位置,第二個參數顯示的個數
2.多表查詢

select employee.name as a,department.name as b from employee,department where employee.dep_id = department.id and employee.name = 'egon'; select * from (select employee.name as a,department.name as b from employee,department where employee.dep_id = department.id) as A where A.a ='egon'; select * from employee,department where employee.dep_id = department.id 外鏈接操作 內連接: 符合條件查詢 只連接匹配的行 select * from employee inner join department on employee.dep_id = department.id; 左連接: 優先顯示左表記錄 select * from employee left join department on employee.dep_id = department.id; 右連接: 優先顯示右邊記錄 select * from employee right join department on employee.dep_id = department.id; 全外連接: 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
3.符合條件查詢

以內連接的方式查詢employee和department表,並且employee表中的age字段值必須大於25, 即找出年齡大於25歲的員工以及員工所在的部門 select department.name,employee.name from employee inner join department on employee.dep_id = department.id where age > 25
4.子查詢
子查詢是將一個查詢語句嵌套在另一個查詢語句中。
一個查詢語句查詢的結果作為另一個查詢語句的條件

1、查詢平均年齡在25歲以上的部門名 select name from department where id in (select dep_id from employee group by dep_id having avg(age) > 25); 2、查看不足1人的部門名 select name from department where id not in (select dep_id from employee group by 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;
5.pymysql模塊的使用
1.引入pymysql模塊:pip3 install pymysql
import pymysql username = input("請輸入用戶名:") pwd = input("請輸入密碼:") #建立連接 conn = pymysql.connect( host="localhost", user="root", password="", database="db2", port=3306, charset="utf8" ) #創建游標 cur = conn.cursor() sql = 'select * from userInfo where name=%s and pwd=%s' print(sql) res = cur.execute(sql,[username,[pwd]]) print(res) #游標關閉,連接關閉 cur.close() conn.close() if res: print("登錄成功") else: print("登錄失敗")