做电商的进货网站,专业网站定制平台,海南网上申请营业执照步骤,如何宣传推广产品MYSQL多表查询 MYSQL多表查询1.多表关系笛卡尔积 2. 多表查询概述2.1 内连接2.2 外连接2.3自连接联合查询union #xff0c;union all 2.4子查询2.4.1标量子查询2.4.2列子查询2.4.3行子查询2.4.4表子查询 MYSQL多表查询
create table student(id int auto_increment primary … MYSQL多表查询 MYSQL多表查询1.多表关系笛卡尔积 2. 多表查询概述2.1 内连接2.2 外连接2.3自连接联合查询union union all 2.4子查询2.4.1标量子查询2.4.2列子查询2.4.3行子查询2.4.4表子查询 MYSQL多表查询
create table student(id int auto_increment primary key COMMENT ID,name varchar(10) comment 姓名,no varchar(10) comment 学号
)comment 学生表;insert into student values(null,lisa,20001),(null,tracy,20002),(null,janms,20003),(null,qiaodan,20004);create table course(id int auto_increment primary key COMMENT ID,name varchar(10) comment 姓名
)comment 课程表;insert into course values(null,Java),(null,PHP),(null,Mysql),(null,Hadoop);create table student_course(id int auto_increment primary key COMMENT ID,studentid int not null comment 学生id,courseid int not null comment 课堂id,CONSTRAINT fk_courseid foreign key (courseid) REFERENCES course (id),CONSTRAINT fk_studentid foreign key (studentid) REFERENCES student(id)
)comment 学生课程中间表;insert into student_course values(null,1,2),(null,1,1),(null,2,1),(null,3,1);
1.多表关系
一对多在多的一方设置外键关联一的一方的主键 多对多建立中间表中间表包含两个外键关联两张表的主键 一对多 通常用于表结构拆分表对应的拆分表字段任意一方设置unique外键关联另一方的主键
笛卡尔积 select * from emp,dept –多表查询查询出结果的所有集合情况-笛卡尔积消除无效的笛卡尔积通过where条件关联字段筛选 多表连查消除笛卡尔积
SELECT s.name,s.no,c.name from student s,student_course sc,course c where s.idsc.studentid and c.idsc.courseid;2. 多表查询概述 连接查询 内连接相当于查询A、B交集部分的数据 外连接 左外连接查询左表所有数据以及两张表交集部分数据 右外连接查询右表所有数据以及两张表交集部分数据 子查询
2.1 内连接
隐式内连接 SELECT 字段列表 FROM 表1,表2 WHERE 条件; 显示内连接 SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件; 内连接查询的是两张表的交集部分
#隐式连接
select * from emp,dept where emp.dept_iddept.id;
select e.name,d.name from emp e ,dept d where e.dept_idd.id;#显示连接
SELECT e.name,d.name from emp e inner join dept d on e.dept_idd.id;2.2 外连接
左外连接 SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件; 右外连接 SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件; #左外连接
SELECT * from emp e left outer join dept d on e.dept_idd.id;#右外连接
SELECT d.*,e.* from emp e right outer join dept d on e.dept_idd.id;2.3自连接 SELECT 字段列表 FROM 表A 别名A INNER JOIN 表A 别名B ON 条件; SELECT e2.name,e1.name from emp e1 inner join emp e2 on e1.ide2.managerid 查询员工姓名以及领导姓名包括领导为空的员工
SELECT e2.name as 员工,e1.name from emp e2 left join emp e1 on e1.ide2.managerid 联合查询union union all
union将多个查询结果联合起来 SELECTFROM 表1 UNION ALL SELECTFROM 表1 #union all直接合并结果
SELECT * from emp where salary 10000
union all
SELECT * from emp where age32结果 union查询结果进行去重
#union查询结果进行去重
SELECT * from emp where salary 10000
union
SELECT * from emp where age32对于联合查询的多张表的字段必须保持一致
2.4子查询
子查询
标量子查询(查询结果为单个值)列子查询查询结果为一列行子查询子查询结果为一行表子查询子查询结果为多行多列
概念SQL语句中嵌套的SELECT语句称为嵌套查询又称子查询。 SELECT * FROM t1 WHRER column1(SELECT column1* FROM t2); 子查询外部的语句可以是INSERT /UPDATE/DELETE/SELECT 的任何一个 2.4.1标量子查询
子查询返回结果是单个值数字、字符串、日期等最简单的形式 常用的操作、 、 、 、 、
2.4.2列子查询
列子查询:子查询的返回结果是一列可以使多行 常用的操作符IN 、NOT IN 、ANY、SOME、ALL
操作符描述IN在指定的集合范围内多选一NOT IN不在指定的集合范围内ANY子查询列表内有任意一个满足SOME与some等同ALL子查询返回的列表的所有值必须满足
列子查询 查询比财务部所有人工资都高的员工信息
1.查询财务人员工资
SELECT id from dept where name财务部;SELECT salary from emp where dept_id (SELECT id from dept where name财务部);
2.比财务部人所有人工资都高SELECT * from emp where salary all (SELECT salary from emp where dept_id (SELECT id from dept where name财务部));2.4.3行子查询
子查询的返回结果是一行可以使多列 常用的操作、 、IN、NOT IN 查询与张无忌薪资及直属领导相同的员工信息
1.先查询张无忌的薪资与直属领导
SELECT salary,managerid from emp where name张无忌;
2.查询与张无忌薪资及领导一样的员工信息
SELECT * from emp where (salary,managerid)(12500,1);
3.合并sql
SELECT * from emp where (salary,managerid) (SELECT salary,managerid from emp where name张无忌);2.4.4表子查询
子查询返回的结果是多行多列 常用的操作符:IN 与张三与张财务薪资职位相同的员工信息
SELECT job,salary from emp where name张三 or name张财务;SELECT * from emp where (job,salary) in (SELECT job,salary from emp where name张三 or name张财务)查询在2004-01-01之后入职的员工和对应的部门
1.先查询2004-01-01之后的员工信息
SELECT * from emp where entrydate2004-01-012.查询员工对应的部门 左连接包含2004-01-01之后入职没有部门的员工
SELECT e.* ,d.* from (SELECT * from emp where entrydate2004-01-01) e left join dept d on e.dept_idd.id;