DQL数据查询语言--select的巧妙用法

版权声明:本文如果标明博主原创文章,若未经博主允许,则不得转载;若经博主允许,则转载或者引用本文内容请注明来源及原作者。欢迎知识经验进行交流和传播!文章来源: https://blog.csdn.net/Bee_AI/article/details/85835095

DQL数据查询语言–select的巧妙用法

今天是周六,赶着这冬日的太阳,记下生活!记下经验!
巧用SQL的数据查询语句Select可以大大提高查询效率,针对测试开发都非常有用。

1 完整的SELECT查询语句

SELECT 字段名 / * / 表达式 / 函数调用
FROM 表1,表2,…
WHERE 分组前的过滤条件
GROUP BY 分组字段
HAVING 分组后的过滤条件
ORDER BY 字段名  排序规则(ASC / DESC)

下面以药品管理系统(DrugManagementSystem)中的药品信息表(Drug)为例,表明SELECT查询语句实际用法。

2 查询所有数据

查询所有数据,是针对不知道表中字段,也不清楚查看表结构的情况使用的,为避免增加查询过程的不必要的消耗(CPU、内存等),尽量查询所需字段的数据。

--查看Drug表的结构
sp_help Drug

--查询Drug表的所有数据
SELECT * FROM Drug

--查询Drug表中多个字段DrugName, DrugPrice, …的所属列数据
SELECT DrugName, DrugPrice, … FROM Drug

--给字段取别名后(AS可省略),查询Drug表中多个字段DrugName, DrugPrice, …的所属列数据
SELECT DrugName AS 药品名称, DrugPrice 药品价格, … FROM Drug

--查询多张表Drug, Price,…中所有字段
SELECT * FROM Drug, Price,…  

--查看前n行数据
SELECTE TOP n FROM Drug

3 条件查询

条件查询的语法:WHERE 分组前的过滤条件 ;其中分组前的过滤条件可以是如下表达方式:

  • (1)关系运算:>、>= 、< 、<= 、= 、<>
  • (2)确定范围:BETWEEN … AND
  • (3)确定集合:IN(IN中的数值越多,产生的消耗就越大,能用BETWEEN就尽量不用IN)
  • (4)字符匹配:LIKE
  • (5)空值判断:IS NULL、IS NOT NULL(考虑到对NULL的判断会致使引擎放弃使用索引而进行全表查询,尽量避免使用NULL)
  • (6)逻辑操作:NOT、AND、OR(如果限制条件中有字段没有索引,则尽量少用OR,使用UNION或UNION ALL来代替OR)
  • (7)合并查询:UNION、UNION ALL、INTERSECT、MINUS(尽量用UNION ALL来代替UNION,因为UNION需要将结果集合后再进行唯一性过滤,这会增加CUP运算,加大资源的消耗和延迟,但是UNION ALL的使用前提是 2个结果集合没有相重复的数据)
  • (8)注意:条件查询前,先确定WHERE中字段的参数类型,避免和实际传入的参数类型不一致
--单条件查询
SELECT * FROM Drug WHERE DrugName = ‘健胃消食片’

--多条件查询,并关系
SELECT * FROM Drug WHERE DrugName = ‘健胃消食片’ AND DrugPrice = 12

--多条件查询,或关系
SELECT * FROM Drug WHERE DrugName = ‘健胃消食片’ OR DrugPrice = 12

--范围查询
SELECT * FROM Drug WHERE DrugPrice >= 12 AND DrugPrice <= 22

--范围查询
SELECT * FROM Drug WHERE DrugPrice BETWEEN 12 AND 22

4 模糊查询

模糊查询的语法:字段名 like ‘匹配字符串’ ;其中匹配字符串可以是如下表达方式:

  • %:0个或者多个字符(任意个字符)
  • _:任意一个字符
  • [ ]:在范围内的一个字符
  • [^]:不在范围内的一个字符
--查询DrugName以“消食片”结尾的药品
SELECT * FROM Drug WHERE DrugName LIKE ‘%消食片’

--查询DrugName中间含有“消食”的药品
SELECT * FROM Drug WHERE DrugName LIKE ‘%消食%’

--查询DrugName以“消食”开头的药品
SELECT * FROM Drug WHERE DrugName LIKE ‘消食%’

--已知DrugCode是6个字符,查询出DrugCode以‘A0000’开头的药品信息
SELECT * FROM Drug WHERE DrugCode LIKE ‘A0000_’

--只能表示一个字符,表示字符范围以A、B、C结尾前面的任意
SELECT * FROM Drug WHERE DrugCode LIKE ‘%[A-C]’

5 统计查询

统计查询,即用多行函数(组函数、聚集函数)来根据一列或多列对结果进行查询。

  • COUNT( ) 统计记录条数
  • MAX( ) 求最大值
  • MIN( ) 求最小值
  • SUM( ) 求总和
  • AVG( ) 求平均数
--查询Drug表中有多少条数据
SELECT COUNT( DrugPrice ) FROM Drug

--查询Drug表中DrugPrice的最大值
SELECT MAX( DrugPrice ) FROM Drug

--查询Drug表中DrugPrice的最小值
SELECT MIN( DrugPrice ) FROM Drug

--查询Drug表中所有药品DrugPrice的总和
SELECT SUM( DrugPrice ) FROM Drug

--查询Drug表中所有药品DrugPrice的平均值
SELECT AVG( DrugPrice ) FROM Drug

6 分组查询

分组查询的语法:GROUP BY语句 HAVING 分组后的过滤条件;其中GROUP BY子句用于结合组函数,根据一个或多个列对结果集进行分组

--不含分组后的过滤条件
SELECT DrugName, SUM( DrugPrice ) FROM Drug WHERE DrugTime = ‘2019/1’ GROUP BY DrugName

--含分组后的过滤条件
DrugName, SUM( DrugPrice ) FROM Drug WHERE DrugTime = ‘2019/1’ GROUP BY DrugName HAVING SUM( DrugPrice ) > 600

7 排序查询

排序查询的语法:ORDER BY 字段名 排序规则(ASC:升序,从小到大 / DESC:降序,从大到小);ORDER BY子句一定在SELECT语句的末尾,本质就是在查询会结果后改变输出顺序

--按照药品价格DrugPrice升序排列
SELECT * FROM Drug ORDER BY DrugPrice ASC

--按照药品价格DrugPrice降序排列
SELECT * FROM Drug ORDER BY DrugPrice DESC

--按照药品Drug多个字段依次排序,默认为升序排序
SELECT * FROM Drug ORDER BY DrugPrice, DrugName

8 分页查询

分页查询的语法:LIMIT 范围;合理的使用分页方式可以提高分页效率

--只需要1条数据时,可使用LIMIT 1
SELECT * FROM Drug LIMIT 1

--跳转到第n条数据查询第n条数据后的m条数据(数据范围为n+1至n+m)
SELECT * FROM Drug LIMIT n,m

--跳转到第n条数据查询第n条数据后的m条数据(这种比上一种语法更优)
SELECT * FROM Drug WHERE DrugId > n-1 LIMIT m

9 去重查询

--去重查询,查询其除了药品信息表Drug中药品名称DrugName重复的数据
SELECT DISTINCT DrugName FROM Drug

10 连接查询

--左外连接(left jion):左表(table_name1) / 右表(table_name2)
SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name

--右外连接(right jion):左表(table_name1) / 右表(table_name2)
SELECT column_name(s) FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name

  • 致谢
    若对大家有用,感谢点赞或评论;若有不足或补充之处,也感谢大家评论进行指正,后期我将对本文进行补充完善。相信这是互相进步的开始

猜你喜欢

转载自blog.csdn.net/Bee_AI/article/details/85835095