MYSQL学习笔记七(基础查询)

一、MYSQL基础查询

1.1 SELECT 完整语法
select 字段列表 from 数据源;    ##字段列表可以是*。*指显示查询的所有字段
select 去重选项 字段列表 [as 字段别名] from 数据源 [where子句] [group by 子句] [having子句] [order by 子句] [limit子句];

eg:

SELECT * FROM testtablenew

在这里插入图片描述

1.2 去重选项

去重选项是指将查询结果中完全相同的记录进行去重:
all:不去重
distinct:去重
语法结构如下:

select [all|distinct]   字段列表 from 表名;

eg:
在testtablenew表中插入重复的数据(采用笔记六中插入数据的语句)。数据如下:
在这里插入图片描述
使用sql语句查询testtablenew中的数据,查询结果中不能包含重复数据,其查询语句如下:

##写法一:
SELECT DISTINCT * FROM testtablenew
##写法二:
SELECT DISTINCT ID , fullname , age FROM testtablenew

在这里插入图片描述
注意:去重只是针对的是查询出来的记录,而不是存储在表中的记录。如果说仅仅查询的是某些字段,那么去重针对的是这些字段。

1.3 字段别名

字段别名是给查询的字段再定义一个名字(改名字只在查询结果中应用)
字段别名一般都是辅助了解字段意义(比如我们定义的名字是name,我们希望返回给用户的结果显示成姓名)、简写字段名
具体语法如下:

select 字段 as 字段别名 from 表名;
select 字段  字段别名 from 表名;

eg:
查询testtablenew表中的数据,并对字段进行别名设置。使其显示出来的字段为编号、姓名、年龄

SELECT DISTINCT ID  '编号', fullname AS '姓名' , age '年龄' FROM testtablenew

执行结果如下:
在这里插入图片描述

1.4 数据源

数据源可以是单表数据源,多表数据源,其查询语法格式如下:

select 字段列表 from 表名;
select 字段列表 from 表名1,表名2,…; 【多表查询时是将每个表中的x条记录与另一个表y条记录组成结果,组成的结果的记录条数为x*y】【可以称为笛卡尔积】
select 字段列表 fromr (select语句) as 表别名;【这是将一个查询结果作为一个查询的目标二维表,需要将查询结果定义成一个表别名才能作为数据源】
1.5 MYSQL查询的子句
编号子句作用说明
1where子句条件查询按照“条件表达式”指定的条件进行查询。
2group by子句分组按照“属性名”指定的字段进行分组。group by子句通常和count()、sum()等聚合函数一起使用
3having子句筛选有group by才能having子句,只有满足“条件表达式”中指定的条件的才能够输出
4order by子句排序按照“按照“属性名”指定的字段进行排序。排序方式由“asc”和“desc”两个参数指出,默认是按照“asc”来排序,即升序。
5limit限制结果集
1.5.1 where子句

where子句是主要是用来筛选符合条件的结果。
where常见的有种用法:

  • 基于值:

= :
where 字段 =值 ;查找出对应字段等于对应值的记录。(相似的,<是小于对应值,<=是小于等于对应值,>是大于对应值,>=是大于等于对应值,!=是不等于)。

   SELECT * FROM testtablenew  WHERE fullname='001'
   SELECT * FROM testtablenew  WHERE ID>5
   SELECT * FROM testtablenew  WHERE ID!=7

like:
where 字段 like 值 ;功能与 = 相似 ,但可以使用模糊匹配来查找结果。模糊查询的匹配字符常见的有四种:

编号匹配符说明
1%表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示
2_表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。
3[]表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
4[^]表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
SELECT * FROM testtablenew  WHERE fullname LIKE '%7'
SELECT * FROM testtablenew  WHERE fullname LIKE '_01'
SELECT * FROM testtablenew  WHERE fullname REGEXP '00[1-2]'
SELECT * FROM testtablenew  WHERE fullname REGEXP '00[^1-2]'
  • 基于值的范围

in:
where 字段 in 范围;查找出对应字段的值在所指定范围的记录。

   SELECT * FROM testtablenew  WHERE ID IN (1,2,3,4)

not in :
where 字段 not in 范围;查找出对应字段的值不在所指定范围的记录。

SELECT * FROM testtablenew  WHERE ID NOT IN (1,2,3,4)

between x and y :
where 字段 between x and y;查找出对应字段的值在闭区间[x,y]范围的记录。

SELECT * FROM testtablenew  WHERE ID BETWEEN 3 AND 5
  • 条件复合

or
where 条件1 or 条件2… ; 查找出符合条件1或符合条件2的记录。

SELECT * FROM testtablenew  WHERE ID =5 OR fullname='002'

and:
where 条件1 and 条件2… ; 查找出符合条件1并且符合条件2的记录。

SELECT * FROM testtablenew  WHERE ID =5 AND age>16

not :
where not 条件1 ;查找出不符合条件的所有记录。

SELECT * FROM testtablenew  WHERE NOT ID =5 

&&的功能与and相同;||与or功能类似,!与not 功能类似。

1.5.2 group by子句

“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

select类别, sum(数量) as数量之和
from A
groupby类别

注:group by语句中select指定的字段必须是“分组依据字段”,其他字段若想出现在select中则必须包含在聚合函数中。

mysql中五种常用的聚合函数:

编号聚合函数作用
1max(列名)求最大值
2min(列名)求最小值
3sum(列名)求和
4avg(列名)求平均值
5count(列名)统计记录的条数
  • 求最大值
    获取testtablenew 表中的最大ID

    SELECT MAX(ID) FROM testtablenew 
    
  • 求最小值
    获取testtablenew 表中的最小ID

    SELECT MIN(ID) FROM testtablenew 
    
  • 求和
    求testtablenew 表中所有ID之和。

    SELECT SUM(ID) FROM testtablenew 
    
  • 求平均值
    求testtablenew 表中ID的平均值。

    SELECT AVG(ID) FROM testtablenew 
    
  • 统计记录的条数
    求testtablenew 表中有多少条数据。

    SELECT COUNT(ID) FROM testtablenew 
    SELECT COUNT(*) FROM testtablenew 
    

eg:
统计testtablenew 表中的信息,分别计算各个年龄的数据条数。sql语句如下:

SELECT age,COUNT(*) FROM testtablenew
GROUP BY age 

命令结果执行如下:
在这里插入图片描述

1.5.3 having子句

having子句可以让我们筛选成组后的各种数据,where子句在聚合前先筛选记录,也就是说作用在group by和having子句前。而having子句在聚合后对组记录进行筛选。语法格式如下:

select类别, sum(数量) as数量之和from A
group  by类别
having  sum(数量) >18

eg:
在testtablenew表中,查询age条数大于等于4条的age。sql语句如下:

SELECT age,COUNT(*) FROM testtablenew
GROUP BY age 
HAVING COUNT(*)>=4

Having和Where的联合使用,句法结构如下

select类别, SUM(数量)from A
where数量>8
groupby类别
havingSUM(数量) >10

where和having的区别:

  • having 和where 都是用来筛选用的
  • having 是筛选组 而where是筛选记录
  • having一般跟在group by之后,执行记录组选择的一部分来工作的。where则是执行所有数据来工作的。
  • 再者having可以用聚合函数,如having sum(qty)>1000
1.5.4 order by 子句
SELECT * FROM  testtablenew ORDER BY ID   #按照ID进行升序(默认)
SELECT * FROM  testtablenew ORDER BY ID DESC  #按照ID进行降序
SELECT * FROM  testtablenew ORDER BY ID ASC   #按照ID进行升序
SELECT * FROM  testtablenew ORDER BY RAND()    #随机排列,效率不高
1.5.5 limit 子句

语法结构:

limit [offset,] N
offset 偏移量,可选,不写则相当于limit 0,N
N  取出条目

eg:
取ID第1-3的数据
SELECT * FROM testtablenew ORDER BY ID ASC LIMIT 2,3;

1.5.6 总结
编号子句说明是否必须使用
1select要返回的列或表示式
2form从中检索数据的表仅在从表选择数据时使用
3where行级过滤
4group by分组说明仅在按组计算聚集时使用
5having组级过滤
6order by输出排序顺序
7limit要检索的行数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值