SQL教程随看随记(四)

来源:互联网 发布:峰会知识网络竞赛 编辑:程序博客网 时间:2024/05/22 09:39

ORDER BY
基本格式:SELECT select_list FROM table_list [WHERE conditions] [ORDER BY column_name|alias|position [ASC|DESC]]
**ORDER BY 子句中可以包含多个元素,用逗号隔开。
**关键字ASC表示按照升序排列,默认的排列方式;关键字DESC表示按照降序排列。
**column_name表示列的名称,alias表示列或表达式的别名,position表示SELECT子句中代表位置的编码。
**使用表达式排序,SQL2中不允许,SQL3种允许,SQL SERVER中支持。
多级排序:按照排序列的顺序进行多次排序,可以指定每一次的排序方式
例:SELECT name,sex,id,salary FROM Employee ORDER BY salary DESC,id ASC,1 DESC
上例中首先对salary列进行降序排列,然后在此基础上对id列进行升序排列,再对name列进行降序排列

聚集函数
基本格式:function([DISTINCT] expression)
COUNT(*|column_name)--'*'为参数统计选择的记录个数,记录个数包含NULL在内,不与DISTINCT一起使用;column_name为参数,统计特定列中指的个数,忽略值为NULL的数据
SUM()--计算总和;AVG()--计算平均值;MAX()--确定最大值;MIN()--确定最小值
COUNT,SUM,AVG中可以使用DISTINCT关键字,SUM和AVG只能对数字类型的列使用。
AVG计算数目时,不会对NULL值进行任何处理。MIN和MAX在列中存有NULL值时不会返回NULL值。
在聚集函数中,各个函数使用DISTINCT关键字互不干扰。

GROUP BY
与聚集函数一起使用是对分组完毕后的每一组使用一次聚集函数。与WHERE子句一起使用,多次分组,与ORDER BY一起使用,与HAVING子句一起使用
例:SELECT num1,num2,SUM(num2),AVG(num3),COUNT(*)
        FROM test WHERE id>5
        GROUP BY num1,num2
        HAVING SUM(num2)>10
        ORDER BY num1 DESC
上例的执行顺序如下:首先执行WHERE子句查找符合条件的数据,然后根据num1进行第一次分组,再根据num2进行第二次分组,然后对分组后的每一组使用聚集函数进行运算,再使用HAVING子句筛选组,最后对结果按照num1的降序进行排列。上面的子句中除了WHERE外,出现在其中的列或表达式都必须SELECT子句中出现过。

COALESCE函数,用于将空值转化成特定值,在ORACLE中该函数成为NVL(),SQL SERVER中称为ISNULL()。
基本格式:COALESCE(column,value)

连接
两种实现方式: 一、传统的连接语法,使用FROM/WHERE语法。2、SQL连接语法:SQL提供了JOIN关键字来实现连接操作
SQL连接语法基本格式:
SELECT select_list FROM Table1name [CROSS|NATURAL] JOIN Table2name
[ON[Table1name.]column operator [Table2name.]column] [WHERE conditions]
选择了CROSS或者NATURAL关键字就不能使用ON关键字。单独使用JOIN关键字时需要使用ON关键字来设定连接的条件。使用CROSS JOIN时,需要设定WHERE子句,否则会返回表之间的每一种可能组合(即笛卡尔积)。NATURAL JOIN只有在两个表有相同的列使才能使用,将在同名列上进行连接。可以不用ON或者WHERE设定条件。
例:SELECT dnumber,name,sex,id,salary FROM Employee JOIN Department ON id=mgrid
        SELECT dnumber,name,sex,id,salary FROM Employee CROSS JOIN Department WHERE id=mgrid
        SELECT pnumber,accepter,budget FROM Project NATURAL JOIN Paccepter

SELECT列表中不需要包含用来连接的列。空值不参与连接,即使两个表的连接列都存在NULL,连接结果也不会存在NULL。

多表连接,多对多关系一般需要多表连接。
WHERE方式案例:SELECT name,id,dnumber,mgrid,pnumber,gross
                                    FROM Employee,Department,Project
                                    WHERE dno=dnumber AND pno=pnumber
JOIN方式案例:SELECT name,id,dnumber,mgrid,pnumber,gross
                              FROM Employee,Department ON dno=dnumber
                                           Employee,Project ON pno=pnumber
连接的处理步骤:首先为连接表生成笛卡儿积,然后使用WHERE子句从笛卡儿积中除去所有不符合条件的行,如果包含了GROUP BY子句,则按照GROUP BY对指定的列进行分组,如果有HAVING语句,就在执行HAVING子句。最后SELECT子句应用到剩下的数据中。

连接的种类:一般连接(包含相等连接,大于,小于连接等),自然连接(NATURAL JOIN),自连接(表与自己进行连接,一般需要采用一些筛选手段,得到需要的数据),外连接(在连接结果中包含某个表中不符合连接条件的数据)
外连接提供有三个关键字:LEFT OUTER JOIN(显示左边表的全部数据),RIGHT OUTER JOIN(显示右边表的全部数据),FULL OUTER JOIN(结合LEFT和RIGHT的结果)
使用外部连接后再用WHERE等筛选子句进行筛选后,不符合条件的,将以NULL呈现。
例:SELECT name,id,pnumber,pmgrid FROM Employee RIGHT OUTER JOIN Project
         ON pno = pnumber AND salary>3000.00

对集合的支持
UNION运算:并运算,将两个结果合并起来。
例: id  name  city  |  pnumber  accepter  city  |  id  name  city
--------------------------|---------------------------------- |------------------------
         1      李       京   |     101            联          港    |    1        李      京
                                   |                                              |   101    联      港
基本格式:SELECT select_list FROM table_list/view_list [WHERE conditions]
                                 UNION [ALL]
                                 SELECT select_list FROM table_list/view_list [WHERE conditions]
注意:满足列数目相等以及列对应类型兼容的规定。
ALL运算符,在没使用ALL运算符时使用UNION,会删除多个查询结果中重复的行,使用ALL则可以保留所有的行。
INTERSECT运算:交运算,基本格式同UNION
MINUS运算:差运算,返回在一个查询结果中存在,且不再另一个查询结果中存在的的所有行。
SQL SERVER中不支持INERSECT和MINUS运算符。

原创粉丝点击