MySQL课堂笔记

数据库 SQL 学习笔记
 主子查询(自链接)
 - 查询目标:获取雇员姓名、雇员工资、领导姓名、领导工资
- SQL 示例 1   
SELECT E.ENAME 雇员姓名, E.SAL 雇员工资
FROM EMP E, EMP M
WHERE E.MGR = M.EMPNO;
 解释:通过  EMP  表的自连接,将雇员表  E  和作为领导的雇员表  M  关联起来,条件是雇员的领导编号  MGR  等于领导的雇员编号  EMPNO  。
 - SQL 示例 2
 sql   
SELECT E.ENAME, E.SAL, D.DNAME, M.ENAME
FROM EMP E, DEPT D, EMP M
WHERE E.MGR = M.EMPNO AND E.DEPTNO = D.DEPTNO;
 解释:多表连接,在上述基础上增加了  DEPT  部门表,通过部门编号  DEPTNO  关联  EMP  表和  DEPT  表,同时通过领导编号关联雇员和领导,获取更多信息。
 查询雇员相关综合信息
 - 查询目标:雇员的姓名、雇员工资、部门名称、工资等级
- SQL 示例 
SELECT E.ENAME, E.SAL, D.DNAME, G.GRADE
FROM EMP E, SALGRADE G, DEPT D
WHERE E.DEPTNO = D.DEPTNO AND E.SAL BETWEEN G.LOSAL AND G.HISAL;
解释:连接  EMP  雇员表、 SALGRADE  工资等级表、 DEPT  部门表,通过部门编号关联  EMP  和  DEPT  表,通过工资范围判断雇员的工资等级。
 查询目标:雇员姓名、雇员工资、部门名称、雇员工资等级、领导姓名、领导工资、领导工资等级
- SQL 示例
 SELECT
    E.ENAME AS 雇员姓名,
    E.SAL AS 雇员工资,
    D.DNAME AS 部门名称,
    EG.GRADE AS 雇员工资等级,
    M.ENAME AS 领导姓名,
    M.SAL AS 领导工资,
    MG.GRADE AS 领导工资等级

FROM
    EMP E, DEPT D, EMP M, SALGRADE EG, SALGRADE MG
WHERE
    E.DEPTNO = D.DEPTNO
    AND E.MGR = M.EMPNO
    AND E.SAL BETWEEN EG.LOSAL AND EG.HISAL
    AND M.SAL BETWEEN MG.LOSAL AND MG.HISAL;
解释:多表复杂连接,关联多个表获取雇员及其领导的详细信息,包括工资等级等,通过各表间关联条件和工资范围判断来筛选数据。
SQL99 标准
- 简介:SQL99 标准,也称为 SQL1999 标准,制定于 1999 年 。主要分类为内连接、外连接 。
- 内连接语法
sql   
SELECT 列名1 AS 别名1, 列名2 AS 别名2...
FROM 表名1 别名1
INNER JOIN 表名2 别名2 ON 连接条件
WHERE 过滤条件
ORDER BY 排序条件 ASC|DESC;
解释: INNER JOIN  用于连接两个或多个表, ON  关键字指定连接条件,通过指定列名获取数据,并可进行条件过滤和排序。
- 查询示例
- 查询目标:查询雇员编号、雇员姓名、雇员工资、部门名称
- 方法 1:内连接  
SELECT E.EMPNO 雇员编号, E.ENAME 雇员姓名, E.SAL 雇员工资, D.DNAME 部门名称
FROM EMP E
INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
解释:使用  INNER JOIN  连接  EMP  表和  DEPT  表,连接条件是部门编号相等,获取所需的雇员和部门相关信息。
- 方法 2:自然连接
SELECT E.EMPNO 雇员编号, E.ENAME 雇员姓名, E.SAL 雇员工资, D.DNAME 部门名称
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO;
解释:通过在  WHERE  子句中指定相同的部门编号条件进行连接,实现类似内连接获取数据的效果。
- 查询目标:查询工资大于 1500 的雇员姓名、工资、部门名称、领导姓名
- 方法 1:内连接
SELECT
    E.ENAME AS 雇员姓名,
    E.SAL AS 雇员工资,
    D.DNAME AS 部门名称,
    M.ENAME AS 领导姓名
FROM
    EMP E
INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO
INNER JOIN EMP M ON E.MGR = M.EMPNO
WHERE E.SAL > 1500;
解释:通过多次  INNER JOIN  连接  EMP  表(两次,分别代表雇员和领导)和  DEPT  表,连接条件分别是部门编号和领导编号,再通过  WHERE  子句筛选出工资大于 1500 的雇员相关信息。
 - 方法 2
SELECT E.ENAME 雇员姓名, E.SAL 雇员工资, D.DNAME 部门名称, M.ENAME 领导姓名
FROM EMP E, DEPT D, EMP M
WHERE E.SAL > 1500 AND E.DEPTNO = D.DEPTNO AND E.MGR = M.EMPNO
解释:通过在  WHERE  子句中同时指定部门编号相等和领导编号相等的条件,以及工资大于 1500 的条件,实现多表连接获取数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值