#--------------------多表查询-------------------
SELECT * FROM users;
SELECT * FROM users WHERE id IN(1,3,4,5);
#等价于
SELECT * FROM users WHERE id=1 OR id=3 OR id=4 OR id=5;
#聚合函数:max()、min()、avg()、sum()、count
#最高分
SELECT MAX(javaScore) AS topScore FROM users;
SELECT username FROM users WHERE javaScore=129;
#同时查询多张表
SELECT * FROM 表1,表2....表n WHERE 条件
#给表取别名直接空格,给字段别名AS
SELECT * FROM users u,(SELECT MAX(javaScore) AS topScore FROM users) temp WHERE u.javaScore=temp.topScore;
SELECT u.`username` ,temp.topScore
FROM users u,(SELECT MAX(javaScore) AS topScore FROM users) temp
WHERE u.javaScore=temp.topScore;
#部门表(dept)
CREATE TABLE dept
(
id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '部门编号',
deptName VARCHAR(20) COMMENT '部门名称'
)
#员工表(emp)
CREATE TABLE emp(
id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '员工编号',
empName VARCHAR(20) COMMENT '人员名称',
salary FLOAT COMMENT '薪水',
deptId BIGINT(20) COMMENT '部门编号'
)
SELECT * FROM dept;
SELECT * FROM emp;
#(1)查询部门编号=1的部门下的所有员工
SELECT * FROM emp WHERE deptId=1;
#(2)查询所有部门中的所有员工
SELECT * FROM dept d,emp p WHERE d.`id`=p.`deptId`
SELECT p.`id`,p.`empName` FROM dept d,emp p WHERE d.`id`=p.`deptId`
SELECT p.* FROM dept d,emp p WHERE d.`id`=p.`deptId`
SELECT d.`deptName`,p.`empName` FROM dept d,emp p WHERE d.`id`=p.`deptId`
#(3)找出开发部中的所有员工的员工名,薪水,部门名
SELECT * FROM dept d,emp e WHERE d.`id`=e.deptId AND d.`deptName`='开发部'
SELECT d.`deptName`,e.empName FROM dept d,emp e WHERE d.`id`=e.deptId AND d.`deptName`='开发部'
#(4)找出开发部和测试部中的所有员工的员工名,薪水,部门名
SELECT d.`deptName`, e.empName,e.salary
FROM dept d, emp e
WHERE d.`id`=e.deptId AND d.`deptName`='开发部'
SELECT d.`deptName`, e.empName,e.salary
FROM dept d, emp e
WHERE d.`id`=e.deptId AND d.`deptName`='测试部'
#第一种方式
SELECT d.`deptName`, e.empName,e.salary
FROM dept d, emp e
WHERE d.`id`=e.deptId AND d.`deptName`IN ('开发部','测试部')
#第二种方式
SELECT d.`deptName`, e.empName,e.salary
FROM dept d, emp e
WHERE d.`id`=e.deptId AND (d.`deptName`='开发部' OR d.`deptName`='测试部')
#第三种方式
#union,union all:可以将两个查询的结构合并,合并的前提是两个查询的数据结构相同
#union:可以自动去重
#union all:不能够去重
SELECT d.`deptName`, e.empName,e.salary
FROM dept d, emp e
WHERE d.`id`=e.deptId AND d.`deptName`= '开发部
UNION
SELECT d.`deptName`, e.empName,e.salary
FROM dept d, emp e
WHERE d.`id`=e.deptId AND d.`deptName`= '测试部'
#------------------------------------------------------------------------------
#多表查询语法1:select * from 表1,表2.。。表n where 条件
#多表查询方式2:通过连接关键字
# 内链接
# 外连接
# 左外连接
# 右外连接
#内连接:表1 inner join 表2 on 条件(多表之间有关联的条件)
#(1)查询所有部门中的所有员工
SELECT * FROM dept d,emp p WHERE d.`id`=p.`deptId`
SELECT * FROM dept d INNER JOIN emp e ON d.`id`=e.deptId;
SELECT d.`deptName`,e.`empName`,e.`salary`
FROM dept d INNER JOIN emp e
ON d.`id`=e.deptId;
#(2)找出开发部中的所有员工的员工名,薪水,部门名
SELECT d.`deptName`,e.`empName`,e.`salary`
FROM dept d INNER JOIN emp e
ON d.`id`=e.deptId AND d.`deptName`='开发部';