python 數據庫表查詢


# 數據的
# 增
# insert into 表 values (值)
# insert into 表(字段,字段2) values (值,值2)
# insert into 表(字段,字段2) select 字段1,字段2 from 表2
# 刪
# delete from 表 where 條件;
# truncate table 表名;
# 改
# update 表 set 字段=值 where 條件;
# 查
# select 字段 from 表
# where 條件 根據條件篩選符合條件的行
# group by 分組
# having 過濾條件 根據分組之后的內容進行組的過濾
# order by 排序
# limit m,n 取從m+1開始的前n條

# 1.where條件中不能用select字段的重命名
# 2.order by 或者having可以使用select字段的重命名
# 主要是因為order by 在select語句之后才執行
# having經過了mysql的特殊處理,使得它能夠感知到select語句中的重命名

# 拓展
# 在執行select語句的時候,實際上是通過where,group by,having這幾個語句鎖定對應的行
# 然后循環每一行執行select語句



    # 所謂連表
# 總是在連接的時候創建一張大表,里面存放的是兩張表的笛卡爾積
# 再根據條件進行篩選就可以了

# 表與表之間的連接方式
# 內連接 inner join ... on ...
# select * from 表1,表2 where 條件;(了解)
# select * from 表1 inner join 表2 on 條件
# select * from department inner join employee on department.id = employee.dep_id;
# select * from department as t1 inner join employee as t2 on t1.id = t2.dep_id;
# 外連接
# 左外連接 left join ... on ...
# select * from 表1 left join 表2 on 條件
# select * from department as t1 left join employee as t2 on t1.id = t2.dep_id;
# 右外連接 right join ... on ...
# select * from 表1 right join 表2 on 條件
# select * from department as t1 right join employee as t2 on t1.id = t2.dep_id
# 全外連接 full join
# select * from department as t1 left join employee as t2 on t1.id = t2.dep_id
# union
# select * from department as t1 right join employee as t2 on t1.id = t2.dep_id;

# 1.找到技術部的所有人的姓名
# select * from department d inner join employee e on e.dep_id = d.id;
# select e.name from department d inner join employee e on e.dep_id = d.id where d.name='技術';

# 2.找到人力資源部的年齡大於40歲的人的姓名
# select * from department d inner join employee e on e.dep_id = d.id
# select * from department d inner join employee e on e.dep_id = d.id where d.name='人力資源' and age>40;

# 3.找出年齡大於25歲的員工以及員工所在的部門
# select * from department d inner join employee e on e.dep_id = d.id;
# select e.name,d.name from department d inner join employee e on e.dep_id = d.id where age>25;

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

# 5.求每一個部門有多少人
# select d.name,count(e.id) from department d left join employee e on e.dep_id = d.id group by d.name;
# 且按照人數從高到低排序
# select d.name,count(e.id) c from department d left join employee e on e.dep_id = d.id group by d.name order by c desc;

# 所謂連表就是把兩張表連接在一起之后 就變成一張大表 從from開始一直到on條件結束就看做一張表
# 之后 where 條件 group by 分組 order by limit 都正常的使用就可以了
子查詢
 
        
# 查詢平均年齡在25歲以上的部門名
# select name from department where id in (
# select dep_id from employee group by dep_id having avg(age)>25);

# 查看技術部員工姓名
# 先查詢技術部的部門id
# select id from department where name = '技術';
# 再根據這個部門id找到對應的員工名
# select name from employee where dep_id =(select id from department where name = '技術');
# select name from employee where dep_id in (select id from department where name = '技術');

# 查看不足1人的部門名
# 先把所有人的部門id查出來
# select distinct dep_id from employee;
# 然后查詢部門表,把不在所有人部門id這個范圍的dep_id找出來
# select name from department where id not in (select distinct dep_id from employee);

# 查詢大於所有人平均年齡的員工名與年齡
# 求平均年齡
# select avg(age) from employee;
# select * from employee where age >28;
# select name,age from employee where age >(select avg(age) from employee);

# 查詢大於部門內平均年齡的員工名、年齡
# select dep_id,avg(age) from employee group by dep_id;
# select name,age from employee as t1 inner join (select dep_id,avg(age) avg_age from employee group by dep_id) as t2
# on t1.dep_id = t2.dep_id where age>avg_age;






免責聲明!

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



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