sql简单查询

  用了C#、PHP、Java等开发一些东西,感觉sql很重要,不管对功能或性能上都需要精益求精的操作数据库,而此时程序员对sql语句的掌握尤其重要,很多时候如果不知道一些关键字查询,只知道简单的select和连接查询,或许在做东西的时候,只需要一个多表连接查询就可以解决的,就会很笨重的写成先查询出一部分,然后做一个循环,在根据查询生成n个sql语句在查询出n个结果集,或为了避免重复全部查询之后,在用相关的语言来消除重复记录。如果你还停留在这个水平的话我建议还是把sql再深入学习一下吧,这样的水平根本拿不出手。

  这周看了《SQL完全手册》,看了前八章左右,很多都是以前常用的,以及没有技术含量的东西,不过也会忽略一些细节。大概整理了一些,不是很详细,供以后查询使用,也希望放在博客上对其他人有些帮助。

  

重复的记录(DISTINCT)

    select distinct field from table_name  可以避免查询出重复的field字段。

    与其对应的,也可以是默认的select all from。。。

 

搜索条件(where)

    比较测试:=、<>、<、>、<=、>=

        在sql的3值逻辑下,一个搜索条件可以产生TRUE、FALSE或者NULL值,只有其搜索条件产生TRUE的那些记录才被包含在查询结果中。

 

    范围测试(BETWEEN):

        select field from table_name (not) between .. and ...

        A BETWEEN B AND C == (A >= B) AND (A<=C)

        当按值的条件范围考虑搜索条件时,BETWEEN测试是一种较为简单的方法。

    组成员测试(IN)

        它测试一个数据值是否匹配一组目标值中的一个。

        eg:select field from table_name where field (not) in (value1,value2,value3)

        与BETWEEN测试一样,IN测试并不增加SQL的表达能力:

            X IN(A,B,C)  ==  (X=A) OR (X=B) OR (X=C)

    模式匹配测试(LIKE):

        通配符字符:

            1. % 匹配任何顺序的0个或多个字符

            2. _ 匹配任何单个字符

    转义字符

        有时需要查询的条件中包含sql内置的模式匹配字符,就需要使用转移字符进行表达,此时需要用ESCAPE制定自定义的转义符:

            select * from table_name where field like 'A$ %BC %' ESCAPE  '$'

 

    NULL值测试(IS NULL):

        select * from table_name where field is null;

        

    复合搜索条件(AND、OR和NOT)

    

    排序查询结果(ORDER BY):

        select * from table_name order by field1,field2...

        第一个排序项(field1)是主要的排序键,其后的是次要的排序键,当两个查询结果记录在主要排序键处有相同的值时,就按次要排序键排序。

        指定升序或降序:

            DESC    升序(默认)

            ASC     降序排序

            select field1,field2,(field3 - field2) from table_name order by field1 ASC, 3 DESC

            //第三个字段上降序排序,第一个字段(field1)上升序排序。

 

组合查询结果(UNION)

    需要把两个或更多的查询结果组成一个查询结果表。

    select * from table_name where condition1  UNION select * from table_name2 where condition2

     在由一个UNION操作组成的表中有几个重要的限制:

        1. 两个表必须包含同样数目的字段。

        2. 在第一个表中的数据类型必须与第二个表中对应的数据类型相同。

        3. 两个表都不能用ORDER BY字句排列。然而,组合后的查询结果可以排序。

    UNION操作消除了重复的记录,可以在UNION关键字之后指定ALL关键字。

    ORDER BY字句不能出现在由UNION操作组合的两个SELECT中,可以在第二个select后用ORDER BY,不过由UNION操作生成的字段是没有命名的。ORDER BY子句必须按字段编号制定字段来排序。

        select * from table_name where condition1  UNION ALL select * from table_name2 where condition2  ORDER BY 1,2

     可以使用多个UNION:

        A UNION (B UNION C)

        A(UNION B) UNION C

        (A UNION C )UNION B

posted @ 2012-08-11 17:17  非著名程序师  阅读(226)  评论(0编辑  收藏  举报