【德华说插件二开】之SQL查询语句基础(BOS设计器)原创
金蝶云社区-德华说
德华说
23人赞赏了该文章 2,597次浏览 未经作者许可,禁止转载编辑于2022年05月25日 10:32:35
summary-icon摘要由AI智能服务提供

本文介绍了SQL查询语句的基本知识点,包括单表查询、子查询和联合查询。单表查询包括基本查询、使用TOP和ORDER BY排序。子查询用于多表查询,作为WHERE子句的过滤条件或计算列。联合查询涉及多表的主外键关系,分为内连接、左连接、右连接和全连接,主要区别在于返回不满足连接条件的数据。最后,强调了这些查询的区别和应用场景。

很多金蝶小伙伴在写插件的时候,用的比较频繁的就是sql语句的查询了。


一般我们都使用DBUtils对象去执行sql语句,这个很方便。


但是,sql 的语句怎么写,尤其是最复杂的查询语句了。


今天德华来说一说sql查询语句的一些基本知识点。


1.单表查询

    单表查询是最简单的了,一般就是select * from 后面跟表名。

select * from 表名


    Top关键字

    如果遇到单表数据量过百万的情况下,建议在*前添加top关键字,例如

select top 1000 * from [User]

    上述查询语句表示从User表查询前1000条数据


    order by 关键字

    有了top 关键字还不够,有时候我们要对数据进行排序,否则看起来乱,就需要用到order by ,例如

select top 1000 * from [User] order by name; --name字段排序(顺序)

select top 1000 * from [User] order by name desc; --name字段倒序

select top 1000 * from [User] order by name,age; --先按name字段顺序,如果name相同,按age排序

    

    where关键字

    当然用的最多还是where 和and 关键字了。可以对sql查询的数据进行过滤。例如

select * from [User] where name='张三'

    上述查询语句表示从User表查询字段name为张三的数据。


另外,还有其他关键字group by和having 和聚合函数 sum、avg等等,那些属于比较高级了,后面在聊。


2.子查询

子查询一般用在多表的查询情况下,所谓 SQL 子查询就是嵌套在其他查询中的查询。子查询通常用于 WHERE 子句的 IN 操作符中进行过滤,以及用来填充计算列。

例如:

SELECT
    cust_id 
FROM
    Orders WHERE
    order_num IN ( SELECT order_num FROM OrderItems WHERE prod_id = 'RGAN01' );

或者:

SELECT
    cust_name,
    cust_state,
    ( SELECT COUNT( * ) FROM Orders WHERE Orders.cust_id = Customers.cust_id ) AS orders 
FROM
    Customers ORDER BY
    cust_name;

上述两种方式都用到了子查询,第一种是作为where条件,第二种是作为查询字段。


3.联合查询

联合查询一般是指多个表有主外键关系的情况下使用,一般分为三种:内连接、左连接(或右连接)、外连接(或全连接)。三种查询一般用在不同的场景,主要区别为:查询结果是否返回不满足on后条件的数据。

如果是按关键字来看的话, 有inner join(内连接)、left join(左连接)、right join(右连接)、full join(全连接)四种方式。 
例如我们有两张表: 
这里写图片描述

Orders表通过外键Id_P和Persons表进行关联。



 inner join(内连接)

在两张表进行连接查询时,只保留两张表中完全匹配的结果集。

我们使用inner join对两张表进行连接查询,sql如下:

SELECT p.LastName, p.FirstName, o.OrderNoFROM Persons pINNER JOIN Orders oON p.Id_P=o.Id_P and 1=1  --用and连接多个条件ORDER BY p.LastName

查询结果集: 
这里写图片描述

内连接查询 (select * from a join b on a.id = b.id) 与 关联查询 (select * from a , b where a.id = b.id)的区别

 

left join (左连接)

在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。

我们使用left join对两张表进行连接查询,sql如下:

SELECT p.LastName, p.FirstName, o.OrderNoFROM Persons pLEFT JOIN Orders oON p.Id_P=o.Id_PORDER BY p.LastName

查询结果如下: 
这里写图片描述 
可以看到,左表(Persons表)中LastName为Bush的行的Id_P字段在右表(Orders表)中没有匹配,但查询结果仍然保留该行。


 full join(全连接)

在两张表进行连接查询时,返回左表和右表中所有没有匹配的行。

我们使用full join对两张表进行连接查询,sql如下:

SELECT p.LastName, p.FirstName, o.OrderNoFROM Persons pFULL JOIN Orders oON p.Id_P=o.Id_PORDER BY p.LastName

查询结果如下: 
这里写图片描述 
查询结果是left join和right join的并集。

这些连接查询的区别也仅此而已。


一张图来区分

image.png

 在高中数学上,其实就是交集和并集的关系。很简单。


最后,请小伙伴动动小手关注、点赞、收藏三连!(比心)

图标赞 23
23人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!