SQL学习笔记整理4(连接查询sql192标准)

本文深入探讨了SQL中的多表查询,包括等值连接、非等值连接、自连接以及外连接的使用。通过实例展示了如何查询员工名、部门名、城市、工资级别以及上级姓名等信息。同时,还介绍了如何利用HAVING子句筛选部门个数大于2的国家。文章最后讨论了如何根据工资范围查询工资级别,并提供了创建和填充工资级别表的SQL语句。
摘要由CSDN通过智能技术生成

#进阶六:连接查询
/*
  多表查询
  
  按功能分类:
    内连接:
      等值连接
      非等值连接
      自连接
    外连接
      左连接
      右连接
      全外连接
    交叉连接
   
*/
USE girls;
SELECT * FROM admin;
SELECT * FROM beauty;
SELECT * FROM boys;

SELECT NAME,boyName FROM beauty,boys WHERE boyfriend_id = boys.`id`;

#sql192标准
/*
  多表连接的结果为多表的交集部分
*/
#1.等值连接
#案例1:查询员工名和对应的部门名
SELECT 
  last_name,
  department_name 
FROM
  employees e,
  departments d 
WHERE e.`department_id` = d.`department_id` #可以加筛选条件


#可以加分组
#案例1:查询每个城市的部门个数
  SELECT 
    city,
    COUNT(*) 个数 
  FROM
    departments d,
    locations l 
  WHERE d.`location_id` = l.`location_id` 
  GROUP BY city ;
  
  SELECT COUNT(DISTINCT city) FROM locations;
   SELECT COUNT(*) FROM locations;
   

#案例2:查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资
SELECT 
  department_name,
  d.manager_id,
  MIN(salary) 
FROM
  employees e,
  departments d 
WHERE e.`department_id` = d.`department_id`
  AND e.`commission_pct` IS NOT NULL 
GROUP BY  department_name;

#加排序
#案例:查询每个工种的工种名和员工的个数,并按员工的个数降序排序
SELECT job_title,COUNT(*) 员工个数 FROM employees e,jobs j WHERE e.`job_id`=j.`job_id` GROUP BY job_title ORDER BY 员工个数 DESC;


#可以实现三表连接?
#案例:查询员工名、部门名和所在的城市
SELECT 
  last_name,
  department_name,
  city 
FROM
  employees e,
  departments d,
  locations l 
WHERE e.`department_id` = d.`department_id` 
  AND d.`location_id` = l.`location_id` ;


#创建工资级别表
USE myemployees;
CREATE TABLE job_grades
(grade_level VARCHAR(3),
 lowest_sal INT,
 highest_sal INT);
 
 INSERT INTO job_grades
 VALUES('A',1000,2999);
 
 INSERT INTO job_grades
 VALUES('B',3000,5999);
 
 INSERT INTO job_grades
 VALUES('C',6000,9999);
 
 INSERT INTO job_grades
 VALUES('D',10000,14999);
 
 INSERT INTO job_grades
 VALUES('E',15000,24999);
 
 INSERT INTO job_grades
 VALUES('F',25000,40000);

#2.非等值连接
#案例:查询员工的工资和工资级别
SELECT 
  SALARY,
  grade_level 
FROM
  employees e,
  job_grades j 
WHERE salary BETWEEN lowest_sal 
  AND highest_sal ORDER BY grade_level;
  

#3.自连接(将一个表看成两种表连接)
#案例:查询员工名和上级的名称
SELECT last_name,employee_id,manager_id FROM employees;
SELECT e.last_name,e.`manager_id`,m.`employee_id`,m.`last_name` FROM employees e,employees m WHERE e.`manager_id` = m.`employee_id`;


#练习1:查询每个国家下的部门个数大于2的国家编号
SELECT country_id,COUNT(*) 部门个数 FROM locations l,departments d WHERE d.`location_id`=l.`location_id` GROUP BY country_id HAVING 部门个数>2;
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值