当前位置:网站首页>MySQL4(多表查询)
MySQL4(多表查询)
2022-08-08 04:17:00 【胖胖龙打代码】
排序与分页
如果没有使用排序操作,默认情况下查询返回得数据是按照添加数据的顺序显示的。
单列排序
举例:按照salary从高到低排序(没有指明默认升序)
ASC(ascend): 升序
DESC(descend):降序
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary DESC;

!!!WHERE和ORDER BY 同时出现,先用WHERE
二级排序
练习:显示员工信息,按照id降序排序,salary升序。
SELECT employee_id ,salary,department_id
FROM employees
ORDER BY department_id DESC ,salary ASC;

分页
语法格式:
LIMIT [位置偏移量,] 行数#偏移量为所在行数减一
#需求,每一页显示20条记录
SELECT employee_id ,last_name
FROM employees
LIMIT 0,20;#从第一行开始显示20行

!!!注意:LIMIT 子句必须放在整个SELECT语句的最后!
排序分页练习
- 查询员工的姓名和部门号和年薪,按年薪降序,按姓名升序显示
SELECT last_name,department_id,salary*12 "year salary"
FROM employees
ORDER BY salary DESC ,last_name ASC

2. 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序,显示第21到40位置的数据
SELECT last_name,salary
FROM employees
WHERE salary <8000 OR salary >17000
ORDER BY salary DESC
LIMIT 20,20;

3. 查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序
SELECT last_name ,email,department_id
FROM employees
WHERE email LIKE '%e%'
ORDER BY LENGTH(email) DESC ,department_id ASC;

多表查询
多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。
#查询Abel在哪个城市工作?
SELECT *
FROM employees
WHERE last_name ='Abel';
SELECT *
FROM departments
WHERE department_id =80;
SELECT *
FROM locations
WHERE location_id =2500;

实现多表查询
案例:查询员工的姓名及其部门名称
SELECT employee_id,department_name
FROM employees,departments
WHERE employees.`department_id`=departments.`department_id`
多表查询需要加入链接条件。
案例:查询员工的employee_id,last_name,department_name,city
SELECT e.employee_id,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`

多表查询分类
等值连接和非等值连接
SELECT last_name ,salary,grade_level
FROM employees e,job_grades j
#where e.`salary` between j.`lowest_sal` and j.`highest_sal`;
WHERE e.`salary`>=j.`lowest_sal` AND e.`salary`<=j.`highest_sal`;

自连接和非自连接
题目:查询employees表,返回“Xxx works for Xxx”
SELECT CONCAT(worker.last_name ,' works for ' , manager.last_name)
FROM employees worker, employees manager
WHERE worker.manager_id = manager.employee_id ;

内连接和外连接
内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行
外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接。没有匹配的行时, 结果表中相应的列为空(NULL)。
如果是左外连接,则连接条件中左边的表也称为 主表 ,右边的表称为从表 。
如果是右外连接,则连接条件中右边的表也称为 主表 ,左边的表称为从表
SQL99语法实现多表查询
使用JOIN…ON子句创建连接的语法结构:
SELECT table1.column, table2.column,table3.column
FROM table1
JOIN table2 ON table1 和 table2 的连接条件
JOIN table3 ON table2 和 table3 的连接条件
内连接(INNER JOIN)的实现
SELECT last_name,department_name,city
FROM employees e JOIN departments d
ON e.`department_id`= d.`department_id`
JOIN locations l
ON d.`location_id`=l.`location_id`;

左、右外连接,简单理解哪边多往哪边链接
#实现查询结果是A
SELECT 字段列表
FROM A表 LEFT JOIN B表
ON 关联条件
WHERE 等其他子句
SELECT last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` =d.`department_id`

SELECT last_name,department_name
FROM departments d RIGHT JOIN employees e
ON e.`department_id` =d.`department_id`

UNION


#内连接 A∩B
SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
ON e.`department_id` = d.`department_id`;

#左外连接
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`;

#右外连接
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`;

#左中图:A - A∩B
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL

#右中图:B-A∩B
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL

边栏推荐
- Knowledge of DisplayPort-DP interface
- 小程序优化实践
- MySQL——索引与事务
- 剑指Offer 18.删除链表的节点
- cube-studio 部署过程
- vulnhub-DC-5 target drone penetration record
- 数据库篇复习篇
- 【多任务CTR】阿里ESMM:Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conve
- 以0为底或以1为底对图片迭代次数的影响
- Inside outside l think MindSpore AI framework, heavy industry gathering, huawei big extraordinary path of the model
猜你喜欢

New retail project and offline warehouse core interview,, 220807,,

失业在家的6个月,我通过外包全款买了房:你看不起的行业,往往很赚钱

NetCore使用Dapper查询数据

Inside outside l think MindSpore AI framework, heavy industry gathering, huawei big extraordinary path of the model

VSCode打开 C(嵌入式) 工程的一些记录

package package

【Review of Live Streaming】Synthesis MindSpore Usability SIG2022 First Half Review Summary

leetcode: 874. 模拟行走机器人

Simulate login - add cookies, use postmanget to request web page data

The project management process and key points for each link
随机推荐
The difference between orElse and orElseGet in Optional
包 package
vulnhub-DC-5靶机渗透记录
VSCode打开 C(嵌入式) 工程的一些记录
如何在推荐系统中玩转知识图谱
Basic introduction to NLP
B. Reverse Binary Strings
Video Signal Loss Detection Based on Image 2D Entropy (Signal Loss Detection)
The research project of the Institute of Metal Research of the Chinese Academy of Sciences has been certified by Huawei, helping to develop a new paradigm in materials science!
This article will give you a thorough understanding of synchronized and Lock
torch.view()函数用法
Heterogeneous on the Graph paper to share 】 【 small sample learning: HG - Meta: Graph Meta - learning over Heterogeneous Graphs
New ToDesk Enterprise Edition | Ten new features to make enterprise remote control safer, more convenient and smoother
VSCode opens some records of C (embedded) projects
Research on Blind Recognition of Digital Modulated Signal Based on MindSpore Framework
Vulfocus Shooting Range Scenario Mode - Intranet Dead End
easypoi custom template export
Nanny level tutorial!Golang microservices simple architecture in practice
Personalized use of Qt log module
CARLA 笔记(05)— Actors and blueprints(创建和修改 Blueprint、生成 Spawning、使用 Handling、销毁 Destruction)