数据库(MYSQL)连接查询--sql92等值连接

Posted 陕西五花肉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库(MYSQL)连接查询--sql92等值连接相关的知识,希望对你有一定的参考价值。

#进阶6:连接查询
/*
含义: 又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
笛卡尔乘积: 表1 有m行,表2有n行,结果=m*n行

发生现象;没有有效的连接条件
如何避免:添加上有效的连接条件

分类:
	按年代分类:
	sql92标准:仅仅支持 内连接
	sql99标准[推荐]:支持内连接+外连接(左外和右外)+交叉连接
	
	按功能分类:
			内连接:
				等值连接
				非等值连接
				自连接
			外连接:
				左外连接
				右外连接
				全外连接
			交叉连接
				
	

*/
SELECT * FROM beauty;

SELECT NAME,boyName FROM boys,beauty
WHERE  beauty.boyfriend_id=boys.id;

#一.sql92标准
#1.等值连接

/*
多表等值连接的结果我多表的交集部分
n表连接,至少需要n-1个练级条件
多表的顺序没有要求
一般为表起别名
可以搭配前面的知识

*/
#案例1: 查询女神名和对应的男神名
SELECT NAME,boyName
FROM  boys,beauty
WHERE beauty.`boyfriend_id`=boys.`id`;

#案例2: 查询员工名和对应的部门名
SELECT last_name,department_name
FROM employees,department
WHERE employess.`department_id`=departments.`department_id`;

#2.为表起别名
/*
提高语句简洁度
区分多个重名的字段

注意:如果为表名起了别名,则查询的字段就不能使用原来的表名去限定
	
*/
#查询员工名 工种号 工种名
SELECT e.last_name,e.job_id,j.job_title
FROM employees e,jobs j
WHERE e.`job_id`=j.`job_id`;


#3. 俩个表的顺序是可以交换的
#查询员工名 工种号 工种名
SELECT e.last_name,e.job_id,j.job_title
FROM jobs j,employees e
WHERE e.`job_id`=j.`job_id`;

#4 可以加筛选

#案例:查询有奖金的员工名和部门名
SELECT last_name,department_name,commission_pct

FROM employees e,departments d
WHERE  e.`department_id`=d.`department_id`
AND e.`commission_pct` IS NOT NULL;

#案例2: 查询城市名中第二个字符为 o的部门名和城市名
SELECT department_name,city
FROM departments d,locations l
WHERE d.`location_id`=l.`location_id`
AND city LIKE '_o%';

#5 可以加分组
#案例1:查询每个城市的部门个数
SELECT COUNT(*) 个数,city 
FROM  departments d,locations l
WHERE d.`location_id`=l.`location_id`
GROUP BY city;


#案例2:查询有奖金每个部门的部门名和部门的领导编号和该部门的最低工资
SELECT  department_name,d.manager_id,MIN(salary)
FROM departments d,employees e
WHERE d.`department_id`=e.`department_id`
AND commission_pct IS NOT NULL
GROUP BY department_name,d.manager_id;

#6 可以加排序
#案例:查询每个工种的工种名和员工的个数,并且按员工个数降序
SELECT job_title, COUNT(*)
FROM employees e,jobs j
WHERE e.`job_id`=j.`job_id`
GROUP BY job_title
ORDER BY COUNT(*) DESC;

#7 可以实现三表连接
#案例 : 查询员工名 部门名和所在城市
SELECT 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`;




以上是关于数据库(MYSQL)连接查询--sql92等值连接的主要内容,如果未能解决你的问题,请参考以下文章

MySql数据库与JDBC编程三

lyt经典版MySQL基础——进阶6:连接查询-sql92语法-内连接

数据库Mysql--92非等值连接和自然连接

07_MySQL DQL_多表查询_等值内连接

MySQL学习笔记连接子分页联合查询以及sql语句执行顺序总结

mysql中的连接查询