zoukankan      html  css  js  c++  java
  • MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询)

    在MySQL中创建数据库的目的是为了使用其中的数据。

    使用select查询语句可以从数据库中把数据查询出来。

    select语句的语法格式如下:

    select selection_list                  // 要查询的内容,选择哪些列
    from table_list                        // 从什么表中查询,从何处选择行
    where primary_constraint               // 查询时需要满足的条件,行必须满足的条件
    group by grouping_columns              // 如何对结果进行分组
    order by sorting_columns               // 如何对结果进行排序
    having secondary_constraint            // 查询时满足的第二条件
    limit count                            // 限定输出的查询结果

    下面对select查询语句的参数进行详细的讲解。

    首先,连接MySQL服务器,其次,选择指定的数据库:

    use db_xuesheng;

    要确保该数据库已经建立。

    还要确保已经建立了数据表tb_chengji,并且已经添加了数据,然后才能更好地理解下面的内容。

    1. selection_list

    设置查询的内容。

    1)如果要查询一个表中的所有列,可以将其设置为“*”。

    比如,查询tb_chengji数据表中的所有列。代码如下:

    select * from tb_chengji;   // 查询数据表中的所有数据

    查询tb_chengji数据表中的所有列

    2)如果只查询一个表中的某一列或多列,可以直接输入列名,并以“,”分隔。代码如下:

    select xuesheng,yuwen from tb_chengji;   // 查询数据表中xuesheng和yuwen列的数据

    查询表中的某一列或多列的数据

    2. table_list——多表查询

    指定查询的数据表。

    既可以从一个数据表中查询,也可以从多个数据表中进行查询,多个数据表之间用“,”进行分隔,并且可以通过where子句使用连接运算来确定表之间的联系。

    多表查询的sql语句格式如下:

    select 表名.字段名 from 表1,表2... where 表1.字段=表2.字段 and 其它查询条件

    例如,首先查看一下tb_chengji数据表中的数据记录。在上图有显示效果。

    然后查看一下tb_info数据表中的数据记录。代码如下:

    select * from tb_info;

    查看tb_info数据表中的数据记录

    下面从tb_chengji和tb_info数据表中查询yuwen大于等于100的数据记录。代码如下:

    select tb_chengji.id,tb_chengji.xuesheng,xingbie,dizhi,yuwen,shuxue,yingyu from
    tb_chengji,tb_info where tb_chengji.xuesheng=tb_info.xuesheng and tb_chengji.yuwen>=100;

    在tb_chengji和tb_info数据表中查询yuwen大于等于100的数据记录

    在上面的SQL语句中,因为2个表都有id字段和xuesheng字段,为了告诉服务器要显示的是哪个表中的字段信息,所以要加上前缀。语法格式如下:

    表名.字段名

    tb_chengji.xuesheng=tb_info.xuesheng将表tb_chengji和tb_info连接起来,叫做等同连接。如 果不使用tb_chengji.xuesheng=tb_info.xuesheng,那么产生的结果将是两个表的笛卡尔积,叫做全连接。

    3. where条件语句

    在使用查询语句时,比如要从很多的记录中查询出想要的记录,就需要一个查询的条件。只有设定了查询的条件,查询才有实际的意义。

    设定查询条件应用的是where子句。

    通过where子句,可以实现很多复杂的条件查询。在使用where子句时,需要使用一些比较运算符。常用的比较运算符如下表所示:

    运算符名称示例
    = 等于 id=10
    > 大于 id>10
    < 小于 id<10
    >= 大于等于 id>=10
    <= 小于等于 id<=10
    !=或<> 不等于 id!=10
    is null n/a id is null
    is not null n/a id is not null
    between n/a id between 1 and 15
    in n/a id in(3,4,5)
    not in n/a xuesheng not in(shi,li)
    like 模式匹配 xuesheng like('shi%')
    not like 模式匹配 xuesheng not like('shi%')
    regexp 常规表达式 xuesheng正则表达式

    上表中列举的是where子句常用的比较运算符。示例中的id是记录的编号,xuesheng是表中的学生名。

    例如,使用where子句,查询tb_chengji表,条件是xuesheng为李丽的数据记录。代码如下:

    select * from tb_chengji where xuesheng='李丽';

    查询tb_chengji表中李丽的数据记录

    提示:where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据。因此,在使用where子句时,条件中不能包含聚合函数来显示特定的行。

    4. GROUP BY对结果分组

    通过GROUP BY子句,可以将行数据划分成较小的组,以实现对记录进行分组查询。在与AVG()函数或SUM()函数等聚合函数一起使用时,GROUP BY子句能够发挥最大的作用。

    GROUP BY子句可以将查询结果分组,并返回行的汇总信息。

    在带有GROUP BY子句的查询语句中,在SELECT列表中指定的列要么是GROUP BY子句中指定的列,要么就包含在了聚合函数中。

    查询语句的SELECT和GROUP BY、HAVING子句是聚合函数唯一出现的地方,因此,在where子句中不能使用聚合函数。

    例如,在tb_chengji02数据表中。如下图所示:

    tb_chengji02数据表

    就可以使用GROUP BY子句,按照xuesheng进行分组,求出每个学生的平均成绩。代码如下:

    select xuesheng,avg(fenshu) from tb_chengji02 group by xuesheng;

    group by xuesheng是按学生分组,那么在xuesheng列中,相同名字的学生就会分为一组,然后计算出它们的平均成绩。

    使用GROUP BY子句计算学生的平均成绩

    5. HAVING子句

    HAVING子句的作用是筛选满足条件的组,即在分组之后过滤数据。在HAVING子句中经常包含聚合函数。可以使用HAVING条件显示特定的组,也可以使用多个分组标准进行分组。

    当在GROUP BY子句中使用HAVING子句时,查询结果中只返回满足having条件的组。

    例如,在tb_chengji02表中查询总成绩大于等于280的记录。代码如下:

    select xuesheng,sum(fenshu) from tb_chengji02 group by xuesheng having sum(fenshu)>=280;

    在tb_chengji02表中查询总成绩大于等于280的记录

    我们也可以在tb_chengji02表中查询张冬雪或者李丽的总成绩大于等于270的记录是否存在,如果存在,则显示出来。代码如下:

    select xuesheng,sum(fenshu) from tb_chengji02 where xuesheng='张冬雪' or xuesheng='李丽' group by xuesheng having sum(fenshu)>=270;

    在tb_chengji02表中查询张冬雪或者李丽的总成绩

    6. DISTINCT在结果中去除重复行

    使用DISTINCT关键字,可以去除结果中重复的行。

    DISTINCT语句中SELECT显示的字段只能是DISTINCT指定的字段,其他字段是不能出现的。

    例如,查询tb_chengji02表,并在结果中去掉xuesheng字段中的重复数据。代码如下:

    select distinct xuesheng from tb_chengji02;

    使用DISTINCT关键字在结果中去除重复行

    7. ORDER BY对结果进行排序

    使用ORDER BY可以对查询的结果进行升序(ASC)或降序(DESC)排列,在默认情况下,ORDER BY按升序输出结果。如果要按降序排列可以使用DESC来实现。

    在对含有null值的列进行排序时,如果按升序排列,null值将出现在最前面;如果按降序排列,null值将出现在最后面。

    例如,查询tb_chengji表中的所有信息,按照“id”进行降序排列。代码如下:

    select * from tb_chengji order by id desc;

    ORDER BY对结果进行排序

    8. LIKE模糊查询

    LIKE属于比较常用的比较运算符,通过它可以实现模糊查询。它有两种通配符:“%”和下划线“_”。

    “%”可以匹配一个或多个字符,而“_”只能匹配一个字符。

    例如,在tb_chengji表中查找所有第二个字符是“冬”的学生。代码如下:

    select * from tb_chengji where xuesheng like('_冬%');

    LIKE模糊查询

    9. CONCAT联合多列

    使用CONCAT函数可以联合多个字段,构成一个总的字符串。

    例如,把tb_chengji表中的yuwen、shuxue和yingyu字段合并到一起,构成一个新的字符串。代码如下:

    select id,xuesheng,concat(yuwen,":",shuxue,":",yingyu) as fenshu from tb_chengji;

    使用CONCAT函数联合多个字段,构成一个字符串

    10. LIMIT限定结果行数

    LIMIT子句可以对查询结果的记录条数进行限定,控制它输出的行数。

    例如,查询tb_chengji表,按照id字段降序排列,显示3条记录。代码如下:

    select * from tb_chengji order by id desc limit 3;

    使用LIMIT限定结果行数

    使用LIMIT还可以从查询结果的中间部分取值。首先要定义两个参数,参数1是开始读取的第一条记录的编号(在查询结果中,第一个结果的记录编号是0,而不是1),参数2是要查询记录的个数。

    select * from tb_chengji order by id desc limit 1,2;

    使用LIMIT从查询结果的中间部分取值

    11. 使用函数和表达式

    在MySQL中,还可以使用表达式来计算各列的值,作为输出结果。表达式还可以包含一些函数。

    例如,计算tb_chengji表中学生的总分数。代码如下:

    select id,xuesheng,yuwen,shuxue,yingyu,sum(yuwen+shuxue+yingyu) as zongfen from tb_chengji group by id; 

    或者:

    select *,sum(yuwen+shuxue+yingyu) as zongfen from tb_chengji group by id; 

    计算tb_chengji表中学生的总分数

    计算tb_chengji表中学生的三门平均分数。代码如下:

    select *,format(avg(yuwen+shuxue+yingyu)/3),1) as pingjun feng from tb_chengji group by id;

    计算tb_chengji表中学生的三门平均分数

    在对MySQL数据库进行操作时,有时候需要对数据库中的记录进行统计,例如求平均值、最小值或最大值等,这时可以使用MySQL中的统计函数。

    常用的统计函数如下表所示:

    名称说明
    avg(字段名) 获取指定列的平均值。
    count(字段名) 如果指定了一个字段,则会统计出该字段中的非空记录。如果在前面增加DISTINCT,则会统计不同值的记录,相同的值当做一条记录。如果使用count(*),则统计包含空值的所有记录数。
    min(字段名) 获取指定字段的最小值。
    max(字段名) 获取指定字段的最大值。
    std(字段名) 指定字段的标准背离值。
    stdtev(字段名) 与std相同。
    sum(字段名) 指定字段所有记录的总和。

    除了使用函数之外,还可以使用算术运算符、字符串运算符以及逻辑运算符来构成表达式。

    例如,计算数学成绩打八折之后的分数。代码如下:

    select *,(shuxue * 0.8) as '80%' from tb_chengji;

    原文:http://www.baike369.com/content/?id=5355
  • 相关阅读:
    Android游戏开发22:Android动画的实现J2me游戏类库用于Android开发
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第三部分,完整代码)
    使用OGR创建dxf格式矢量数据
    mysql 数据库引擎 MyISAM InnoDB 大比拼 区别
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第二部分)
    mysql 更改数据库引擎
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第一部分)
    android 数字键盘使用
    MySQL Innodb数据库性能实践
    eclipse : Error while performing database login with the driver null
  • 原文地址:https://www.cnblogs.com/bohanfu/p/5706212.html
Copyright © 2011-2022 走看看