目录
1.补一下数据库
(1)多表查询
内连接
外连接
子查询
(2)多表查询案例
(3)事物
介绍
四大特征(ACID)
1.补一下数据库
(1)多表查询
内连接
这就是内连接:
外连接
子查询
多行单列
多行多列
子查询使用规则:
子查询放在圆括号中
子查询放在比较条件右边(非强制)
子查询中不需要ORDER BY 子句
在单行子查询中使用单行运算符,在多行子查询中用多行运算符。
单行运算符:子查询结果只有一个:< > = <= >= !=
多行子查询:子查询结果是单列多行:in , any,all
多列子查询:子查询为多列,一定要在FROM后作为表,且一定要取别名,否则无法访问这张表中的字段。
(2)多表查询案例
DROp TABLE IF EXISTS emp;
DROP TABLE IF EXISTS dept;
DROP TABLE IF EXISTS job;
DROP TABLE IF EXISTS salarygrade;
-- 部门表
CREATE TABLE dept (
id INT PRIMARY KEY PRIMARY KEY, -- 部门id
dname VARCHAr(50), -- 部门名称
loc VARCHAr(50) -- 部门所在地
);
-- 职务表,职务名称,职务描述
CREATE TABLE job (
id INT PRIMARY KEY,
jname VARCHAr(20),
description VARCHAr(50)
);
-- 员工表
CREATE TABLE emp (
id INT PRIMARY KEY, -- 员工id
ename VARCHAr(50), -- 员工姓名
job_id INT, -- 职务id
mgr INT , -- 上级领导
joindate DATE, -- 入职日期
salary DECIMAL(7,2), -- 工资
bonus DECIMAL(7,2), -- 奖金
dept_id INT, -- 所在部门编号
CONSTRAINT emp_jobid_ref_job_id_fk FOREIGN KEY (job_id) REFERENCES job (id),
CONSTRAINT emp_deptid_ref_dept_id_fk FOREIGN KEY (dept_id) REFERENCES dept (id)
);
-- 工资等级表
CREATE TABLE salarygrade (
grade INT PRIMARY KEY, -- 级别
losalary INT, -- 最低工资
hisalary INT -- 最高工资
);
-- 1.查询所有员工信息。查询员工编号,员工姓名,工资,职务名称,职务描述
-- 隐式内连接
SELECT
emp.id,
emp.ename,
emp.salary,
job.jname,
job.description
FROM
emp,
job
WHERe
emp.job_id = job.id;
SELECt
*
FROM
emp;
SELECt
*
FROM
job;
-- 显式内连接
SELECt
emp.id,
emp.ename,
emp.salary,
job.jname,
job.description
FROM
emp
INNER JOIN job ON emp.job_id = job.id;
-- 2.查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置
-- 隐式内连接
SELECt
emp.id,
emp.ename,
emp.salary,
job.jname,
job.description,
dept.dname,
dept.loc
FROM
emp,
job,
dept
WHERe
emp.job_id = job.id
and dept.id = emp.dept_id
;
-- 显式内连接
SELECt
emp.id,
emp.ename,
emp.salary,
job.jname,
job.description,
dept.dname,
dept.loc
FROM
emp
INNER JOIN job ON emp.job_id = job.id
INNER JOIN dept ON dept.id = emp.dept_id
;
-- 3.查询员工姓名,工资,工资等级
SELECt
emp.ename,
emp.salary,
t2.*
FROM
emp,
salarygrade t2
WHERe
emp.salary >= t2.losalary
AND emp.salary <= t2.hisalary
-- 4.查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级
SELECt
emp.id,
emp.ename,
emp.salary,
job.jname,
job.description,
dept.dname,
dept.loc,
t2.grade
FROM
emp
INNER JOIN job ON emp.job_id = job.id
INNER JOIN dept ON dept.id = emp.dept_id
INNER JOIN salarygrade t2 ON emp.salary BETWEEN t2.losalary and t2.hisalary;
-- 5.查询出部门编号、部门名称、部门位置、部门人数
select * from dept;
select dept_id, count(*) from emp group by dept_id;
SELECt
dept.id,
dept.dname,
dept.loc,
t1.count
FROM
dept,
(
SELECt
dept_id,
count(*) count
FROM
emp
GROUP BY
dept_id
) t1
WHERe
dept.id = t1.dept_id
这里第五个问题最难,要对Group by 子查询有认识。
group by和having介绍:
https://www.jb51.net/article/219383.htm
(3)事物
介绍
-- 1.查询所有员工信息。查询员工编号,员工姓名,工资,职务名称,职务描述 -- 隐式内连接 SELECT emp.id, emp.ename, emp.salary, job.jname, job.description FROM emp, job WHERe emp.job_id = job.id; SELECt * FROM emp; SELECt * FROM job; -- 显式内连接 SELECt emp.id, emp.ename, emp.salary, job.jname, job.description FROM emp INNER JOIN job ON emp.job_id = job.id; -- 2.查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置 -- 隐式内连接 SELECt emp.id, emp.ename, emp.salary, job.jname, job.description, dept.dname, dept.loc FROM emp, job, dept WHERe emp.job_id = job.id and dept.id = emp.dept_id ; -- 显式内连接 SELECt emp.id, emp.ename, emp.salary, job.jname, job.description, dept.dname, dept.loc FROM emp INNER JOIN job ON emp.job_id = job.id INNER JOIN dept ON dept.id = emp.dept_id ; -- 3.查询员工姓名,工资,工资等级 SELECt emp.ename, emp.salary, t2.* FROM emp, salarygrade t2 WHERe emp.salary >= t2.losalary AND emp.salary <= t2.hisalary -- 4.查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级 SELECt emp.id, emp.ename, emp.salary, job.jname, job.description, dept.dname, dept.loc, t2.grade FROM emp INNER JOIN job ON emp.job_id = job.id INNER JOIN dept ON dept.id = emp.dept_id INNER JOIN salarygrade t2 ON emp.salary BETWEEN t2.losalary and t2.hisalary; -- 5.查询出部门编号、部门名称、部门位置、部门人数 select * from dept; select dept_id, count(*) from emp group by dept_id; SELECt dept.id, dept.dname, dept.loc, t1.count FROM dept, ( SELECt dept_id, count(*) count FROM emp GROUP BY dept_id ) t1 WHERe dept.id = t1.dept_id
这里第五个问题最难,要对Group by 子查询有认识。
group by和having介绍:
https://www.jb51.net/article/219383.htm
介绍
这里有一个BEGIN就告诉这个机器,下面的都是临时操作,如果去掉最后的回滚,那只能在自己这里查询是可以看到1000,500的,但是外面的人查询还是原来的1000 1000,而加上回滚,自己这里查询也是1000 1000了。
如果没问题,可以提交事务:commit
四大特征(ACID)
这个很重啊哟,要是忘了就回去看P29 16分钟
最后了解一下事物隔离级别:事务的隔离级别_zhouym_的博客-CSDN博客_事务隔离级别



