首页 小组 文章 相册 留言本 用户 搜索 我的社区 在线学堂 商城 购物车 支付钱包

[打卡]顾的笔记

2024-04-12 16:55:46
0
148

# 思考: 三张表不能合成一张表
#查询员工ID和部门名称

#错误示范,把每个员工和每个部门都排序一遍
SELECT employee_id,department_name
FROM employees,
SELECT * FROM employees;


正确操作
SELECT employee_id,department_name,departments.department_id
FROM employees,departments
#两个表的连接条件
WHERE employees.manager_id=departments.manager_id; 


简化
SELECT employee_id,department_name,dep.department_id
FROM employees emp,departments dep
#两个表的连接条件
WHERE emp.manager_id=dep.manager_id; 

SELECT emp.last_name,dep.department_name
FROM employees emp,departments dep
WHERE emp.department_id=dep.department_id; 连接条件


#如果查询中出现了两个表都有的字段,需要指出具体的表
#可以给表起别名,在SELECT和where中使用表别名
#如果给表起了别名,一但在SELECT和where中使用表别名,则必须使用表别名,而不能再使用原名
#从sql的优化角度来看,建议每个字段前都加上对应着的表名。
#简写只在一条语句中有效

#结论:如果有n个表实现多表查询,至少需要n-1连接条件。
#查询员工的employee_id,last_name,dep.department_name,city
SELECT e.employee_id,e.last_name,d.department_name,l.city
FROM employees e,departments d,locations l
WHERE e.department_id=d.department_id 
and d.location_id=l.location_id;



#结论:如果有n个表实现多表查询,至少需要n-1连接条件。
#查询员工的employee_id,last_name,dep.department_name,city
SELECT e.employee_id,e.last_name,d.department_name,l.city
FROM employees e,departments d,locations l
WHERE e.department_id=d.department_id 
and d.location_id=l.location_id;
#多表查询的分类
/*
角度1:等值连接 VS 非等值连接
角度2:自连接(自我引用)vs 非自连接
角度3:内连接 vs 外连接
*/
# 角度1:等值连接 VS 非等值连接
SELECT * FROM job_grades;
#查询名字月薪和对应的等级

SELECT last_name,salary,grade_level
FROM employees,job_grades
WHERE employees.salary 
BETWEEN job_grades.lowest_sal
AND job_grades.highest_sal;

第二种方法
SELECT last_name,salary,grade_level
FROM employees,job_grades
WHERE employees.salary >= job_grades.lowest_sal
AND employees.salary <= job_grades.highest_sal;


#角度2:自连接(自我引用)vs 非自连接
SELECT * FROM employees;
#练习:查询员工的ID、员工姓名及其管理者的姓名
SELECT emp.employee_id,emp.last_name,mgr.employee_id,mgr.last_name
FROM employees emp,employees mgr
WHERE emp.manager_id=mgr.employee_id;








评论
意见反馈