暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库操作命令(三)

机械转行软件测试随笔记录 2021-11-26
391

一、数据表的排序、聚合命令、分组

 

1. 排序(order by):

★、使用order by子句,对查询结果进行排序。

★、order by 指定排序的列 asc(升序)/desc(降序)。

★、order by 子句一般位于select语句的结尾。

SELECT product_name,weight FROM products_info ORDER BY weight DESC;


2. 聚合命令  :

.distinc:对某一列数据去重

语句:select distinct 列名 from 表名; -- 显示此列不重复的数据                         

. count :统计总行数

count(*):包括所有列,返回表中的总行数,在统计结果的时候,不会忽略值为Null的 行数。

count(1):包括所有列,1表示一个固定值,没有实际含义,在统计结果的时候,不会 忽略列值为Null的行数,和count(*)的区别是执行效率不同。

count(列名):只包括列名指定列,返回指定列的行数,在统计结果的时候,不统计列值 为Null,即列值为Null的行数不统计在内。

count(distinct 列名):返回指定列的不重复的行数,在统计结果的时候,会忽略列值为 NULL的行数(不包括空字符和0),即列值为NULL的行数不统计在内。

count(*)、count(1)、count(列名)执行效率比较:

★. 如果列为主键,count(列名)优于count(1)

★. 如果列不为主键,count(1)优于count(列名)

★. 如果表中存在主键,count(主键列名)效率最优

★. 如果表中只有一列,则count(*)效率最优

★. 如果表中有多列,且不存在主键,则count(1)效率优于count(*)

 MAX :最大值

④ MIN :最小值

 AVG :平均值

SUM :

select max(列名) from 表名;

select min(列名) from 表名;

select avg(列名) from 表名;

select sum(列名) from 表名;

- 也可以跟where子句

 limit :

语法:select * from 表名 limit m,n;

★、其中m是指从哪行开始,m从0取值,0表示第一行。

★、n是指从第m+1条开始,取n条。

★、select * from 表名 limit 0,2(从第一行开始,显示两行结果)

★、如果只给定一个参数,它表示返回最大的行数目:select * from table limit 5;查询前5行

★、limit n 等价于 limit 0,n

 

3. 分组 GROUP BY:

★、使用group by子句对列进行分组。

★、然后还可以使用having子句过滤,having通常跟在group by后,它作用于组。不★、加having过滤:

select 列名,聚合函数 from 表名 where 子句 group by 列名;

★、加上having过滤:

select 列名,聚合函数 from 表名 where 子句 group by 列名 having 聚合函数 过滤条件;

★、注意:

使用group by后只能展示分组的列名+聚合函数结果,因为其余列已经基于分组这一 列合并。

select sum(price), count(user_id), product_id from order_info_table group by product_id having count(user_id) > 2;

 

二、数据表的连接查询、子查询


1. 两张表连接查询:

 ①、INNER JOIN(内连接) :获取两个表中字段匹配关系的行的所有信息。

语法:SELECT * FROM [表名] a INNER JOIN [表名] b ON a.[列名] = b.[列名];

例如:

SELECT * FROM user_info_table a INNER JOIN order_info_table b ON a.user_id =

b.user_id;

SELECT * FROM user_info_table a INNER JOIN order_info_table b ON a.user_id =

b.user_id WHERE b.user_id IS NULL;

 ②、LEFT JOIN(左连接) :获取左表所有行的信息,即使右表没有对应匹配的行的信息。右表没有匹 配的部分用NULL代替。

语法:SELECT * FROM [表名] a LEFT JOIN [表名] b ON a.[列名] = b.[列名];

SELECT * FROM products_info a LEFT JOIN suppliers_info b ON a.supplier_id =

b.supplier_id;

 ③、RIGHT JOIN(右连接) :与左连接相反,用于获取右表所有记录,及时左表没有对应匹配的行的 所有信息,左表没有匹配的部分用NULL代替。

语法:SELECT * FROM [表名] a RIGHT JOIN [表名] b ON a.[列名] = b.[列名];

SELECT * FROM products_info a RIGHT JOIN suppliers_info b ON a.supplier_id =

b.supplier_id; 

 

2、子查询(嵌套查询):

嵌套在其他查询中的查询。

语句:select 列名1 from 表1 where 列名2 in (select 列名2 from 表2 where 列名3 = 某某 某);

注意:一般在子查询中,程序先运行嵌套在最内层的语句,再运行外层。因此在写子查询语 句时,可以先测试一下内层的子查询语句是否输出了想要的内容,再一层一层往外测试,增 加子查询的正确率。


补充: 数据库名和表名在windows中是大小写不敏感的,而在大多数类型的UNIX系统中大小写是敏感 的。



如果您觉得文章还不错,请 点赞分享在看收藏 一下,因为这将是我持续输出更多优质文章的最强动力!


没有关注的小伙伴,扫描下方二维码 或 点击公众号名片获取更多精彩!如有任何问题或想技术探讨等,请扫描作者微信交流!



文章转载自机械转行软件测试随笔记录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论