多表查询(重点)

在之前查询之中  from  子句之后只有一个数据表,所谓的多表查询是同时从多张数据表中取出数据实现查询

COUNT(*)统计一个表格的数据量

SELECT COUNT(*) FROM EMP ;

将emp和dept表多表查询

如果使用这样的语句查询:

SELECT * FROM EMP ,DEPT ;

这样查出的是 emp*dept的表格

所以要这样:

SELECT * FROM EMP ,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO ;

虽然消除了笛卡尔积,但是笛卡尔积依然存在

如果表格名称过长,往往会为其定义一个别名,

SELECT * FROM EMP E ,DEPT D WHERE E.DEPTNO = D.DEPTNO ;

范例,

1.要求查出每个雇员的编号,名字,职位,工资,部门,部门名称

  -选择数据表

    emp表,dept表。

  -确定已知的关联条件

    雇员和部门关联  emp.deptno = dept.deptno ;

第一步,查询每个雇员的编号。。。。

SELECT e.empno, e.ename ,e.job ,e.deptno  FROM emp e ;

第二步,加入部门表,要增加消除笛卡尔积的条件:

SELECT e.empno, e.ename ,e.job ,e.deptno  ,d.dname,d.loc FROM emp e ,dept d
WHERE e.deptno = d.deptno;

2.查询每个雇员的编号,姓名,工资,雇佣日期,工资等级

  -两个表

    emp和salgrade

  -关联字段

    emp.sal BETWEEN salgrade.losal AND salgrade.hisal ;

SELECT e.empno,e.ename,e.sal,s.grade FROM emp e, salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal ;

3.查询雇员的编号,姓名,职位,雇佣日期,工资,工资等级,所在部门及位置

  -emp

  -dept

  -salgrade

  关联条件

  emp.sal BETWEEN salgrade.losal AND salgrade.hisal ;

  AND  emp.deptno = dept.deptno ;

说明:1.如果使用NOT IN有了null则表示不为空,有些字段是永恒不能为空的,如果表很庞大,则直接造成死机。

   2.笛卡尔积只是显示消除,但是它还是在的。尽量回避多表查询尤其是数据量大的时候。

连接方式:

内连接:等值连接,在之前的所有查询都是内连接

外链接:左外连接,右外连接,全外连接

在emp表格中增加一个没有部门的数据:

此时新增加的数据部门为空

:观察内连接,等值连接。

时间: 2024-10-13 12:26:10

多表查询(重点)的相关文章

mysql 增删改查,表查询(重点)

十一.数据的增删改: 本节重点: 插入数据 INSERT 更新数据 UPDATE 删除数据 DELETE 再来回顾一下之前我们练过的一些操作,相信大家都对插入数据.更新数据.删除数据有了全面的认识.那么在mysql中其实最重要的不是这三大操作,而是查数据最重要,下节课知晓 一. 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 1.使用INSERT实现数据的插入 2.UPDATE实现数据的更新 3.使用DELETE实现数据的删除 4.使用SELECT查询数据以及.

python3 mysql 多表查询

python3 mysql 多表查询 一.准备表 创建二张表: company.employee company.department #建表 create table department( id int, name varchar(20) ); create table employee( id int primary key auto_increment, name varchar(20), sex enum('male','female') not null default 'male'

#3 SQL多表查询

经验: 1,where 和having的区别? where是用于原始字段的过滤, having主要用于聚合函数的汇总过滤,虽然这个原始字段也是可以用的,但是不推荐,因为效率比where低 所以尽量少用having,能不用尽量不用(where 能实现的having 都能实现,但是效率低 ) 2,count(*)和count(字段名)的差别 第一个会输出全部的行,,而第二个如果遇到为Null的,就不会数出来, 3,还有一个要注意的.如果 我要查询一个   hehe_haha   ,hehe_xixi

mysql数据库从删库到跑路之mysql多表查询

一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 company.employeecompany.department #建表 create table department( id int, name varchar(20) ); create table employee( id int primary key auto_increment, name varchar(20), sex enum('male','female') not null default 'male

SQL总结(二)连表查询

SQL总结(二)连表查询 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要. 只有真正了解它们之间的区别,才能正确使用. 1.Union UNION 操作符用于合并两个或多个 SELECT 语句的结果集. UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. 当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行.两种情况下,派生表的每一行不是来自 TABLE1 就是

SQL联表查询的总结

1.Union UNION 操作符用于合并两个或多个 SELECT 语句的结果集. UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. 当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行.两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2. 注意:使用UNION时,两张表查询的结果有相同数量的列.列类型相似. 学生表信息(Students): ID Name Age City

MySQL数据库之多表查询

一.多表连接查询 #重点:外链接语法 SELECT 字段列表 FROM 表1 INNER|LEFT|RIGHT JOIN 表2 ON 表1.字段 = 表2.字段; 1.交叉连接交叉连接:不适用任何匹配条件.生成笛卡尔积 语法:mysql>select * from table1,table2; 2.内连接:找两张表共有的部分,相当于利用条件从笛卡尔积结果中筛选出了正确的结果 3 .外链接之左连接:优先显示左表全部记录 本质就是:在内连接的基础上增加左边有右边没有的结果 4 .外链接之右连接:优先

MySQL 多表查询(Day43)

阅读目录 一,介绍 二,多表连接查询 三,符合条件链接查询 四,子查询 五,综合练习 ================================================================================================================================== 一,介绍 多表连接查询 复合条件连接查询 子查询 准备表,员工表和部门表 company.employeecompany.department #建表

Oracle多表查询与数据更新

2.1 多表查询 2.1.1 多表查询的基本语法(重点) 多表查询语法如下: SELECT {DISTINCT} *|查询列1 别名1,查询列2 别名2 FROM 表名称1 别名1,表名称2 别名2 {WHERE 条件(s)} {ORDER BY 排序字段 ASC|DESC,排序字段 ASC|DESC} 例:同时查询emp和dept表 SQL> select * from emp,dept; 发现返回了56条数据,emp一个才14条,dept表才4条.56=14*4. 查询emp表的记录数: S