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

news/2024/5/18 21:49:35 标签: 数据库, sql, mysql, java, jdbc
sql">#进阶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`;





http://www.niftyadmin.cn/n/890607.html

相关文章

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

#2.非等值连接#案例1:查询员工的工资和工资级别(另一张表) SELECT salary,grade_level FROM employees e,job_grades g WHERE salary BETWEEN g.lowest_salAND g.highest_sal ;#3.自连接#案例:查询 员工名 和上级名名称 SELECT e.employee_id,e.last_name, m.employee_id,m.las…

数据库子查询 含义-分类-语句

#进阶7; 子查询 /* 含义: 出现在其他语句中的select语句,称为子查询或内查询 外部的查询语句,称为查询或外查询分类: 按子查询出现的位置:select后面仅仅支持标量子查询(结果集只有一行一列)from后面 支持表子查询(结果集一般为多行多列)where偶having后面 :< 重点--重点--重…

数据库子查询 ---where或having后面----列子查询-多行子查询

#一.where或having后面 /* 1.标量子查询(当行子查询) 2.列子查询(多行子查询)3.行子查询(多列多行)特点:①子查询放在小括号内②子查询一般放在条件的右侧 ③标量子查询,一般搭配着当行操作符使用> < < > <>④列子查询,一般搭配着多行操作符使用In and/some …

数据库子查询-select后面语句

/* 仅仅支持标量子查询 */#案例&#xff1a;查询每个部门的员工个数SELECT d.*,(SELECT COUNT(*)FROM employees eWHERE e.department_id d.department_id) 个数FROM departments d;#案例2&#xff1a;查询员工号102的部门名SELECT (SELECT department_name,e.department_idFR…

Mysql分页查询语句

#进阶8&#xff1a;分页查询 ★ /*应用场景&#xff1a;当要显示的数据&#xff0c;一页显示不全&#xff0c;需要分页提交sql请求 语法&#xff1a;select 查询列表from 表【join type join 表2on 连接条件where 筛选条件group by 分组字段having 分组后的筛选order by 排序的…

Mysql联合查询语句语法

#进阶9:联合查询 /*union 联合 合并 :将多条查询语句的结果合并成一个结果语法: 查询语句1 union 查询语句2 union .......可以用于一个数据库 2张不同的表连接特点:1.要求多条查询语句的查询列数是一致的2.要求多条查询语句的查询的美每一列类型和顺序最好顺序最好一致3.union…

Mysql常见约束-创建_修改_表时添加约束 自增长列

常见约束 一、常见的约束 NOT NULL&#xff1a;非空&#xff0c;该字段的值必填 UNIQUE&#xff1a;唯一&#xff0c;该字段的值不可重复 DEFAULT&#xff1a;默认&#xff0c;该字段的值不用手动插入有默认值 CHECK&#xff1a;检查&#xff0c;mysql不支持 PRIMARY KEY&…

Mysql事务的介绍和使用步骤

事务 #TCL /* Transaction Control Language 事务控制语言 事务:一个或一组SQL语句组成一个执行单元,这执行单元要么全部执行,要么全部不执行 案例:转账 张三丰 1000 郭襄 1000 update 表 set 张三丰余额500 where name“张三丰” update 表 set 郭襄的余额1500 where na…