九、MySql数据库--关联查询(九)

一、关联查询(多表查询)

1.1 交叉连接(笛卡尔乘积现象)

			
			 交叉连接查询(不推荐。产生笛卡尔乘积现象:4 * 4=16,有些是重复记录)
						SELECT empName,deptName FROM employee,dept;
			
			 笛卡尔乘积现象:
			 				假如employee有4条记录,dept有4条记录,
			 				那么上面的sql查询结果,则为 4*4 条记录。
			 				

1.2 内连接查询

  +++ 内连接查询:左右两边的表相互匹配,只有满足条件的结果才会显示,如果不满足条件,则不显示。
  
			-- 需求:查询员工及其所在部门(显示员工姓名,部门名称)

					-- 内连接方式一:
						SELECT empName,deptName       -- 2)确定哪些哪些字段
							FROM employee,dept    -- 1)确定查询哪些表
							WHERE employee.deptId=dept.id  -- 3)表与表之间连接条件
							
					-- 内连接方式二:
						SELECT empName,deptName
							FROM employee
							INNER JOIN dept
							ON employee.deptId=dept.id;
	
					-- 使用别名
					SELECT e.empName,d.deptName
						FROM employee e
						INNER JOIN dept d
						ON e.deptId=d.id;

1.3 左连接查询

	+++[]连接查询:
   			1.使用左边表的数据逐一去匹配右边表的所有数据,如果符合连接条件的结果则显示,
   			   如果不符合连接条件则显示null。
   			2.左外连接:左表的数据一定会全部显示!,以左表为主。

				
			-- 需求:查询每个部门的员工
			-- 预期结果:
					  软件开发部  张三
					  软件开发部  李四
				      应用维护部  王五
				      秘书部      陈六
				      总经办      null 	
			      
				SELECT d.deptName,e.empName
						FROM dept d
						LEFT OUTER JOIN employee e
						ON d.id=e.deptId;
						

1.4 右连接查询

	+++[]连接查询: 
	          1.使用右边表的数据去匹配左边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null
   			2.右外连接:右表的数据一定会全部显示!,以右表为主。

			SELECT d.deptName,e.empName
				FROM employee e
				RIGHT OUTER JOIN dept d
				ON d.id=e.deptId;
									

1.5 自连接查询


			-- 需求:查询员工及其上司
			-- 预期结果:       
				-- 张三    null
				-- 李四    张三
				-- 王五    李四
				-- 陈六    王五

			SELECT e.empName,b.empName
				FROM employee e 
				LEFT OUTER JOIN employee b
				ON e.bossId=b.id
发布了94 篇原创文章 · 获赞 0 · 访问量 638

猜你喜欢

转载自blog.csdn.net/weixin_45602227/article/details/104156644