目录

【任务4.1】查询时选择列

1.基本查询语句

2、检索所有列

【4.2】查询时选择行

1、查询指定记录

2、带in关键字的查询

3、带between and的范围查询

4、带like的字符匹配查询

5、查询空值

6、带and的多条件查询

7、带or的多条件查询

8、去重查询

9、限制数量查询

【任务4.3】查询结果排序

【任务4.4】查询分组与汇总

1、聚集函数

2、分组查询

【4.5】创建多表连接查询

1、交叉连接查询

2、内连接查询

3、外连接查询

four、Compound conditional join query

5、为表取别名

End


数据库管理系统的一个最重要的功能就是数据查询,数据查询不仅是简单查询数据库中存储的数据,还更要对数据进行筛选,以及确定数据以怎样的格式显示。MySQL提供了功能强大、灵活的语句来实现这些操作,本节将介绍如何使用select语句查询数据表中的一列或多列数据、连接查询、子查询,以及使用Navicat生成查询等。

【任务4.1】查询时选择列

1.基本查询语句

MySQL从数据表中查询数据的基本语句为select语句。select语句的使用方法如下:

select{*|<字段列表>}[from<表1>,<表2>...[where<表达式>][group by<group by definition>][having<expression>[{<operator><expression>}...]][order by<order by definition>][limit[<offset>,]<row count>]]select[字段1,字段2...,字段n]from[表或视图]where[查询条件];

其中,各条字句的含义如下:

1、{*|<字段列表>}:包含星号通配符选择字段列表,表示查询的字段,其中字段列至少包含一个字段名称,如果要查询多个字段,多个字段之间用逗号分隔。

2、from<表1>,<表2>...:表1和表2查询数据的来源,可以是单个或多个。

3、where<表达式>:可选输入项,如果输入该项,将给查询结果限定条件。

4、[group by<字段>]:该子句作用为将查询结果按指定字段分组。

5、[order by<字段>]:该子句作用为将查询结果按指定方式排序。

6、[limit[<offset>,]<row count>]:该子句作用为将查询结果限制指定条数。

2、检索所有列

(1)在select语句中使用符号“*”通配符查询所有字段数据。语法格式为:

select * from (object table) ;

(2) 在select语句中按指定字段查询所有字段数据。语法格式为:

select 字段1,字段2,...,字段n from 目标表名 ;

注:MySQL中的SQL语句不区分大小写,输入目标信息时区分大小写。

【4.2】查询时选择行

1、查询指定记录

数据库中包含大量的数据,根据用户需求,指定条件查询库中的数据,即对数据的筛选。在select语句中使用where子句给定条件查询数据,语法格式为:

select 字段名1,字段名2,...,字符名n from 目标表名 where 指定条件 ;

where子句中的条件判断符,如下图所示:

操作符 说明
= 等于
!= 不等
< 小于
<= 小于等于
> 大于
>= 大于等于
between 在指定的两个值之间

2、带in关键字的查询

in操作符用来指定查询条件的范围,可以匹配指定范围中的每一个合法值。语法格式为:

select 字段名1,字段名2,...,字段名n from 目标表名 where 字段名 in (值1,值2,...);

3、带between and的范围查询

between用来查询某个范围内的值,语法格式为:

select 字段名1,字段名2,...,字段名n from 目标表名 where 字段名 between 值1 and 值2 ;

4、带like的字符匹配查询

like用来对模糊数据的匹配查询,与通配符“_”,“%”搭配使用,”_“查询精度比”%“更高,“_"表示在查询关键数据前后存在一个任意值,”%“表示在查询关键数据前后存在任意个任意值。语法格式为:

select 字段名1,字段名2...,字段名n from 表名 where 目标字段名 like _(%)data key%(_)

5、查询空值

is null可以查询表格中的空值(null),空值一般表示未知数据或者数据不合法。语法格式为:

select 字段名1,字段名2,...字段名n from 目标表名 where 目标字段名 is null;

6、带and的多条件查询

and操作限定符具有逻辑判断作用,只有被连接的条件都满足的数据才能被输出。and用于连接两个甚至多个查询条件,多个表达式之间用and分开。语法格式为:

select 字段名1,字段名2,...字段名n from 目标表名  where 条件1 and 条件2...;

7、带or的多条件查询

or 与and一样同样具有逻辑判断作用,or只要满足被连接条件中的任意一条的数据就可以被输出。

or用法与and一样。语法格式为:

select 字段名1,字段名2,...字段名n from 目标表名  where 条件1 or 条件2...;

8、去重查询

distinct关键字可以去掉查询结果中的重复值。语法格式为:

select distinct 字段名1,字段名2,...字段名n from 目标表名;

9、限制数量查询

limit关键字可以限制查询返回值的条数。语法格式为:

select 字段名1,字段名2,...字段名n from 目标表名 limit(位置偏移)行数;

tip:默认第被检索的行是从0开始。

【任务4.3】查询结果排序

查询出来的数据是按系统默认方式排序的,我们可以使用order by语句来对查询结果重新排序。asc表示升序为系统默认,desc为降序,需要在order by后输入一个字段名其字段数据作为排序依据。语法格式为:

select 字段名1,字段名2,...字段名n from 目标表名 order by 目标字段名 asc(desc);

【任务4.4】查询分组与汇总

1、聚集函数

(1)avg()函数,通过计算返回的行数和每一行数据的和,求得指定列数据得平均值。

可以返回所有列的平均值,也可以返回特定列或行的平均值。

tip:avg()函数忽略值为null的行,因此不是所有情况都适用。

(2)count()函数,统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数。

tip:指定列查询时会忽略为空值的行。

(3)max()函数,返回指定列中的最大值。

tip:除了数值值和日期值以外,还可以返回字符值。对字符值的返回通过字符的ASC||码值进行比较,如果为多个字符时,先比较第一个字符如果相等,则依次往下比较出大小值。

(4)min()函数,返回指定列中的最小值,min()与max()函数类似,既可以查找数值类型,也能应用与字符类型。

(5)sum()函数,用于求指定列的数据和。

tip:计算时忽略值为null的行。

2、分组查询

分组查询是对数据按照某个或多个字段进行分组,在MySQL中使用group by关键字对数据进行分组。语法格式为:

group by 目标字段名 having <条件表达式>;

其中,“字段名”为进行分组时所依据的列名称;“having<条件表达式>“指定满足表达式限定条件的结果将被显示。

(1)创建分组。分组是使用select语句的group by子句建立的。group by关键字通常和集聚函数一起使用,如max()、min()、count()、sum()、avg().例如要返回员工表中每个部门的员工人数,这时就要在分组过程中用到count()函数,把数据分为多个逻辑组,并对每个组进行集合计算。

在使用group by字句时,需要知道以下重要的规定。

①group by子句可以包含任意数目的列,因而可以对分组进行嵌套,更细致地进行数据分组

②如果在group by子句中嵌套了分组,数据将在最后指定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(但不能从个别的列取回数据)。

③group by子句中列出的每一列都必须是检索列或有效的表达式(不能是聚集函数)。如果在select中使用表达式,就必须在group by字句中指定相同的表达式,(不能使用别名)。

④大多数SQL实现不允许group by列带有长度可变的数据类型(如文本或备注型字段)。

⑤除聚集函数外,select语句中的每一列都必须在group by子句中给出。

⑦group by子句必须出现在where子句之后,order by子句之前。

(2)过滤分组。group by可以和having一起限定显示记录所需满足的条件,只有满足条件的分组才会被显示。

having关键字与where关键字都是用来过滤数据的,having支持所有where操作符。两者的区别在于,having在数据分组之后进行过滤来选择分组,而where在分组之前选择记录。另外,where排除的记录不包括在分组中。

(3)分组中使用with rollup。使用witn rollup关键字之后,在所有查询出的分组记录后增加一条记录,该记录计算查询出的所有记录的总和,即统计记录数量。

(4)多字段分组。使用group by可以对多个字段进行分组,group by关键字后面跟需要分组的字段,MySQL根据多字段的值来进行层次分组,分组层次从左到右,即先按第1个字段分组,然后在第1个字段值相同的记录中,在根据第2个字段的值进行分组,依次类推。

(5)group by和order by一起使用。某些情况下需要对分组进行排序,在前面的介绍中,order by用来对查询的记录进行排序,如果和group by一起使用就可以完成对分组的排序。

tips:当使用rollup时,不能同时使用order by子句进行结果排序,即rollup和order by是互相排斥的。

【4.5】创建多表连接查询

1、交叉连接查询

交叉连接查询返回的结果是被连接的两个表中所有数据行的笛卡尔积,也就是返回第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例如,员工表中有13个员工,销售表中有11条销售记录,那么交叉连接的结果就有13x11=143条数据。其语法格式为:

select * from 目标表名1 cross join 目标表名2;

2、内连接查询

内连接(inner join)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新纪录。也就是说,在内连接查询中,只有满足条件的记录才能出现在结果关系中。其语法格式为:

select 查询字段 from 目标表名1 (表别名1) inner join 目标表名2 (表别名2) on 表名1(表别名1).关系字段=表名2(表别名2).关系字段;

tips:inner可以省略。

用户也可以使用where子句来实现多表连接查询,其语法格式为:

select 查询字段 from 目标表名1(表别名1),目标表名2(表别名2),... where 表名1(表别名1).关系字段=表名2(表别名2).关系字段 (and 连接条件...);

tips:使用where子句定义连接条件比较简单明了 ,而inner join语法是ANSISQL的标准规范,使用inner join连接语法能够确保不会忘记连接条件,而且,where子句在某些时候会影响查询的性能。

3、外连接查询

left join(左连接)。left join返回包括left table中的所有记录和right table中连接字段相等的记录。left join的结果包括left outer子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。if left table的某行在右表中没有匹配行,那么在相关联的结果行中,right table的所有选择列表列均为空值。语法格式为:

select 查询字段 from 目标表名1 left join 目标表名2 on 表名1.关系字段=表名2.关系字段;

right join(右连接)。right join返回包括right join中的所有记录and left join link fields equivalence的记录。A right join is the reverse of a left join,all rows of the right table are returned.If a row in the right table has no matching row in the left table,The left table returns a null value.Syntax format:

select 查询字段 from 目标表名1 right join 目标表名2 on 表名1.关系字段=表名2.关系字段;

tips:An outer join query queries related rows in multiple table,In the connection,Only rows that meet the query criteria and join criteria are returned in the query result set.but sometime need 包含没有关联的行中数据,即返回查询结果集合中的不仅包含符合连接条件的行,而且 include left table、right table or two join tables中的所有数据行。The outer connection is divided into two kinds:left outer connection and right outer connection.

four、Compound conditional join query

复合条件连接查询是在连接查询的过程中,通过添加过滤条件来限制查询的结果,Mark the query result more accurate.

5、为表取别名

在查询操作时,如果表名很长使用起来就不太方便,这时可以为表取一个别名,用别名来代替表的名称。在MySQL中为表取别名的格式为:

select * from 目标表名 (as) 别名;

tips:as关键字用于指定表名的别名,它可以省略不写。

End 

数据库总结(四):MySQL数据表的检索相关推荐

  1. 项目四总结:MySQL数据表的检索

    数据库管理系统的一个最重要的功能就是数据查询,数据查询不仅是简单查询数据库中存储的数据,还更要对数据进行筛选,以及确定数据以怎样的格式显示.MySQL提供了功能强大.灵活的语句来实现这样操作,本项目将 ...

  2. 如何把纯真ip数据库导入到MySQL数据表中

    一.下载最新版的QQWry.Dat 二.下载IPLook     使用IPLook把QQWry.Dat文件解压到IPData.txt文件     打开IPData.txt文件格式是这样的     0. ...

  3. 纯真ip数据库 转mysql_如何把纯真ip数据库导入到MySQL数据表中

    一.下载最新版的QQWry.Dat 二.下载IPLook 使用IPLook把QQWry.Dat文件解压到IPData.txt文件 打开IPData.txt文件格式是这样的 0.0.0.0    0.2 ...

  4. mysql 异常关机后 无法查数据_MySQL数据库非法关机造成数据表损坏怎么排查 | 学步园...

    该篇文章我们介绍由于非法硬件关机,造成了MySQL数据库的数据表损坏,数据库不能正常运行的一个实例.下面学步园小编来讲解下MySQL数据库非法关机造成数据表损坏怎么排查? MySQL数据库非法关机造成 ...

  5. django存入mysql数据库_django如何存数据到一个mysql数据表里面

    让我们聊聊这个话题, django如何存数据至mysql数据表里面,你会用什么方法?正常情况下,我们form逻辑处理后,直接form.save(),是,这个方法没毛病:但有没有其他的方法呢?假如我们有 ...

  6. linux下查看mysql数据库的字段类型_系统运维|[小白技巧]如何在Linux上检查MySQL数据表的存储引擎类型...

    提问: 我想要知道我的MySQL数据库是MyISAM还是Innodb类型.我该如何检查MySQL数据库表的类型? MySQl主要使用两种存储引擎:MyISAM 和 Innodb.MyISAM是非事务的 ...

  7. MySQL数据库——MySQL数据表添加字段(三种方式)

    MySQL 数据表是由行和列构成的,通常把表的"列"称为字段(Field),把表的"行"称为记录(Record).随着业务的变化,可能需要在已有的表中添加新的字 ...

  8. python数据库建表_Python3创建mysql数据表结构和插入数据

    上一篇文章,我们已经成功通过 python3 连接到了数据库并新建了 spiders 数据库,今天我们就继续来学习 python3 如何创建 mysql 数据表及插入数据. import pymysq ...

  9. mysql user表添加记录_《MySQL数据操作与查询》- 返校复习课练习题,创建数据库user_system,创建数据表user及user_ext...

    一.其它(共18题,100分) 1.创建数据库user_system CREATE DATABASE user_system 2.在数据库user_system中创建数据表user及user_ext, ...

最新文章

  1. 后端技术:Nginx 应用场景详解
  2. C++ 对象关系映射(ORM)介绍
  3. jpa 公共字段顺序_临沂沂水景观花箱销售公司公共使用
  4. python中日志logging模块和异常捕获traceback模块的使用
  5. Java之 final关键字
  6. 阵处理与波束形成学习心得(二)
  7. 【贪玩巴斯】数字图像处理基础课堂笔记(六)——「一维、二维离散傅里叶变化及其方变换,卷积定理,频域滤波的步骤」 2021-11-08
  8. 职高计算机专业毕业200字自我鉴定,职高计算机专业的自我鉴定
  9. 信安小组 第三周 总结
  10. 黑喵桌面音乐播放器汉化版
  11. 程序员工具大全【持续更新】
  12. DPU — 完全可编程网络
  13. Pycharm | cv2爆红 | opencv-python安装 | Requirement already satisfied: opencv-python 有效解决方法
  14. 多线程抽取数据库数据,数据迁移
  15. Signalr 跨域即时聊天
  16. 20170916导出fuck 7654导航
  17. 考虑风光火储的微电网优化调度 介绍:考虑风电、光伏、热电机组和储能优化调度,其中负荷考虑冬季或夏季两种场景
  18. matlab中 randperm()的用法
  19. 设计模式之简单工厂、工厂、抽象工厂
  20. oracle合同专员待遇,人事专员 【6个月合同】HR 助理- 外企 新金桥路 薪资 8-10K

热门文章

  1. Python常见库matplotlib之画图文字的中文显示
  2. 纯html页面怎么配置iis,iis配置html网站
  3. 《MATLAB神经网络案例分析》学习(一)——BP神经网络基本理论
  4. RTC纽扣电池供电模块电路分析
  5. MS08067 第一期 “恶意代码分析”实战班 正式开班~
  6. 天猫618收官之时,马云张勇在哪?
  7. c语言中双反斜杠的作用,[转载]C语言中反斜杠的使用
  8. 灰机躲炸弹小小游戏,你值得拥有
  9. 模糊查询like #{name}与like ‘%${value}%‘
  10. RHEL 7.6 连接xstart的问题汇总