联合查询(多表查询)

简介: 联合查询(多表查询)

20231110

数据库

约束

提高数据的正确性,但是减少了效率


1.开发中,两个效率

执行效率


开发效率

通常情况下,我们认为开发效率更重要  

主要就是在软件开发过程中,人力成本远远大于硬件成本


数据库设计

1.实体

2.梳理清楚实体之间的关系

一对一

一对多

多对多

 

新增

(新增和查询操作组合在一起,以查询结果作为插入的值)

insert into表2 select * from  表1

将表2的数据插入到表1  

把查询的临时数据 ---> 永久数据

要求列相互对应  列名不以言也无所谓

将多个sql套娃

varchar(n)中的n不要求一致,只要都是字符串即可



聚合查询

查询带表达式

select name ,chinese+math+english from ......

带着三个列进行运算的


聚合查询就是行和行之间的关系,有一定的限制,不像列和列那么方便

可以理解为库函数


count(expr)  查询到数据的数量

select count(*) from exam;

先执行select * from exam

再算 count(*)

如果查询结果带有空值,空值是没有记录的(使用count(*)的时候,即使都是null的行也是计算在内的)

下面的函数都得结合数据进行运算

sum  

select sum(chinese) from result; 将这一列的值相加,但是null会忽略掉

show warnings

sql很多时候都会尝试将字符串转成数字

avg

max

min


使用聚合函数的时候列和列之间都已经被打散了,如果查询中包含聚合函数和非聚合的列,各自是各自的

有一个情况例外

group by


我们可以用降序排列再limit


我们这个时候可以使用group by


有的时候要按照岗位进行查询或者统计,就可以使用group by

1.查询每个岗位的平均薪资

select role,avg(salary) from emp group by role;

由于是按照role来group by ,所以列名可以写role,不能写 id 和name


分组查询也有条件

1.分组之前的使用where表示(不必分组就能得到)

select role,avg(salary) from emp where name != '张三' group by role;

2.分组之后使用having表示(分组之后才知道)

select role,avg(salary) from emp group by role having avg(salary) < 20000;

分组操作,往往是和聚合操作配合使用的


联合查询(多表查询)


笛卡尔积是两张表运算


student(id ,name,classid)

1 张三  1

2 李四  1

3 王五  2

4 赵六  2


class (classId name)

1      java100

2      java101


拼接

1    张三 1 1 java100

1    张三 1 2 java101


笛卡尔积得到的是一张更大的表

列数是之前的表的列数之和.行数是表的行数之积

实际开发中多表查询一定要慎重使用

使用之前一定要评估好笛卡尔成绩的规模


笛卡尔积有有意义的也有没意义的

也不是随便两个表都能进行笛卡尔乘积,至少有一列是有关联的

根据上述讨论,只要在笛卡尔积过程中,把classid相同这个事件使用where 条件筛选出来


在SQL中进行笛卡尔积非常简单,只用select 即可

select * from student,class;

保证有效(这种条件称之为连接条件)

select * from student,class where student.classId = class.classId;


多表查询步骤:

1.笛卡尔积

2.连接条件

3.根据需求指定其他条件

4.针对列进行精简/聚合查询


相关文章
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库——多表查询(3)-自连接、联合查询、子查询
MySQL数据库——多表查询(3)-自连接、联合查询、子查询
218 1
|
6月前
|
关系型数据库
单表查询、多表查询相关练习
单表查询、多表查询相关练习
51 9
|
SQL 关系型数据库 MySQL
第6章_多表查询
第6章_多表查询
355 0
|
6月前
(头哥)多表查询与子查询
(头哥)多表查询与子查询
121 0
|
6月前
|
SQL
深入了解关联查询和子查询
深入了解关联查询和子查询
66 0
|
SQL Java 关系型数据库
第06章_多表查询(下)
第06章_多表查询(下)
88 0
第06章_多表查询(下)
联合查询和子查询
联合查询和子查询
|
Oracle 关系型数据库 MySQL
第06章_多表查询(上)
第06章_多表查询
115 0
|
关系型数据库 MySQL
MySQL基础-自连接&联合查询
自连接查询,顾名思义,就是自己连接自己,也就是把一张表连接查询多次。我们先来学习一下自连接的查询语法:
304 0
|
关系型数据库 MySQL
MySQL基础-多表查询之内连接
内连接的语法分为两种: 隐式内连接、显式内连接。先来学习一下具体的语法结构。
102 0