剑三做月饼活动网站,建筑设计师工资很高吗,手机做网站公司有哪些,WordPress 处理表单文章目录 多表查询内连接查询隐式内连接显示内连接注意事项 外连接查询左外连接右外连接 子查询子查询单行单列子查询多行单列子查询多行多列 多表查询 接下来需要用到的表 -- 创建公司数据库
CREATE DATABASE IF NOT EXISTS company CHARACTER SET utf8;-- 使用数据库
USE com… 文章目录 多表查询内连接查询隐式内连接显示内连接注意事项 外连接查询左外连接右外连接 子查询子查询单行单列子查询多行单列子查询多行多列 多表查询 接下来需要用到的表 -- 创建公司数据库
CREATE DATABASE IF NOT EXISTS company CHARACTER SET utf8;-- 使用数据库
USE company;-- 创建部门表
CREATE TABLE dept(did INT PRIMARY KEY AUTO_INCREMENT, -- 部门编号dname VARCHAR(40) -- 部门名称
);-- 向部门表插入数据
INSERT INTO dept(dname) VALUES(开发部),(市场部),(财务部);-- 创建员工表
CREATE TABLE emp(eid INT PRIMARY KEY AUTO_INCREMENT, -- 员工编号ename VARCHAR(40), -- 员工姓名gender CHAR(1), -- 性别salary DOUBLE, -- 工资join_date DATE, -- 入职日期dept_id INT, -- 部门外键FOREIGN KEY (dept_id) REFERENCES dept(did) -- 外键关联部门表
);-- 插入数据
INSERT INTO emp(ename,gender,salary,join_date,dept_id) VALUES(孙悟空,男,7200,2018-01-24,1);
INSERT INTO emp(ename,gender,salary,join_date,dept_id) VALUES(猪八戒,男,3600,2019-12-02,2);
INSERT INTO emp(ename,gender,salary,join_date,dept_id) VALUES(唐僧,男,9000,2018-08-08,2);
INSERT INTO emp(ename,gender,salary,join_date,dept_id) VALUES(白骨精,女,5000,2019-10-07,3);
INSERT INTO emp(ename,gender,salary,join_date,dept_id) VALUES(蜘蛛精,女,4500,2020-03-14,1);查询语法 SELECT列名列表
FROM表名列表
WHERE限定条件注意多表查询要 消除无用的数据 内连接查询
隐式内连接 使用 where 条件消除无用数据 标准格式 SELECTt1.ename, -- 员工表的姓名t1.gender, -- 员工表的性别t2.dname -- 部门表的名称
FROMemp t1, -- 起别名替换表名更加方便dept t2
WHEREt1.dept_id t2.did; -- 员工表外键等于部门表的did键示例代码 查询所有员工信息和对应的部门信息 SELECT*
FROMemp e,dept d
WHEREe.dept_id d.did;查询员工表的名称、性别部门表的名称 SELECTt1.ename, -- 员工表的姓名t1.gender, -- 员工表的性别t2.dname -- 部门表的名称
FROMemp t1, -- 起别名替换表名更加方便dept t2
WHEREt1.dept_id t2.did;显示内连接 语法 SELECT字段列表
FROM表名1
[INNER] JOIN -- 这里的 INNER 可以去掉的表名2
ON条件;示例代码 查询所有员工信息和对应的部门信息 -- 方式一
SELECT*
FROMemp t1
INNER JOINdept t2
ONt1.dept_id t2.did; -- 员工表部门外键等于部门表主键-- 方式二
SELECT*
FROMemp t1
JOIN -- 这里的 INNER 可以去掉的dept t2
ONt1.dept_id t2.did; -- 员工表部门外键等于部门表主键查询所有员工姓名和所属部门信息 SELECT t1.ename 员工姓名,t2.dname 员工部门
FROMemp t1
JOIN dept t2
ONt1.dept_id t2.did; -- 员工表部门外键等于部门表主键注意事项
内连接查询 明确从哪些表中查询什么数据查询的限制条件是什么我们要查询哪些字段 外连接查询
左外连接 语法 SELECT字段列表
FROM表1
LEFT [OUTER] JOIN -- 左外连接表2
ON条件;左外连接查询什么 查询的是左表所有数据及其交集部分 代码示例 查询所有员工信息如果员工有部门则查询部门名称没有部门则不显示部门名称 SELECTt1.*, -- 员工表所有信息t2.dname -- 部门名称
FROMemp t1
LEFT OUTER JOIN -- 左外连接dept t2
ONt1.dept_idt2.did;查询开发部员工信息 SELECTt1.*,t2.dname
FROMemp t1
LEFT JOINdept t2
ONt1.dept_idt2.did
WHERE t2.dname开发部;右外连接 语法 SELECT字段列表
FROM表1
RIGHT [OUTER] JOIN -- 右外连接表2
ON条件;右外连接查询什么 查询的是右表所有数据以及其交集部分 代码示例 查询所有员工信息及部门信息右表在前 SELECT*
FROMdept t2
RIGHT JOINemp t1
ONt1.dept_idt2.did;子查询
概述查询中嵌套查询称嵌套查询为子查询
子查询单行单列 概述子查询的结果可以作为条件使用运算符( )进行判断 代码示例 查询员工工资小于平均工资的人 SELECT*
FROMemp
WHEREemp.salary(SELECT AVG(salary) FROM emp); -- 子查询的条件作为判断结果-- 子查询结果单行单列的。显示 平均工资是5860
SELECT AVG(salary) FROM emp;查询员工属于市场部的人 SELECT*
FROMemp
WHEREemp.dept_id(SELECT dept.did FROM dept WHERE dept.dname市场部);-- 子查询结果单行单列显示 2
SELECT dept.did FROM dept WHERE dept.dname市场部;注意如果根据需要发现需要使用子查询一定要看需求中子查询结果是否是单行单列
子查询多行单列 概述子查询的结果可以作为条件使用运算符 in 进行判断 示例代码 查询 财务部 和 市场部 所有的员工信息 SELECT*
FROMemp
WHEREemp.dept_id IN(SELECT did FROM dept WHERE dname IN(市场部,财务部));-- 子查询结果多行单列
SELECT did FROM dept WHERE dname IN(市场部,财务部);子查询多行多列 概述子查询可以作为一张虚拟表参与查询第三张表 示例代码 查询员工入职日期是2018-11-11日之后的员工信息和部门信息 SELECT*
FROMdept t1,(SELECT * FROM emp WHERE join_date2018-11-11) t2 -- 子查询多行多列
WHEREt1.didt2.dept_id;注意 多表查询的时候需要分析查询那几个表条件是什么即可。