数据的排序:
数据库里面的行以随机顺序存储,但我们有时为了使数据更大的发挥它的价值,让用户用过来更好方面,我们有时间需要对数据进行排序.比如,一个表我们可以按年龄从大到小或从小到排列,按性别重新排列,我们考过试老师要给大家按照分数从高到低排名次等等
主键的作用仅仅是为了保证记录的唯一性,而不是对数据排序。
语法:select 字段名列表 from 表名 [where 条件] order by 排序字段1 [asc ] [desc] [排序字段2……]
作用:对指定表名满足条件的记录按照排序字段进行排序
Asc 升序 从小到大  
Desc 降序  从大到小
如果不带则默认升序

select 字段名列表 from 表名  [where 条件] order by 排序字段名1 asc|desc
 [,排序字段名2 asc|desc] [.....]
作用:对指定表中满足条件记录安照排序字段名1进行排序,那如果字段名1相同的再安照字段名2进行排序.
asc 升序  默认为升序
desc 降序
对yuangong按照年龄进行排序
select * from yuangong order by 年龄 desc
按照性别进行排序:
select * from yuangong order by 性别
按照姓名进行排序
select * from yuangong order by 姓名
先按照性别降序排列,性别相同的再按照应发工资升序
select * from yuangong order by 性别 desc,应发工资 asc

指定目标数据库

上面的示例中,我们并没有在SELECT语句中指定数据库,这意味着在执行SQL语句时,是在当前连接的数据库中查找数据。有时候我们需要查询当前连接的数据库以外的数据库中的数据,那么我们需要在SQL语句中指定目标数据库。
SQL ServerAccess允许我们在表名前加上数据库名后跟两个点,来指定表所属的数据库:
SELECT * FROM InstantUniversity..Student;     -- SQL Server
Oracle中,如果想访问与当前连接的数据库不同的Schema数据库中的表,可以在表名前面使用Schema名作为前缀。例如:
SELECT * FROM scott.EMP;
SELECT * FROM db2admin.Employee;

表和列命名注释

有时由于不佳的数据库设计,访问的表名或列名包含有空格。在这种情况下,一些关系型数据库管理系统要求将表名或者列名包含在方括号或者双引号中间。在SQL Server中,需要使用方括号。例如:
SELECT * FROM [Valued Customers]; -- SQL Server Access
如果表名或者列名是一个SQL关键字或者是数据库厂商的保留字,那么需要在SQL语句中使用双引号或者方括号。使用保留关键字作为表名或者列名是一个不好的设计,应该尽量避免,但是随着将来SQL扩展或者数据库厂商的保留关键字列表的扩展,我们还是可能碰到类似情况。
注意:数据库中的保留字一般有特殊的意义,不能被重新定义。因此,不能使用保留字作为数据库对象的名字。例如,Oracle不允许ROWID作为列名或者表名。
例如,假设我们访问一个名为Language的表,后来,数据库厂商将Language增加进保留字里表,我们仍然可以使用如下的方法在查询中使用该表:
SELECT * FROM [Language];    -- SQL Server Access
SELECT * FROM "LANGUAGE";    -- Oracle
注意上面第二行中使用大写字母作为表名的例子。如果在建Language表时没有使用双引号,Oracle会自动将其变为LANGUAGE。那么前述查询会成功,而使用SELECT * FROM "Language"会失败。相反,如果建表时候用双引号将Language括起来,那么使用SELECT * FROM "LANGUAGE"会失败。
 
使用别名
前面我们已经学习了如何从一个表中选择指定的列,以及如何控制列返回的顺序。除此以外,我们还可以为列或者表指定一个别名。换句话说,我们在返回的数据中按照我们自己设定的列名来引用列,而不是数据库存在的列名。
使用别名,可以使SQL语句和返回的数据更容易读懂、更容易理解。在多个表有同样的列名的时候,使用别名更容易区分。
在列名或表名用AS关键字来提供别名,语法如下:
SELECT A AS A, B AS B, C AS C FROM 表名 AS T;
当使用表的别名的时,可以在同一SQL语句中的列名使用别名,例如:
SELECT T.A AS A, T.B AS B, T.C AS C FROM AS T;
在涉及到多表的复杂查询且表名比较长的时候,使用别名可以使SQL查询更具可读性,并且占用更少空间。
SQL-99规范允许忽略AS关键字,这种格式被除Access以外的大多数RDBMS支持。例如:
SELECT T.A A, T.B B, T.C C FROM T;
注意:SQL Server 也允许使用=运算符代替AS,但是别名和列名的位置相反。例如:新列名=已存在列。
例如,在InstantUniversityStudent表中执行如下查询:
SELECT Name AS StudentName, StudentID AS ID FROM Student
 
过滤数据
前面我们所接触到的查询都是从一个表中返回所有的行。但是,我们经常需要根据指定条件,从一个表中抽取部分数据或者仅仅一行数据。SQL中包含了大量的工具,来过滤数据,确保此类查询的实现。

使用DISTINCT 排除重复数据

数据库表的同列中,经常有相同值多次出现。有时,我们需要确保返回唯一的数据行。例如,在一次购买中,我们不想在一个订单中对客户表中的客户两次收费。
SELECT语句中使用DISTINCT关键字可以过滤重复的行数据。首先我们从单列中返回的数据行的简单情况着手。如果我们想要返回某列的唯一的行值,可以使用如下查询:
SELECT DISTINCT A FROM ;
排除重复数据经常是很有用的。例如,一个数据库中的单列可能只允许限制的值集合。为了查找该列的所有不同值,我们肯定不想遍历表中的每一行,仅仅是为了查找值是否存在。为更清楚地展示,假设我们想要查询IntantUniversity数据库的Exam表,得到所有考试的时间列表。我们可以使用如下查询:
 SELECT SustainedOn from Exam;
查询结果集合如下:
sustainedon                                           
------------------------------------------------------
2003-03-12 00:00:00.000
2003-03-13 00:00:00.000
2003-03-11 00:00:00.000
2003-03-18 00:00:00.000
2003-03-19 00:00:00.000
2003-03-25 00:00:00.000
2003-03-26 00:00:00.000
2003-03-10 00:00:00.000
2003-03-21 00:00:00.000
2003-03-26 00:00:00.000
2003-03-24 00:00:00.000
 
(所影响的行数为 11 行)
我们可以看到总共得到11行,其中有1条行的值“2003-03-26”是重复的。但是如果使用如下语法:
SELECT DISTINCT SustainedOn FROM Exam;
 
 
 
聚集函数:
有时我们需要对表中的数值型数据进行一些汇总操作,比如到了月底要看一下基本工资总和是多少,通知会计去银行取钱发工资,到了年龄要看一下年龄的最大的是谁,是否到了退休年龄。像这样的操作就要用到一些函数,叫聚集函数,下面我们介绍几个常用的聚集函数。
1、  求和函数:sum(字段名)      支持数据类型:数字
 
求员工表中所有员工的基本工资总和
Select sum(基本工资) from 员工表
求员工表中所有员工的应发工资总和及年龄总和
select sum(基本工资+补助-工服),sum(年龄) from 员工表
2、  求平均值函数:avg(字段名)       支持数据类型:数字。
求员工表中所有员工的平均年龄
Select avg(年龄) from 员工表
3、求最小值函数;min(字段名)        支持数据类型:数字、字符、datetime
   作用:返回指定列中的最小数字,最早日期时间和最小的字符串
   查询年龄最小的员工记录
   Select min(年龄) from 员工表
Select 姓名,min(年龄) from 员工表 则是错误的。
4、求最大值函数;max(字段名)        支持数据类型:数字、字符、datetime
   作用:返回指定列中的最大数字,最近日期时间和最大的字符串
   查询基本工资最多的员工记录
   Select max (基本工资) from 员工表
 
5count(*)      支持任意数据类型
   作用:统计结果集中全部记录行的数量
 
在结果集内使用分组
聚集函数非常好,可以完成一部分工作,但问题是你是否经常需要对整个表做汇总呢,我们一般会按照一定的条件来对数据进行分组汇总,如某个特定时间段,某个部门,某个地区,等等,
求每个部门的基本工资平均值
Select avg(基本工资) from 员工表 where 部门='人事部'
 所以这个语句已经不行了。可以实现但是功能有限了。大家想想,在多个类似的数据集合进行统计时,不得不输入大量很类似的语句.要使用大量的代码,所以SQL SERVER就不再使用where语句.此时应该使用GROUP BY 短句.则如下:
SELECT  相关字段信息 FROM 表名  GROUP 字段名
如:
求每个部门的基本工资平均值
Select  部门,avg(基本工资) from 员工表  group by 部门
只是注意在字段名列表中只能是相关字段信息,不能含有多余的字段,否则报错!