您的位置:首页 > 数据库

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子句顺序:

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;


























 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: