8 单表数据记录查询

创建雇员信息表:

CREATE TABLE t_employee{
empno int(11) NOT NULL,
emame varchar(20) NOT NULL,
job varchar(40) NOT NULL,
MGR int(11) NOT NULL,
Hiredate date NOT NULL,
sal double(10,2) NOT NULL,
comm double(10,2) NOT NULL,
deptno int(11) NOT NULL
}

  • 简单数据记录查询
  • 条件数据记录查询
  • 排序数据记录查询
  • 限制数据记录查询
  • 统计函数和跟组数据记录查询

8.1 简单数据记录查询

查询数据记录,是指从数据库对象中获取所要求的数据记录。该操作不仅是MySQL软件中数据的基本操作之一,而且还是使用频率最高、最重要的数据操作。

SELECT field1,field2,field3...fieldn
    FROM table_name

在上述语句中,参数field表示所要查询的字段名字,参数table_name表示所要查询数据记录的表名。实现简单数据记录查询的SQL语句可以通过如下几种方式使用:

  • 简单数据查询。
  • 避免重复数据查询。
  • 实现数学四则运算数据查询。
  • 设置显示格式数据查询

8.1.1 简单数据查询

在MySQL软件中可以通过SELECT语句来实现见得数据查询,该SQL语句可以通过如下几种方式使用:

  • 查询所有字段数据。
  • 查询指定字段数据。
8.1.1.1查询所有字段数据
SELECT field1,field2,field3...fieldn
        FROM table_name

上述语句中参数field表示表中的字段名,注意查询所有字段要与表中的字段个数和名称一一对应

SELET * 
    FROM table_name

等同于查询所有字段数据

8.1.1.2查询指定字段数据
SELECT 指定字段名称1,指定字段名称2...指定字段名称n
 FROM table_name

8.1.2避免重复数据——DISTINCT

在MySQL软件中执行简单数据查询时,有时会现实出重复数据。为了实现查询不重复的数据,MySQL软件提供了关键字——DISTINCT。

SELECT DISTINCT field1,field2...fieldn
    FROM table_name

在上述语句中,关键字DISTINCT去除掉重复数据。

8.1.3实现数据四则运算数据查询

当在MySQL软件中执行简单数据查询时,有时会需要实现数据四则运算(加+、键-、乘*、除/),下图所支持的四则运算符

mysql 查询某个值在另一张表中的数据 mysql查询表中某人所有记录_字段

SELECT (field1*12) AS otherfield1, (field2+12) AS otherfield2, (fieldn/2) AS otherfieldn
    FROM tabl_name

在上述语句中,参数field为字段原来的名字,参数otherfield为字段的新名字,之所以要设置新名字,是为了让结果更加直观,更加人性化

8.1.4设置显示格式数据查询

在MySQL软件中执行简单数据查询时,有时需要设置显示格式,以方便用户浏览所查询的数据。

SELECT CONCAT(ename,'雇员的年薪为:',sal*12) AS yearsalary
    FROM t_employee

在上述语句中,通过函数CONCAT()合并字符串和字段值,以设置字段的显示格式。

8.2条件数据记录查询

在简单查询中可以查询所有记录相关字段数据,但是在具体应用中,用户并不需要查询所有数据记录,而只需要根据限制条件来查询部分数据记录。

SELECT field1,field2...fieldn
    FROM table_name
        WHERE CONDITION

在上述语句中通过参数CONITION对数据进行条件查询。关于条件数据查询可以包含如下功能:

  • 带关系运算符合逻辑运算符的条件查询。
  • 带 BETWEEN AND 关键字的条件查询。
  • 带 IS NULL 关键字的条件数据查询。
  • 带 IN 关键字的条件数据查询。
  • 带 LIKE 关键字的条件数据查询。

8.2.1 带关系运算符和逻辑运算符的条件数据查询

在MySQL软件中,可以通过关系运算符合逻辑运算符来编写“条件表达式”,该软件所支持的关系运算符如下

mysql 查询某个值在另一张表中的数据 mysql查询表中某人所有记录_数据查询_02

在MySQL软件中,可以通过关系运算符合逻辑运算符来编写“条件表达式”,该软件所支持的逻辑运算符如下

mysql 查询某个值在另一张表中的数据 mysql查询表中某人所有记录_数据查询_03

8.2.1.1单条件数据查询

例如:查询雇员表中从事“CLERK”工作的员工

SELECT ename
    FROM t_employee
        WHERE job = 'CLERK'

注意:在MySQL软件中是不区分大小写的
在上述具体应用中,WHERE关键字后面的条件表示是一个字段 = 比较表达式,除了该运算符外,还可以使用“>”、“<”、“>=”、“<=”、“!=”符号来创建该条件表达式

8.2.1.2多条件数据查询

例如:查询雇员表中从事“CLERK”作用并且工资大于800的雇员

SELECT ename 
    FROM t_employee
        WHERE jon = 'CLERK' &&[AND] sal > 800

在上述语句中,WHERE关键字后面为两个条件表达式,这两个表达式分别为 =表达式和>表达式,这两个表达式通过逻辑运算符&&来进行连接。由于AND与&&符号作用相同 所以也可以改成“WHERE jon = ‘CLERK’ AND sal > 800”

注意 还可以通过“||”或者“XOR”符号连接多个条件表达式进行联合查询

8.2.2带 BETWEEN AND 关键字的范围查询

SELECT field1,field2...fieldn 
    FROM table_name
        WHERE fiele BETWEEN VALUE1 AND VAKUE2

在上述语句中,通过关键字B**ETWEEN**和AND来设置字段field的取值范围,如果字段field的值在所指定的范围内,则满足查询条件,该记录就会被查询出来,否则不会被查询出来。

BETWEEN minvalue AND maxvalue,表示的是一个范围的判断过程。这些关键字操作符只针对数字类型。

当然也可以通过NOT BETWEEN minvalue AND maxvalue 查询不在指定范围内的记录

8.2.3带 IS NULL 关键字的范围查询

SELECT field1,field2...fieldn
    FROM table_name
        WHERE field IS NULL

在上述语句中,通过关键字IS NULL来判断字段field的值是否为空,如果字段field的值为NULL,则满足查询条件,该记录就会被查询出来;否则不会被查询出来,在具体的应用时,一定要注意空值与空字符串和0的区别

当然也可以使用IS NOT NULL设置非空值的查询条件。

8.2.4带 IN 关键字的范围查询

SELECT field1,field2...fieldn
    FROM table_name
        WHERE field IN (value1,value2....valuen)

在上述语句中,参数value表示集合中的值,通过关键字IN来判断字段field的值是否在集合(value1,value2….valuen)中,如果字段field的值在集合中,则满足查询条件,该记录就会被查询出来;否则不会查询出来。

当然也可以使用关键字NOT IN设置集合的查询条件,实现不在集合中的记录被查询出来。

注意:再具体使用关键字IN时,查询的集合中如果存在NULL,则不会影响查询;如果使用关键字 NOT IN 时,查询的集合中如果存在NULL,则不会有任何查询结果

8.2.5带 LIKE 关键字的范围查询

MySQL软件提供了关键LIKE,用来实现判断字段的值是否与指定的值相匹配。

SELECT field1,field2...fieldn
    FROM table_name
        WHERE field LIKE value

在上述语句中,参数value表示所匹配的字段串值,通过关键字LIKE来判断字段field的值是否与value字符串相匹配,如果匹配,则满足查询条件,该记录就会被查询出来;否则就不会被查询出来。

注意:对于字段串在MySQL软件中,必须加上单引号(‘’)或者双引号(“”)。由于关键字LIKE可以实现模糊查询,所以关键字后面的字符串参数除了可以是一个完整的字符串以外,还可以包含通配符。

  • “_”通配符,该通配符值可以匹配单个字符。
  • “%”通配符,该通配符值可以匹配任意长度字符串,既可以是0个字符,1个字符,也可以是很多个字符。

当然可以可使用关键字NOT LIKE来实现查询不匹配的数据记录

8.3排序数据记录查询

通过条件数据查询,虽然可以查询符合用户需求的数据记录,但是查询到的数据记录在默认情况下都是按照数据记录最初添加的顺序来显示。默认的查询结构顺序并不能满足用户的需求,于是MySQL软件提供了关键字ORDER BY来设置查询结果的顺序。

SELECT field1,field2...fieldn
    FROM table_name
        WHERE CONDITION
            ORDER BY fieldm1 [ASC | DESC]

在上述语句中,通过参数fieldm表示按照该字段进行排序,参数ASC表示按照升序的顺序进行排序,参数DESC表示按照降序的顺序排序,默认情况是是ASC进行排序。在关键字ORDER BY后面可以设置多个不同的字段进行排序。

SELECT field1,field2...fieldn
    FROM table_name
        WHERE CONDITION
            ORDER BY fieldm1 [ASC|DESC]
  • 按照单子段排序
  • 按照多字段排序

8.3.1 按照单字段排序

MySQL软件中如果想实现按照单字段进行排序,关键字ORDER BY后面将只有一个字段,将查询结果在显示时按照该字段进行排序。

  1. 升序排序
SELCET field1,field2...fieldn
    FROM table_name
        WHERE CONDITION
            ORDER BY fieldm [ASC]

注意MySQL软件中关键字 ORDER BY 默认的排序顺序就是升序

  1. 降序排序
SELCET field1,field2...fieldn
    FROM table_name
        WHERE CONDITION
            ORDER BY fieldm DESC

注意:在MySQL软件中,如果该字段的值为空值(NULL),则该值为最小值,因此在降序排序中将最后显示(最后一行);在升序排序中则将最先显示(第一行)。

8.3.2 按照多字段排序

具体排序过程中,首先按照第一个字段进行排序,如果遇到值相同的字段则会按照第二个字段进行排序,以此类推。

SELECT field1,field2...fieldn
    FROM table_name
        WHERE CONDITION
            ORDER BY fieldm1 [ASC | DESC],fieldm2 [ASC | DESC]

8.4限制数据记录查询数量

通过条件数据查询,虽然可以查询到符合用户需求的数据记录,但是有时所差选到的数据记录太多,对于这么多数据记录,如果全部显示则不符合实际需求,这时可以通过MySQL软件提供的关键字LIMIT来限制结果的数量。

SELECT field1,field2...fieldn
    FROM table_name
        WHERE CONDITION
            LIMIT OFFSET_START,ROW_COUNT

在上述语句中,通过关键字LIMIT来限制查询结果的数量,其中OFFSET_START表示数据记录的起始偏移量,ROW_COUNT表示显示的行数

根据是否制定初始位置(起始偏移量),关于限制数据查询结果数量语句可以分为如下两类:

  • 不指定初始位置方式。
  • 指定初始位置方式。

8.4.1 不指定初始位置

对于MySQL软件提供的关键字LIMIT,如果不指定初始位置,默认值为0,表示从第一条记录开始显示

LIMIT row_count

上述SQL语句表示显示row_count条数据查询结果数量,如果row_count值小于查询结果的总数量,将会从第一条数据记录开始,显示row_count条数据记录;如果row_count值大于查询结果的总数量,将会显示所有查询结果。

8.4.2 指定初始位置

LIMIT关键字经常被用作分页系统中,对于第一页的数据记录,可以通过不指定初始位置来实现,但是对于第二页等其他页面则必须指定初始位置OFFSET_START,否则无法实现分页功能,除此之外,LIMIT关键字还经常与ORDER BY关键字一起使用,即先对查询结果进行排序,然后显示其中部分数据记录。

SELECT field1,field2...fieldn
    FROM table_name
        WHERE CONDITION
            ORDER BY fieldm1 LIMIT OFFSET_START,ROW_COUNT

8.5 统计函数和分组数据记录查询

在MySQL软件中,很多情况下都需要进行一些统计汇总操作,比如,统计整个公司的人数或者统计整个部门的人数,这时候就会用到MySQL软件所支持的统计函数,他们分别为:

  • COUNT()函数,该统计函数实现统计表中记录的总数。
  • AVG()函数,该统计函数实现计算字段值得平均值。
  • SUM()函数,该统计函数实现计算字段值得总和。
  • MAC()函数,该统计函数实现查询字段值得最大值。
  • MIN()函数,该统计函数实现查询字段值得最小值。
SELECT function(field)
    FROM table_name
        WHERE CONDITON

在上述语句中利用统计函数function来统计关于字段field的值

8.5.1MySQL支持的统计函数

  1. 统计数据记录条数
    统计函数COUNT()用来实现统计数据记录条数,可以用来确定表中记录的条数或符合特定条件的记录的条数。
  • COUNT(*)使用方式:该种方式可以实现对表中记录进行统计,不管表中字段中包含的是NULL值还是非NULL
SELECT COUNT(*) number
    FROM table_name
  • COUNT(field)使用方式:该种方式可以实现对指定字段的记录进行统计,在具体统计时将忽略NULL
SELECT COUNT(field) number
    FROM table_name

2.统计计算平均值

统计函数AVG() 首先用来实现统计计算特定字段值之和,然后求得该字段的平均值。该函数可以用来计算指定字段平均值或符合特定条件的指定字段的平均值,与COUNT()统计函数相比,该统计函数只有一种使用方式

  • AVG(field)使用方式:该种方式可以实现对指定字段的平均值进行计算,在具体统计时忽略NULL
SELECT AVG(field) average
    FROM table_name
        WHERE CONDITION
  1. 统计计算求和

统计函数SUM()用来实现统计数据计算求和,该函数可以用来计算指定字段之和或符合特定条件的指定字段之和,与COUNT()统计函数相比,该统计函数也只有一种使用方式:

  • SUM(field)使用方式:该种方式可以实现计算指定字段值之和,再具体统计时忽略NULL值。
SELECT SUM(field) sumvalue
    FROM table_name
        WHERE CONDITION
  1. 统计计算最大值和最小值
    统计函数MAX()MIN()用来实现统计数据计算最大值和最小值,这些函数可以用来计算指定字段中的最大值和最小值或符合特定条件的指定字段值中的最大值和最小值,与COUNT()统计函数相比,这些统计函数也只有一中实现方式:
  • MAX(field)的使用方式:该种方式可以实现计算指定字段值中的最大值,再具体统计时忽略NULL
  • MIN(field)的使用方式:该种使用方式实现计算指定字段值中的最小值,再具体的统计时将忽略NULL
SELECT MAX(field) maxvalue,MIN(field) minvale
    FROM table_name
        WHERE CONDITION

8.5.2 关于统计函数注意点

对于MySQL软件所支持的统计函数,如果所操作的表中没有任何数据记录,则COUNT()函数返回数据0,而其他函数则返回NULL

8.5.3分组数据查询——简单分组查询

MySQL软件提供了5个统计函数来帮助用户统计数据,使用户很方便地实现对记录进行统计数,计算和,计算平均数、计算最大值和计算最小值,而不需要查询所有数据。
再具体使用统计函数时,都是针对表中所有记录或指定特定条件(WHERE 字句)的数据记录进行统计计算。但是在现实应用中,经常会把所有数据记录进行分组,然后才对这些分组后的数据记录进行统计计算。

SELECT function()
     FROM table_name
         WHERE CONDITION
             GROUP BY field

在上述语句中,通过参数field对数据记录进行分组。

注意: 在具体进行分组查询时,分组所依据的字段上的值一定要具有重复值,否则没有任何实际意义。

8.5.4 分组数据查询——实现统计功能分组查询

MySQL软件如果只实现简单的分组查询,是没有任何实际意义的,应为关键字GROUP BY 单独使用时,默认查询出每个分组中随机一条记录,具有很大的不确定性,查询帮助文档后可以发现。分组关键字建议与统计函数一起使用

如果想实现显示每个分组中的字段,可以通过函数GROUP_CONCAT()来实现,该函数可以实现显示没个分组中的指定字段值。

SELECT GROUP_CONCAT(filed)
    FROM table_name
        WHERE CONDITION
            GROUP BY field

8.5.5 分组数据查询——实现多个字段分组查询

在MySQL软件中使用关键字GROUP BY时,起字句除了可以是一个字段外,还可以是多个字段,即可以安多个字段进行分组。

SELECT GROUP_CONCAT(field),function(field)
    FROM table_name
        WHERE CONDITION
            GROUP BY field1,field2...fieldn

8.5.6分组数据查询——实现HAVING字句限定分组查询

在MySQL软件中如果想实现对分组进行条件限制,决不能通过关键字WHERE来实现,因为改关键字主要用来实现条件限制记录。为了解决上述问题, MySQL软件专门提供了关键字HAVING来实现条件限制分组数据记录。关于HAVING关键子查询语法形式如下:

SELECT function(field)
    FROM table_name
        WHERE CONDITION
            GROUP BY field1,field2...fieldn
                HAVING CONTITION

上述语句中,通过关键字HAVING来指定分组后的条件