pymysql模塊和多表查詢


pymysql模塊

  • 建立鏈接 conn

  • 獲取游標cur

  • 執行sql execute(sql,(可迭代類型的參數集))

    • sql是查 -- 只涉及文件的讀操作

      • fetchone()

      • fetchmany(n)

      • fetvhall()

    • 增刪改 -- 涉及到文件的寫操作

      • conn.comimit()

  • 關閉游標和鏈接

    • cur.close()

    • conn.close()

代碼實現:

import pymysql
conn = pymysql.conn(host = 'localhost', user = 'root', password = '123', database = 'demo')  # 返回的是一個對象

# cur游標 cur數據庫操作符
cur = conn.curson()  
sql = 'insert into employee values(%s, %s, %s, %s)'
# 操作文件
with open('add.file', 'r', encoding='utf-8') as f:
   for line in f:
       try:
           lst = line.strip().split('|')
           cur.execute(sql,lst)  # 會自動將數據補充
           conn.commit()
       except:
           conn.rollback()
cur.close()
conn.close()


# sql 注入
# 登錄注冊 + database
# 表 userinfo

cur = conn.curson()
name = input('請輸入用戶名:')
password = input('請輸入用戶密碼:')
sql = 'select * from userinfo where username = %s and password = %s;'
ret = cur.execute(sql,(name,password))
if ret:
   print('登陸成功')
else:
   print('登陸失敗')

多表查詢

連表

內連接(所有不在條件匹配內的數據,都會被踢出連表)

方式一:
select * from employee,department where dep_id = department.id;

方式二:
select * from employee inner join department on dep_id = department.id;

實例1:以內連接的方式查詢employee和department表,並且employee表中的age字段值必須大於25,即找出年齡大於25歲的員工以及員工所在的部門
select employee.name,department.name from eemployee inner join department on dep_id = department.id wwhere age > 25;
取別名簡寫代碼:
select e.name,d.name from employee e inner join department d on dep_id = d.id where age > 25;

示例2:以內連接的方式查詢employee和department表,並且以age字段的升序方式顯示
select * from employee inner join department d on dep_id = d.id order by age;

外連接

左外連接 left join
select * from employee left join department on dep_id = department.id;

右外連接 right join
select * from employee right join department on dep_id = department.id;

全外連接 full join
select * from employee left join department on dep_id = department.id
union
select * from eemployee right join department on dep_id = department.id;

子查詢

查詢平均年齡再25以上的部門名:
   先再employee中查詢平均年齡再25以上的部門id
   select dep_id from employee group by dep_id having avg(age) > 25;
   再去department中查詢部門名字
   select name from department where id in (select dep_id from employee group by dep_id having avg(age) > 25);
   
查看技術部員工姓名:
   先去department中查詢技術部的id
   select id from department where name = '技術':
   再去employee中查詢員工姓名
   select name from employee where dep_id = (select id from department where name = '技術');
   
查看不足1人的部門名(子查詢得到的是有人的部門id):
   先再employee中查看有人的部門id
   select distinct dep_id from employee;
   再去department中找什么id沒有再上面的表中
   select name from department where id not in (select distinct dep_id from employee);
   
查詢大於所有人平均年齡的員工名與年齡:
   先查所有人的平均年齡
   select avg()age from employee;
   在查詢大於平均年齡的員工名與年齡
   select name,age from employee where age > (select avg(age) from employee);
   
查詢大於部門內平均年齡的員工名、年齡:
   先查詢各部門的平均年齡
   select dep_id,avg(age) from employee group by dep_id;
   將上面所得到表與employee表連接起來
   select * from employee as e inner join (select dep_id,avg(age) from employee group by dep_id) as t on e.dep_id = t.dep_id;
   再查詢大於各部門中大於平均年齡的人
   select * from employee as e inner join (select dep_id,avg(age) from employee group by dep_id) as t on e.dep_id = t.dep_id where e.age > t.avg(age);
   

 

 

 

 

 

 

 

 


免責聲明!

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



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