SQL(三)查询(一) 简单查询(order by、group by、having、as)
2013-06-18 13:50
323 查看
一 SQL语句概述:
*SQL语句必须以分号(;)分隔。
*SQL语句不区分大小写,许多SQL开发人员喜欢所有SQL关键字大写,对所有列和表名小写。
*处理SQL语句时,其中所有空格都被忽略。
二 单表查询:
*格式:select <目标列表达式> from <表名或视图名>
(1)检索单个列:
*格式:select 列名 from 表名。
*列名可以用完全限定名,例如:表名.列名。
(2)检索多个列:
*格式:select 列名,列名,...列名 from 表名。
*选择多个列时,一定要在列名之间加上逗号,但最后一个列名不加。
*列名出现的顺序可以与表中的顺序不一致。
(3)检索所有行:
*格式:select * from 表名 或 select 所有列名 from 表名。
*除非需要表中的每个列,否则不要使用*通配符。检索不需要的列通常会降低检索和应用程序的性能。
(4)查询经过计算的值:
*目标表达式不仅可以是表中的属性列,还可以是表达式(算数表达式、字符串常量和函数)。
*例如:select 'age:',2013-出生年月属性列 from 表名。age是添加的字符串,2013-出生年月是算数表达式。
*例如:select 列名,lower()列名 from 表名。
(5)取消重复的行(distinct关键字):
*select distinct <目标列表达式> from 表名。
(6)限制结果行数(limit子句):
*格式:select <目标列表达式> from 表名 limit <行数表示>。
*行数表示:
~limit 5:返回不多于5行。
~limit 5,5:指示返回从第5行开始的5行。只有一个值,limit总是从第一行开始。
*另一种方法:
~limit 4 offset 3:从第3行开始取4行。
二 检索排序数据(order):
(1)默认情况:
*检索的数据不是以纯粹的随机顺序显示。如果不排序,数据一般以它在底层表中出现的顺序显示。
*默认情况下,数据排序是升序排序(ASC)。可以用关键字DESC指定进行降序排序。
(2)按照单个列排序:
*格式:select <目标表达式> from 表名 order by 列名 [desc]。
(3)按照多个列排序:
*格式:select <目标表达式> from 表名 order by 列名 [desc],列名 [desc]。
*desc关键字只应用位于其前面的列名。如果想在多个列上进行降序排序,必须对每个列指定desc关键字。
(4)order by与limit结合:
*使用order by与limit结合可以找出一个列中最高或最低的值、前几或后几。
*格式:select <目标列表达式> from 表名 order by 列名 limit 1。
三 分组数据(group by):
(1)功能:
*分组允许把数据分为多个逻辑组,以便对每个组进行操作(聚集).
*group by子句将查询结果按某一列或多列的值分组,值相等的为一组。
*对查询结果分组目的是为了细化聚集函数的作用对象。
(2)创建分组:
*格式:select <目标列表达式> from 表名 group by 列名,列名,...。
*group by子句可以包含任意数目的列。
*如果分组列中有NULL值,则NULL将作为一个分组返回。如果有多个NULL值,它们将作为一组。
(3)过滤分组(having子句):
*having类似于where,但唯一区别:where过滤行,having过滤分组。
*having支持所有where操作符。
(4)where与having的区别:
*where子句作用于基本表或视图,从中选择满足条件的行;
*having子句作用于组,从中选择满足条件的组。
四 select子句顺序:
五 创建计算字段:
(1)计算字段:
*存储在数据库表中的数据一般不是应用程序所需要的格式。
*利用计算字段,直接从数据库中检索出转换、计算或格式化过的数据,而不是检索出数据,然后再在客户端应用程序中重新格式化。
*计算字段是运行时在select语句内创建的。
(2)拼接字段(concat):
*concat():拼接串,把多个串连接起来形成一个较长的串。
*例如:select concat('(',rtrim(name),')') from 表名。
*rtrim()函数:去掉值右边的所有空格;ltrim():去掉左边的所有空格;trim():去掉作用两边的空格。
(3)别名(AS):
*拼接字段没有名字,只是一个值,如果只是查询结果,那么可以,但是一个未命名的列不能用于客户机应用中,因为客户机没办法引用它。
*别名:是一个字段或值的替换名。用关键字AS赋予。
*格式:select concat('(',rtrim(name),')') as new_name from 表名。
(4)执行算术计算:
*MYSQL支持的算术操作符:+、-、*、/。
*例如:select num,price,num*price as sum from 表名。
六 数据处理函数:一般在数据上处理,为数据的转换和处理提供方便。
*函数没有SQL的移植性强。每个DBMS都支持一些其它不支持的函数。
(1)MYSQL支持以下类型函数:
*用于处理文本串。
*用于在数值上进行算术操作。
*用于处理日期和时间值并从这些值中提取特定成分。
*返回DBMS正使用的特殊信息。
(2)函数如下:
六 聚集函数(汇总数据):
(1)聚集函数:运行在行元组上,计算和返回单个值的函数。
*MYSQL支持五个聚集函数:
*可以与AS结合使用。
(2)count:计数。
*格式:count([distinct | all] *):统计元组个数。
*格式:count([distinct |all] <列名>):统计一列中值的个数。
*all为默认。
(3)avg:对表中的行数计算并计算特定列值之和,求得该列的平均值。
*avg:只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个avg函数。
(4)max:返回指定列中的最大值。
*max要求指定列名。
(5)min:返回指定列中的最小值。
*min要求指定列名。
(6)sum:返回指定列值的和。
(7)组合聚集函数:
*SQL语句必须以分号(;)分隔。
*SQL语句不区分大小写,许多SQL开发人员喜欢所有SQL关键字大写,对所有列和表名小写。
*处理SQL语句时,其中所有空格都被忽略。
二 单表查询:
*格式:select <目标列表达式> from <表名或视图名>
(1)检索单个列:
*格式:select 列名 from 表名。
*列名可以用完全限定名,例如:表名.列名。
(2)检索多个列:
*格式:select 列名,列名,...列名 from 表名。
*选择多个列时,一定要在列名之间加上逗号,但最后一个列名不加。
*列名出现的顺序可以与表中的顺序不一致。
(3)检索所有行:
*格式:select * from 表名 或 select 所有列名 from 表名。
*除非需要表中的每个列,否则不要使用*通配符。检索不需要的列通常会降低检索和应用程序的性能。
(4)查询经过计算的值:
*目标表达式不仅可以是表中的属性列,还可以是表达式(算数表达式、字符串常量和函数)。
*例如:select 'age:',2013-出生年月属性列 from 表名。age是添加的字符串,2013-出生年月是算数表达式。
*例如:select 列名,lower()列名 from 表名。
(5)取消重复的行(distinct关键字):
*select distinct <目标列表达式> from 表名。
(6)限制结果行数(limit子句):
*格式:select <目标列表达式> from 表名 limit <行数表示>。
*行数表示:
~limit 5:返回不多于5行。
~limit 5,5:指示返回从第5行开始的5行。只有一个值,limit总是从第一行开始。
*另一种方法:
~limit 4 offset 3:从第3行开始取4行。
二 检索排序数据(order):
(1)默认情况:
*检索的数据不是以纯粹的随机顺序显示。如果不排序,数据一般以它在底层表中出现的顺序显示。
*默认情况下,数据排序是升序排序(ASC)。可以用关键字DESC指定进行降序排序。
(2)按照单个列排序:
*格式:select <目标表达式> from 表名 order by 列名 [desc]。
(3)按照多个列排序:
*格式:select <目标表达式> from 表名 order by 列名 [desc],列名 [desc]。
*desc关键字只应用位于其前面的列名。如果想在多个列上进行降序排序,必须对每个列指定desc关键字。
(4)order by与limit结合:
*使用order by与limit结合可以找出一个列中最高或最低的值、前几或后几。
*格式:select <目标列表达式> from 表名 order by 列名 limit 1。
三 分组数据(group by):
(1)功能:
*分组允许把数据分为多个逻辑组,以便对每个组进行操作(聚集).
*group by子句将查询结果按某一列或多列的值分组,值相等的为一组。
*对查询结果分组目的是为了细化聚集函数的作用对象。
(2)创建分组:
*格式:select <目标列表达式> from 表名 group by 列名,列名,...。
*group by子句可以包含任意数目的列。
*如果分组列中有NULL值,则NULL将作为一个分组返回。如果有多个NULL值,它们将作为一组。
(3)过滤分组(having子句):
*having类似于where,但唯一区别:where过滤行,having过滤分组。
*having支持所有where操作符。
(4)where与having的区别:
*where子句作用于基本表或视图,从中选择满足条件的行;
*having子句作用于组,从中选择满足条件的组。
四 select子句顺序:
select from where group by having order by limit
五 创建计算字段:
(1)计算字段:
*存储在数据库表中的数据一般不是应用程序所需要的格式。
*利用计算字段,直接从数据库中检索出转换、计算或格式化过的数据,而不是检索出数据,然后再在客户端应用程序中重新格式化。
*计算字段是运行时在select语句内创建的。
(2)拼接字段(concat):
*concat():拼接串,把多个串连接起来形成一个较长的串。
*例如:select concat('(',rtrim(name),')') from 表名。
*rtrim()函数:去掉值右边的所有空格;ltrim():去掉左边的所有空格;trim():去掉作用两边的空格。
(3)别名(AS):
*拼接字段没有名字,只是一个值,如果只是查询结果,那么可以,但是一个未命名的列不能用于客户机应用中,因为客户机没办法引用它。
*别名:是一个字段或值的替换名。用关键字AS赋予。
*格式:select concat('(',rtrim(name),')') as new_name from 表名。
(4)执行算术计算:
*MYSQL支持的算术操作符:+、-、*、/。
*例如:select num,price,num*price as sum from 表名。
六 数据处理函数:一般在数据上处理,为数据的转换和处理提供方便。
*函数没有SQL的移植性强。每个DBMS都支持一些其它不支持的函数。
(1)MYSQL支持以下类型函数:
*用于处理文本串。
*用于在数值上进行算术操作。
*用于处理日期和时间值并从这些值中提取特定成分。
*返回DBMS正使用的特殊信息。
(2)函数如下:
六 聚集函数(汇总数据):
(1)聚集函数:运行在行元组上,计算和返回单个值的函数。
*MYSQL支持五个聚集函数:
*可以与AS结合使用。
(2)count:计数。
*格式:count([distinct | all] *):统计元组个数。
*格式:count([distinct |all] <列名>):统计一列中值的个数。
*all为默认。
(3)avg:对表中的行数计算并计算特定列值之和,求得该列的平均值。
*avg:只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个avg函数。
(4)max:返回指定列中的最大值。
*max要求指定列名。
(5)min:返回指定列中的最小值。
*min要求指定列名。
(6)sum:返回指定列值的和。
(7)组合聚集函数:
select count(*) as num_items, min(prod_price) as price_min, max(prod_price) as price_max from products;
相关文章推荐
- Mysql 简单的命令语句续-*,as,group by,order by,group by,having,limit;
- SQL多表查询与case when .. else .. end as ..,group by.. having
- sql中Distinct、Group by、having、order by使用注意事项
- SQL中的Where,Group By,Order By和Having
- 当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序
- SQL 语句中group by 和having 的简单使用
- group by ,order by ,having 简单用法
- MYSQL数据库(十)- 数据表的插入(insert)、删(delete)、改(update)、查(select)、group by 分组、having语句设置分组条件,order by查询结果排序,
- 当WHERE子句、GROUP BY子句和HAVING子句同时出现在一个查询中时,SQL的执行顺序
- 查询之order by,group by和having的使用
- 用到 count; group by ; order by ;having 的一个SQL语句
- 查询之order by,group by和having的使用 .
- oracle 涉及行转列、复合查询、函数、 HAVING 、order by、group by、count、case when then、 join
- SQL中的Where,Group By,Order By和Having的用法/区别
- 当一个SQL语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序
- sql中Distinct、Group by、having、order by使用注意事项
- 查询之order by,group by和having的使用(转)
- 基本SQL语句练习(order by,group by,having)
- sql语句中order by、group by和having的区别
- 【sql之区分Order by、group by、where、having】