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

#6:连接查询
/*
含义:多表查询,当查询的字段来自多个表

笛卡尔积: 表1,m行;表2,n行; 表1,表2 = m*n行
发生原因:表1的每行和表2的n行拼接,形成n行,最终得到m*n行
如何避免:增加连接条件

连接查询的分类:
按年代分类:
sql92标准【mysql只支持该标准的内连接,一部分外连接】
sql99标准【推荐】mysql支持内连接 外连接(左右连接) 交叉连接

按功能分类:
内连接
  等值连接
  非等值连接
  自连接
外连接
  左连接
  右连接
  全连接
交叉连接
*/
USE girls;

# 笛卡尔积现象
SELECT * FROM beauty,boys;

# 增加连接条件
SELECT NAME,boyName
FROM beauty,boys
WHERE beauty.`boyfriend_id` = boys.`id`;

# 一、sql92标准
# 1、内连接-等值连接
/*
n表连接,需要至少n-1个条件
表的顺序没有要求
一般需要给表起别名
可以搭配所有子句使用,比如:筛选,分组,排序
*/
# 案例1: 查询女神名和对应的男神名
SELECT NAME,boyName
FROM beauty,boys
WHERE beauty.`boyfriend_id` = boys.`id`;

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

# 2、给表起别名
/*
区分多个重名的字段
提高语句简洁
注意:如果给表起了别名,原始表在该SQL中就不再生效
*/

# 案例3:查询员工号,工种号,工种名
SELECT employee_id, e.job_id, job_title
FROM employees AS e,jobs AS j
WHERE e.`job_id` = j.`job_id`;

# 3、两个表的顺序是否可以调整

# 案例3:查询员工号,工种号,工种名
SELECT employee_id, e.job_id, job_title
FROM jobs AS j,employees AS e
WHERE e.`job_id` = j.`job_id`;

# 4、带筛选条件的等值内连接查询

# 案例:查询有奖金的员工名,部门名
SELECT last_name, department_name, commission_pct
FROM employees AS e, departments AS d
WHERE e.`department_id` = d.`department_id`
AND e.`commission_pct` IS NOT NULL ;

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

# 5、带分组的等值内连接查询

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

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

# 6、带排序的等值内连接查询

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

# 7、三表连接
# 案例:查询员工名,部门名,所在城市
SELECT last_name, department_name, city
FROM employees AS e, departments AS d, locations AS l
WHERE e.`department_id` = d.`department_id`
AND d.`location_id` = l.`location_id`;

时间: 2024-10-29 01:19:44

07_MySQL DQL_多表查询_等值内连接的相关文章

08_MySQL DQL(SQL99标准)_多表连接查询中的内连接

# sql99语法/*语法: select 查询列表 from 表1 别名 [连接类型] join 表2 别名 on 连接条件 [where 筛选条件] [group by 分组] [having 分组后筛选] [order by 排序列表] 分类内连接(重点): inner外连接 左外(重点): left [outer] 右外(类似左外) right [outer] 全外: full [outer]交叉连接:cross */ # 一.内连接(就是把两个表的字段全部连接,表间没有顺序)/* se

SQLServer学习笔记<> 表连接查询----交叉连接、内连接、左连接、右连接

(1)交叉连接(cross join)即我们所说的笛卡尔积.查询出满足两张表所有的记录数,A(3条记录),B(9条记录),A*B(27条记录). 比如:雇员表(HR.employees)和货运公司(Sales.shippers)表做一个交叉连接. 1 select * from hr.employees; 2 select * from sales.shippers; 进行交叉连接以后,则找到27条记录. 1 select a.empid,b.shipperid 2 from hr.employ

数据库之多表查询

一 ,多表查询 1.内连接:把两张表有对应关系的记录连接成一张虚拟表 select * from emp inner join dep on emp.dep_id = dep.id; #应用: select * from emp,dep where emp.dep_id = dep.id and dep.name = "技术"; # 不要用where做连表的活 select * from emp inner join dep on emp.dep_id = dep.id where d

MySQL_连表查询

连表查询 连表查询通常分为内连接和外连接.内连接就是使用INNER JOIN进行连表查询:而外连接又分为三种连接方式,分别是左连接(LEFT JOIN).右连接(RIGHT JOIN).全连接(FULL JOIN).下来我们一起来看一下这几种连接方式的区别及基础用法. 内连接 INNER JOIN INNER JOIN将只会返回相匹配的元素项,即不会返回结果为NULL的数据项.如下图所示: INNER JOIN查询的两张表(A.B)的共有的部分,查询结果为null的记录不会出现. 外连接 关键字

SQL Fundamentals || 多表查询(内连接,外连接(LEFT|RIGHT|FULL OUTER JOIN),自身关联,ON,USING,集合运算UNION)

一.多表查询基本语法 在进行多表连接查询的时候,由于数据库内部的处理机制,会产生一些“无用”的数据,而这些数据就称为笛卡尔积. 多表查询时可以利用等值关联字段消除笛卡尔积 多表查询之中,每当增加一个关联表都需要设置消除笛卡尔积的条件 分析过程很重要: 确定所需要的数据表 确定已知的关联字段: 按照SQL语句的执行步骤编写:FROM,WHERE,SELECT,ORDER BY (由于SELECT是在WHERE子句之后执行,所以SELECT子句所定义的别名WHERE不可以直接使用) (由于SELEC

多表查询与内连接,外连接

1 多表查询:创建一个部门表和员工表并插入数据 代码块 use company; #创建部门表 CREATE TABLE department ( id int PRIMARY key auto_increment, dep_name varchar(10) not null ); #创建员工表 CREATE TABLE employee( id int PRIMARY key auto_increment, emp_name varchar(10) not null, dep_id int -

数据库SQL的多表查询

数据库 SQL 的多表查询:eg: table1: employees, table2: departments,table3: salary_grades; 一:内连接: 1):等值连接: 把表employees中的department_id 与表departmes中的department_id相匹配的找出来 select e.last_name, d.department_id from employees e,departments d where e.department_id = d.

Sql Service的艺术(四) SQL多表查询

表的基本连接 SQL的一个重要特性就是能通过JOIN关键词,从多个交叉表中查询.分析数据. 连接表的目的 在关系数据库中,数据表设计的一个重要原则就是要避免冗余性. 减少了冗余信息,节省了数据库存储空间. 简化了数据修改.维护操作. 学习本节需要的数据表: CREATE TABLE TEACHER ( ID INT IDENTITY (1,1) PRIMARY KEY , --主键,自增长 TNO INT NOT NULL, --教工号 TNAME CHAR(10) NOT NULL, --教师

mysql 增删改查,表查询(重点)

十一.数据的增删改: 本节重点: 插入数据 INSERT 更新数据 UPDATE 删除数据 DELETE 再来回顾一下之前我们练过的一些操作,相信大家都对插入数据.更新数据.删除数据有了全面的认识.那么在mysql中其实最重要的不是这三大操作,而是查数据最重要,下节课知晓 一. 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 1.使用INSERT实现数据的插入 2.UPDATE实现数据的更新 3.使用DELETE实现数据的删除 4.使用SELECT查询数据以及.