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`ISNOTNULL;#案例2: 查询城市名中第二个字符为 o的部门名和城市名SELECT department_name,city
FROM departments d,locations l
WHERE d.`location_id`=l.`location_id`AND city LIKE'_o%';#5 可以加分组#案例1:查询每个城市的部门个数SELECTCOUNT(*) 个数,city
FROM departments d,locations l
WHERE d.`location_id`=l.`location_id`GROUPBY 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 ISNOTNULLGROUPBY department_name,d.manager_id;#6 可以加排序#案例:查询每个工种的工种名和员工的个数,并且按员工个数降序SELECT job_title,COUNT(*)FROM employees e,jobs j
WHERE e.`job_id`=j.`job_id`GROUPBY job_title
ORDERBYCOUNT(*)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`;
#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…
事务
#TCL /* Transaction Control Language 事务控制语言
事务:一个或一组SQL语句组成一个执行单元,这执行单元要么全部执行,要么全部不执行
案例:转账
张三丰 1000 郭襄 1000
update 表 set 张三丰余额500 where name“张三丰”
update 表 set 郭襄的余额1500 where na…