软件测试之学习mysql的查询功能select及高级查询(重中之重)

(adsbygoogle = window.adsbygoogle || []).push({ google_ad_client: "ca-pub-6940460185323525", enable_page_level_ads: true });

单表查询(select):

  • 单表全部字段查询:select * from 表名 ;
  • 单表部分字段查询:select 字段1,字段2,字段3,…from 表名;
  • 单表查询条件查询:select 字段1,字段2,… from 表名 where 查询条件;

常见的查询条件查询表达式:

  • and:(多个表达式同时满足)   select * from 表名 where 表达式1 and 表达式2 and 表达式3;
  •  or:(多个表达式只需满足其中一个)select * from 表名 where 表达式1 or 表达式2 or 表达式3;
  • >:(满足字段大于该值的所有条件)select * from 表名 where 字段1>数值1;
  • <:(满足字段小于该值的所有条件)select * from 表名 where 字段1<数值1;
  • >=:(满足字段大于等于该值的所有条件)select * from 表名 where 字段1>=数值1;
  • <=:(满足字段小于等于该值的所有条件)select * from 表名 where 字段1<=数值1;
  • !=或者<>:都表示不等于,select * from 表名 where 字段1!=数值1;

多表查询:

  • 笛卡尔积:select * from 表名1,表名2 ;
  • 多表查询全部字段:select * from member,invest where member.id = invest.memberid;
  • 多表查询部分字段:select member.RegName,member.LeaveAmount,invest.Amount from member,invest where member.id =invest.memberid;

由于很多时候表名比较长而且难记,所以就用表名的别名来代替表名:select m.regname,m.leaveamount,i.amount from member as m, invest as i where m.id=i.memberid;(as 可以去掉,多表查询字段可能会重复,字段名前面加上表名.字段名)

排序(默认是升序):

  • 升序 asc:select * from 表名 where order by 需要排序的字段名1,需要排序的字段名2 asc;
  • 降序 desc:select * from 表名 where order by 需要排序的字段名1,需要排序的字段名2 desc;

高级查询:

  • 数据集in/not in :in存在于某个数据集里面,not in不存在于某个数据集里面  。
  • 模糊查询like:用%匹配, %关键字、关键字%、%关键字%,分别匹配关键字前面、后面、中间的值
  • 常见的聚合函数:count()统计函数、max()最大值、min()最小值、sum()求和、avg()平均值。 select 字段名,聚合函数 from 表名 group by 字段名(一般为主键);
  • 分组group by:分组查询
  • 去重distinct:去除重复
  • 两者之间 between:在两者之间
  • 分页limit:(limit m,n) m为偏移量=要显示的第一位数-1 ,n=要显示的数据个数
数据集in/not in :

用法:select * from 表名 where 字段名1 in(数据1,数据2);

用法等同于select * from 表名 where 表达式1 or 表达式2;

数据集:可以是具体的某几个值:值a,值b,…..值n,也可以是通过一个子查询得到的数据集

比如: select * from test where id in (1,2,3);

模糊查询like:

select * from 表名 where 字段名 like %关键字/关键字%/%关键字%/占位符_;

  • 以关键字结尾匹配:比如:select * from test where regname like ‘%k’;
  • 以关键字开头匹配:比如:select * from test where regname like ‘j%’;
  • 关键字在中间匹配:select * from test where regname like ‘%a%’;
  • 占位符匹配 ”_“:比如手机号码固定中间4位是8888,select * from test where regname like ‘___8888____’;
分组group by:一般按照主键id分组

用法:select 字段名,聚合函数 from 表名 where group by 分组字段名;

  • 聚合函数:对一组值执行计算并返回单一的值的函数,聚合函数经常与select 语句的group by 一同使用,常见的聚合函数有:sum()、count()、avg()、min()、max()
  • having:分组后,想在分组结果的基础上继续过滤的话,就必须把过滤条件写在having后面

多字段进行分组:select t1.id ,t1.regname ,sum(amount) from member t1,invest t2 where t1.id=t2.memberid group by t1.id ,t1.regname ;

注意:多表查询一定要先写关联条件在分组

比如:

1、统计每个标的投资总额、投标人数、总投资金额、最大与最小投资金额

select LoanId,count(id),sum(amount),min(amount),max(amount) from invest group by loanid;

2、从loan表分组查询,按照memberid进行分组,计算用户个数,且投资金额大于100000

select *,count(*) from loan group by membered having amount>100000;

3、统计每个用户的投资额

select t1.id ,sum(amount) from member t1,invest t2 where t1.id=t2.memberid group by t1.id ;

4、去重distinct:

去除查询结果中的重复数据

用法:select distinct 字段名 from 表名;

比如:查询所有投资的用户id (重复的memberid就去除了)

Select distinct memberid from invest;

5、两者之间 between:

使用场景:条件字段的取值处于两个数据范围内的情况

用法:select 字段名 from 表名 where 字段名 between … and …..;

比如:找出用户表可用余额在100000到400000的用户信息(包含边界值)

select  *  from member where leaveamount between 100000 and 400000;

或select *  from member where leaveamount>=100000 and leaveamount<=400000;

分页limit:

使用场景:去查询结果的前n条

用法:select 字段名 from  表名 limit m,n;(m为偏移量=要显示的第一位数-1 ,n=要显示的数据个数)

比如:

1、选取member表的前10条记录

select * from member limit 0,10;

2、选取member表的后十条记录

select * from member order by id desc limit 0,10;

3、选取member表第21-30条记录

select * from member limit 20,10;

4、查询id 20-30的记录

select * from member limit 19,11;

top语法

select *from member where leaveamount>30000 limit 5;

偏移量 offset

select * from member limit 11 offset 19;

=select * from member limit 19,11;

常用函数:

  • 数值相关函数

1、求字段A的最小值min(字段A)

eg: select min(leaveamount) from member;

2、求字段A的最大值max(字段A)

eg: select max(leaveamount) from member;

3、求字段A的平均值

eg: select avg(leaveamount) from member;

  • 日期函数

1、获取系统当前时间syndate();。select syndate() ;

2、获取系统当前日期curdate()。select curdate();

3、获取系统当前时间curtime()。select curtime();

4、获取给定日期的年份:year(date)。select year(2016);

5、获取给定日期的月份:month(date)。select month(2016);

6、为指定日期增加一个时间间隔的函数:DATE_ADD(date,interval,expr unit)

select DATE_ADD(sysdate(),interval 7 day);

  • 字符串函数

1、字符串拼接函数:concat(字段A,字段B)

eg:select concat(regname,’-‘,mobilephone) from member;

2、字符串截取函数substr(字段A,截取最开始的位置position,截取字符个数)

eg:select substr(mobilephone,1,3) from member;

3、获取字符串长度函数:length(字段A)

select length(regname) from member ;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java成神之路

Oracle学习笔记_02_基本SQL

        SQL 语言大小写不敏感。         SQL 可以写在一行或者多行 关键字不能被缩写也不能分行         各子句一般要分行写。 ...

912
来自专栏linjinhe的专栏

MySQL数据类型

2264
来自专栏数据和云

深入剖析:认识Oracle 中的 NULL 值

杨廷琨,网名 yangtingkun 云和恩墨技术总监,Oracle ACE Director,ACOUG 核心专家 经常看到很多人提出和NULL有关的问题。N...

3075
来自专栏菜鸟致敬

MySQL 数据类型

MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 ---- 数值类...

3187
来自专栏技术博文

MySQL 数据类型

数值类型 MySQL支持所有标准SQL数值数据类型。 这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似...

2864
来自专栏LanceToBigData

MySQL(四)之MySQL数据类型

一、数据类型概述  MySQL的数据类型有大概可以分为5种,分别是 整数类型、浮点数类型和定点数类型、日期和时间类型、字符串类型、二进制类型。现在可以来看看你对...

24010
来自专栏大大的微笑

设计模式之单例模式深究

为什么使用单例模式?         我认为是由于某些对象的创建比较耗时,对内存的消耗又比较大回收成本过高,这时候如果允许 不断的创建对象代价势必太高,如果...

2276
来自专栏栗霖积跬步之旅

第十章:创建计算字段

创建在数据库表中的数据一般不是应用程序所需要的格式。  我们需要从数据库中检索出转换、计算或格式化过的数据。  计算字段并不实际存在于数据库表中,计算字段是运行...

1735
来自专栏峰会SaaS大佬云集

Oracle 数据库入门之----------------------单行函数

SQL> select lower('Hello World') 转小写,upper('Hello World') 转大写,initcap('hello wor...

780
来自专栏阿杜的世界

MySQL文档阅读(一)-数字类型

MySQL支持很多系列的SQL数据类型:数字类型(numeric types)、日期和时间类型(date and time types)、字符串类型(字符和字节...

511

扫码关注云+社区

领取腾讯云代金券