3.1 环境准备
--
创建部门表
CREATE TABLE dept (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);
INSERT INTO dept (NAME) VALUES ('开发部'), ('市场部'),('财务部');
--
创建员工表
CREATE TABLE emp (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10),
gender CHAR(1),
-- 性别
salary DOUBLE,
-- 工资
join_date DATE,
-- 入职日期
dept_id INT
);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孙悟空','男',7200,'2013-02-24',1);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('猪八戒','男',3600,'2010-12-02',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2008-08-08',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白骨精','女',5000,'2015-10-07',3);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘蛛精','女',4500,'2011-03-14',1);
3.2 交叉查询【了解】
语法
select A.列,A.列,B.列,B.列 from A,B;
-- 或者
select A.*,B.* from A,B ;
-- 或者
select * from A,B;
练习
:
使用交叉查询部门和员工
select * from dept,emp;
select dept.*,emp.* from dept,emp;
以上数据其实是左表的每条数据和右表的每条数据组
合。左表有
3
条,右表有
5
条,最终组合后
3*5=15
条数
据。
交叉查询其实是一种错误
.
数据大部分是无用数据
,
叫笛卡
尔积
.
3.3 内连接查询【重点】
交叉查询产生这样的结果并不是我们想要的,那么怎么
去除错误的,不想要的记录呢,当然是通过条件过滤。
通常要查询的多个表之间都存在关联关系,那么就通过
关联关系
(
主外键关系
)
去除笛卡尔积。
3.3.1 隐式内连接
select [字段,字段,字段][*] from A,B where 连接 条件 --(A表里面的主键 = B表里面的外键)
3.3.2
显示内连接
显示里面是有
inner
关键字的
select [字段,字段,字段][*] from A [inner] join B on 连接条件 [ where 其它条件]
-- 隐式内连接 -- 语法:select [字段,字段,字段][*] from A,B
where 连接条件 --(A表里面的主键 = B表里面的外键)
select * from dept,emp where dept.id = emp.dept_id; -- 显示所有信息
-- 内连接:显示部门名称,员工名称,工资,性别
select dept.name,emp.name,emp.salary,emp.gender from dept,emp where dept.id = emp.dept_id;
-- 简化: 取别名 工作中常见
select d.name,e.name,e.salary,e.gender from dept as d,emp as e where d.id = e.dept_id;
-- 简化: 取别名 省略as关键字
select d.name,e.name,e.salary,e.gender from dept d,emp e where d.id = e.dept_id;
-- 显示内连接查询 -- 语法:select [字段,字段,字段][*] from A [inner] join B on 连接条件 [ where 其它条件]
select * from dept inner join emp on dept.id=emp.dept_id;
select d.name,e.name,e.salary,e.gender from dept d inner join emp e on d.id=e.dept_id;
注意事项:
内连接查询的是公共部分
,
满足连接条件
(
主外键关系
)
的部分
使用主外键关系做为条件来去除无用信息
.
抓住主外
键的关系,用主外键作为连接条件,B表里面的外键A表
里面的主键
.
显示内连接里面的
,on
只能用主外键关联作为条件
,
如
果还有其它条件
,
后面加
where