lyt经典版MySQL基础——进阶6:连接查询-sql99语法-内连接、外连接、交叉连接[亲测有效]

lyt经典版MySQL基础——进阶6:连接查询-sql99语法-内连接、外连接、交叉连接[亲测有效] 1 #二、sql99语法 2 /* 3 语法: 4 select 查询列表 5 from 表1 别名 【连接类型】 6 join 表2 别名 7 on 连接条件 8 【where 筛选条件】…

	lyt经典版MySQL基础——进阶6:连接查询-sql99语法-内连接、外连接、交叉连接[数据库教程]

  1 #二、sql99语法
  2 /*
  3 语法:
  4     select 查询列表
  5     from 表1 别名 【连接类型】
  6     join 表2 别名
  7     on 连接条件
  8     【where 筛选条件】
  9     【group by分组】
 10     【having 筛选条件】
 11     【order by 排序列表】
 12     
 13     
 14 内连接(√):inner
 15 外连接
 16     左外(√):left 【outer】
 17     右外(√):right【outer】
 18     全外:full【outer】
 19 交叉连接:cross
 20 */
 21 
 22 #(一)内连接
 23 /*
 24 语法:
 25 
 26 select 查询列表
 27 from 表1 别名
 28 inner join 表2 别名
 29 on 连接条件;
 30 
 31 分类:
 32 等值
 33 非等值
 34 自连接
 35 
 36 特点:
 37 (1)添加排序、分组、筛选
 38 (2)inner可以省略
 39 (3)筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
 40 (4)inner join连接和sql92语法中的等值连接效果是一样的,都是查询多表的交集
 41 */
 42 
 43 #1.等值连接
 44 #案例1:查询员工名、部门名
 45 SELECT last_name,department_name 
 46 FROM employees e
 47 INNER JOIN departments d
 48 ON e.department_id=d.department_id;
 49 #案例2:查询名字中包含e的员工名和工种名(添加筛选)
 50 SELECT last_name,job_title
 51 FROM employees e
 52 INNER JOIN jobs j
 53 ON e.job_id=j.job_id
 54 WHERE last_name LIKE %e%;
 55 #案例3:查询部门个数>3的城市名和部门个数(分组+筛选)
 56 #(1)查询每个城市的部门个数
 57 #(2)在(1)结果上筛选满足条件的
 58 SELECT city,COUNT(*) 部门个数
 59 FROM locations l
 60 INNER JOIN departments d
 61 ON l.location_id=d.location_id
 62 GROUP BY city
 63 HAVING 部门个数>3;
 64 #案例4:查询哪个部门的部门员工个数>3的部门名和员工个数,
 65 #并按个数降序(添加排序)
 66 SELECT department_name,COUNT(*) 员工个数
 67 FROM departments d
 68 INNER JOIN employees e
 69 ON d.department_id=e.department_id
 70 GROUP BY e.department_id
 71 HAVING 员工个数>3
 72 ORDER BY 员工个数 DESC;
 73 #案例5:查询员工名、部门名、工种名,并按部门名降序
 74 SELECT last_name,department_name,job_title
 75 FROM employees e
 76 INNER JOIN departments d ON e.department_id=d.department_id
 77 INNER JOIN jobs j ON e.job_id=j.job_id
 78 ORDER BY job_title DESC;
 79 
 80 #2.非等值连接
 81 #查询员工的工资级别
 82 SELECT salary,grade_level
 83 FROM employees
 84 JOIN job_grades
 85 ON salary BETWEEN lowest_sal AND highest_sal;
 86 #查询工资级别的个数>2的个数,并且按工资级别降序
 87 SELECT grade_level,COUNT(*) 个数
 88 FROM employees
 89 JOIN job_grades
 90 ON salary BETWEEN lowest_sal AND highest_sal
 91 GROUP BY grade_level
 92 HAVING 个数>2
 93 ORDER BY grade_level DESC;
 94 
 95 #3.自连接
 96 #查询员工的名字、上级的名字
 97 SELECT e.last_name,m.last_name
 98 FROM employees e
 99 JOIN employees m ON e.manager_id=m.employee_id;
100 #查询姓名中包含字符k的员工的名字、上级的名字
101 SELECT e.last_name,m.last_name
102 FROM employees e
103 JOIN employees m ON e.manager_id=m.employee_id
104 WHERE e.last_name LIKE %k%;
105 
106 #(二)外连接
107 /*
108 应用场景:用于查询一个表中有,另一个表没有的记录
109 
110 特点:
111 1、外连接的查询结果为主表中的所有记录
112     如果从表中有和它匹配的,则显示匹配的值
113     如果从表中没有和它匹配的,则显示null
114     外连接查询结果=内连接结果+主表中有二从表没有的记录
115 2、左外连接,left join左边的是主表
116    右外连接,right join右边的是主表
117 3、左外和右外交换两个表的顺序,可以实现同样的效果
118 4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的
119 */
120 #引入:查询男朋友不在男神表的女神名
121 SELECT * FROM beauty;
122 SELECT * FROM boys;
123 #左外连接
124 SELECT b.name,bo.*
125 FROM beauty b
126 LEFT OUTER JOIN boys bo
127 ON b.boyfriend_id=bo.id
128 WHERE bo.id IS NULL;
129 #右外连接
130 SELECT b.name,bo.*
131 FROM boys bo
132 RIGHT OUTER JOIN beauty b
133 ON b.boyfriend_id=bo.id
134 WHERE bo.id IS NULL;
135 
136 #案例1:查询哪个部门没有员工
137 #左外
138 SELECT d.*,e.employee_id
139 FROM departments d
140 LEFT OUTER JOIN employees e
141 ON d.department_id=e.department_id
142 WHERE employee_id IS NULL;
143 #右外
144 SELECT d.*,e.employee_id
145 FROM employees e
146 RIGHT OUTER JOIN departments d
147 ON d.department_id=e.department_id
148 WHERE employee_id IS NULL;
149 
150 #全外
151 USE girls;
152 SELECT b.*,bo.*
153 FROM bauty b
154 FULL OUTER JOIN boys bo
155 ON b.boyfriend_id=bo.id;
156 
157 #交叉连接
158 SELECT b.*,bo.*
159 FROM beauty b
160 CROSS JOIN boys bo;
161 
162 #sql92 和 sql99 PK
163 /*
164 功能:sql99支持的较多
165 可读性:sql99实现连接条件和筛选条件的分离,可读性较高
166 */

代码100分

 

lyt经典版MySQL基础——进阶6:连接查询-sql99语法-内连接、外连接、交叉连接

原文地址:https://www.cnblogs.com/yanwuliu/p/13373333.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7128.html

(0)
上一篇 2023-03-26 17:00
下一篇 2023-03-26

相关推荐

  • Python语法错误:意外保留字的解决方法

    Python语法错误:意外保留字的解决方法Python保留字是指在Python编程语言中被预留的关键字,这些关键字拥有特定的含义,不能被用户用于定义变量名、函数名、类名等。

    2023-12-08
    64
  • Python 32位与64位版本区别

    Python 32位与64位版本区别Python是一种高级别的脚本语言,由于其简单易懂的语法和丰富的标准库而变得非常受欢迎。Python有多种版本,其中32位和64位版本是最受关注的两种版本。本文将从多个方面介绍Python 32位和64位版本的区别。

    2024-04-18
    21
  • Hadoop节点规模为什么不如Laxcus?[通俗易懂]

    Hadoop节点规模为什么不如Laxcus?[通俗易懂]Hadoop节点规模为什么不如Laxcus?需要从“多域并行集群、松耦合架构、DFL人工智能模型的自适应机制”三个角度来解释

    2023-04-14
    108
  • Linux中MySQL的安装以及卸载「终于解决」

    Linux中MySQL的安装以及卸载「终于解决」一.MySQL MySQL是一种开放源代码的关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购.目前 MySQL被

    2023-04-22
    109
  • Mariadb之显式使用表锁和行级锁 – Linux「建议收藏」

    Mariadb之显式使用表锁和行级锁 – Linux「建议收藏」首先我们来看看mariadb的锁定概念,所谓锁就是当一个进程或事务在操作某一资源时,为了防止其他用户或者进程或事务对其进行资源操作,导致资源抢占而发生冲突,通常在A进程操作该资源时,会对该资源进行加锁

    2023-03-16
    120
  • 麒麟985处理器怎么样?[通俗易懂]

    麒麟985处理器怎么样?[通俗易懂]  最近上网时,发现很多朋友对于荣耀30系列首发的麒麟985处理器非常感兴趣,作为一个从事手机行业很多年的人士,今天就在这里和大家聊一聊,荣耀30系列首发的麒麟985处理器究竟怎么样?   首先在5…

    2023-02-26
    95
  • sql 对表进行聚合查询的方法_MySQL两张表联合查询SQL语句

    sql 对表进行聚合查询的方法_MySQL两张表联合查询SQL语句学习重点 使用聚合函数对表中的列进行计算合计值或者平均值等的汇总操作。 通常,聚合函数会对 NULL 以外的对象进行汇总。但是只有 COUNT 函数例外,使用 COUNT(*) 可以查出包含 NULL

    2023-04-28
    91
  • Python小工具——简单快速排序算法实现

    Python小工具——简单快速排序算法实现
    快速排序算法是计算机科学中常用的一种排序算法,其基本思路是选取一个基准值,将需要排序的序列划分成左右两个子序列分别进行排序。左子序列所有元素的值都小于基准值,右子序列所有元素的值都大于基准值。随后,递归地对左右子序列分别进行排序,最终完成整个序列的排序。

    2024-02-21
    87

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注