子查询,多列查询,合并查询,内外连接,索引,事务管理,用户管理

本文深入探讨了MySQL中的子查询技术,详细介绍了如何在多列数据中进行有效查询。同时,结合合并查询和内外连接操作,展示了如何高效整合不同数据源的信息。此外,文章还重点讨论了索引优化对查询性能的影响,并且讲解了事务管理和用户管理的基础知识,为数据库管理和性能提升提供了实用指南。
摘要由CSDN通过智能技术生成
1. 子查询
	a. 单行子查询: 子查询当中只返回了单列,单行的数据
	b. 多行子查询: 子查询当中返回了单列多行的数据, 两个表的结果如果不在where后面加上约束条件会形成 "笛卡尔积";
	c. 多列子查询: 子查询当中返回多列数据
		使用方式: 只需要在where语句后面使用"(a列,b列) = (子查询语句)"将多个列的名称括起来
	
	查询和SMITH的部门和岗位完全相同的所有雇员
		1. 先查询部门和岗位
			Select deptno, job from where ename=”SMITH”;
				+--------+-------+
				| deptno | job   |
				+--------+-------+
				|     20 | CLERK |
				+--------+-------+  拿到部门和岗位
		2. 再去查询emp中部门号是20的, job是CLERK, 姓名不是SMITH的人
			select ename, deptno, job from emp where deptno=20 and job='CLERK' and ename!="SMITH";
				+-------+--------+-------+
				| ename | deptno | job   |
				+-------+--------+-------+
				| ADAMS |     20 | CLERK |
				+-------+--------+-------+
		多列子查询: 
			select ename, deptno, job from emp where (deptno, job)=(select deptno, job from emp where ename='SMITH');  现在并没有说明检索出来的人中不包含SMITH本人
+-------+--------+-------+
| ename | deptno | job   |
+-------+--------+-------+
| SMITH |     20 | CLERK |
| ADAMS |     20 | CLERK |
+-------+--------+-------+
			 select ename, deptno, job from emp where (deptno, job)=(select deptno, job from emp where ename='SMITH') and ename<> 'SMITH';
+-------+--------+-------+
| ename | deptno | job   |
+-------+--------+-------+
| ADAMS |     20 | CLERK |
+-------+--------+-------+


在from语句中使用子查询:
	select x1, x2, x3 from [表的名称] [select...](select当做是一个临时表)

	问题: 显示属于自己部门平均工资的员工的姓名, 部门, 工资, 平均工资
		1. 平均工资
			select ename, deptno, sal, avg(sal) from emp;
				拿到所有每一个人的姓名, 部门编号, 工资, 部门的平均工资
			select avg(sal),deptno from emp group by deptno;
+-------------+--------+
| avg(sal)    | deptno |
+-------------+--------+
| 2916.666667 |     10 |
| 2175.000000 |     20 |
| 1566.666667 |     30 |
+-------------+--------+
		2. emp表进行分组, 分成不同的部门
			select ename, deptno, sal, avg(sal) from emp, 拿到所有每一个人的姓名, 部门编号, 工资, 部门的平均工资
		
		加上判断条件

			(select deptno, avg(sal) from emp group by deptno);拿到部门编号, 部门平均工资
		比较个人的工资和部门的平均工资
	
		3. 不同的部门
			select ename, deptno, sal, avg_sal from emp, (select avg(sal) avg_sal, deptno dt from emp group by deptno) tmp where tmp.dt=emp.deptno and emp.sal > tmp.avg_sal;
+-------+--------+---------+-------------+
| ename | deptno | sal     | avg_sal     |
+-------+--------+---------+-------------+
| ALLEN |     30 | 1600.00 | 1566.666667 |
| JONES |     20 | 2975.00 | 2175.000000 |
| BLAKE |     30 | 2850.00 | 1566.666667 |
| SCOTT |     20 | 3000.00 | 2175.000000 |
| KING  |     10 | 5000.00 | 2916.666667 |
| FORD  |     20 | 3000.00 | 2175.000000 |
+-------+--------+---------+-------------+

合并查询: 	
	union: 作用是将两个查询的结果集进行合并, 会自动去除结果当中重复的行,
	union all: 作用是将两个查询的结果集进行查询, 不会自动去除结果集当中重复的行

	将工资大于2500或职位是MANAGER的人找出来
		select ename, sal, job from emp where sal > 2500 or job >=2500 union;
select ename, sal, job from emp where sal > 2500;
+-------+---------+-----------+
| ename | sal     | job       |
+-------+---------+-----------+
| JONES | 2975.00 | MANAGER   |
| BLAKE | 2850.00 | MANAGER   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值