單表查詢、多表查詢、符合條件查詢、子查詢


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
View Code

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
View Code

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;
View Code

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("登錄失敗")

 


免責聲明!

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



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