当前位置:首页 » 编程语言 » sql多表多条件查找
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql多表多条件查找

发布时间: 2023-08-16 00:19:40

‘壹’ 多表关联查询的sql执行原理

平时大多是执行单表查询,通常你把索引建好,让他尽可能走索引,性能都没问题。但其实也有不少的多表关联语句,因为有时查找目标数据,不得不借助多表关联的语法,才能实现你想要但使用多表关联的时候,你的SQL性能就可能会遇到一些问题。

若在FROM字句后直接来两个表名,就是要针对两个表进行查询,而且会把两个表的数据给关联,假设你未限定多表连接条件,可能会搞出一个笛卡尔积。所以通常都会在多表关联语句中的WHERE子句里引入一些关联条件:where t1.x1=xxx and t1.x2=t2.x2 and t2.x3=xxx

假设:

所以该SQL执行过程可能是:

他可能是先从一个表里查一波数据:驱动表

再根据这波数据去另外一个表里查一波数据进行关联,另外一个表叫:被驱动表

员工表包含id(主键)、name(姓名)、department(部门)

产品销售业绩表里包含id(主键)、employee_id(员工id)、产品名称(proct_name)、销售业绩(saled_amount)。

现在要看每个员工对每个产品的销售业绩:

此时看到的数据:

全表扫描员工表,找出每个员工,然后针对每个员工的id去业绩表找 employee_id 跟员工id相等的数据,可能每个员工的id在业绩表里都会找到多条数据,因为他可能有多个产品的销售业绩。

然后把每个员工数据跟他在业绩表里找到的所有业绩数据都关联,比如:

内连接,inner join,要求两个表里的数据必须完全能关联上,才能返回。

假设员工表里有个人是新员工,入职到现在无销售业绩,此时还是希望能够查出来该员工的数据,只不过他的销售业绩那块可以给个NULL,表示无业绩。但若仅使用上述SQL语法,似乎搞不定,因为必须要两个表能关联上的数据才查得出来。

此时就需要

outer join,分为:

还有个语法限制,如果你是内连接,那连接条件可以放在where语句,但外连接一般是把连接条件放在ON语句:

一般写多表关联,主要就是内连接和外连接。

‘贰’ SQL中多条件同时查询语句怎么写

1、首先我们打开电脑里前码的SQL打开一个数据库

‘叁’ SQL语句联表查询

SELECTitem,sum(a.need_pay) '需要支付金额',sum(b.paymoney) '已付金额'

FROM A,(SELECT b.A_id,sum(B.money) 'paymoney' FROM B group by B.A_id) b

where A.A_id = b.A_id

GROUP BY A.item

HAVINGsum(a.need_pay)<> sum(b.paymoney)

(3)sql多表多条件查找扩展阅读:

关于sql语句连表查询

语法

SELECT fields

FROM table1 INNER JOIN table2

ON table1.field1 compopr table2.field1 AND

ON table1.field2 compopr table2.field2 OR

ON table1.field3 compopr table2.field3;

也可以通过如下语法嵌套 JOIN 语句:

SELECT fields

FROM table1 INNER JOIN

(table2 INNER JOIN [( ]table3

[INNER JOIN [( ]tablex [INNER JOIN ...)]

ON table3.field3 compopr tablex.fieldx)]

ON table2.field2 compopr table3.field3)

ON table1.field1 compopr table2.field2;

LEFT JOIN 或 RIGHT JOIN 可以嵌套在 INNER JOIN 之中,但是 INNER JOIN 不能嵌套于 LEFT JOIN 或 RIGHT JOIN 之中。

‘肆’ SQL多表查询多个字段

SQL语句格式:

select 字段镇袜猜1,字段2,字段3

from 表1,表2,表3

where 条件

例子:查询s表中的sno字段,好带 c表中的cno字段,j表中的jno字段

select sno,pno,jno

from s,p,j

(4)sql多表多条件查找扩展阅读:

删除语句御型:DELETE * FROM table_name

查询语句:SELECT * FROM Persons WHERE ROWNUM <= 5

建立视图:CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition