sql中的注意点

来源:互联网 发布:lr mac中文破解版下载 编辑:程序博客网 时间:2024/06/05 05:55

1.order by 子句的位置;在指定一条order by 子句时,应该保证它是select语句中最后一条子句。如果它不是最后一条子句,将会出现错误信息。

2.通常order by子句中使用的列将是为显示而选择的列。但是,实际上并不一定要这样,用非检索的列排序数据完全是合法的。

SELECT prod_id,prod_name,prod_price FROM products ORDER BY prod_price,prod_name; 


3.在按多个列排序时,排序的顺序完全按规定进行。换句话说,对于上述例子中的输出,仅在多个行具有相同的prod_price值时才对产品按prod_name进行排序。如果prod_price列中的所有的值都是唯一的,则不会按prod_name排序。


4.如果想在多个列上进行降序排序,必须对每一列指定desc关键字。


5.何时使用引号? 在where子句中,会看到有点值括在单引号内,而有的值未括起来。单引号用来限定字符串。如果将值与字符串类型的列进行比较,就需要限定引号。用来与数值列进行比较的值不用引号。


6.要检查某个范围的值,可以使用between操作符。在使用between时,必须设定两个值—所需范围的低端值和高端值。这两个值必须用and关键字分割。between配置范围中所有的值,包括指定的开始值和结束值。


7.NULL值检查:NULL(无值),它与字段包含0、空字符串或仅仅包含空格不同。通过where 字段名 is null 来判断是否为null。


8.where子句中的求值优先级:圆括号 > AND > OR 说明:任何时候使用具有AND和OR操作符的where子句时,都应该使用圆括号明确分组操作符。


9.where子句中的not操作符有且只有一个功能,就是否定其后所跟的任何条件。

select prod_name from products where not vend_id = 'DLL01' order by prod_name;

10.通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符操作。最常用的通配符是百分号(%),百分号表示任何字符出现任意次数。

11.请注意后面所跟的空格。许多的DBMS都用空格来填补字段的内容。例如,某列有10个字符,而存储的文本为key(3个字符),则为填满该列需要在文本后面附加7个空格。这样做一般对数据极其使用没有影响,但是对例如’k%y’这样的sql语句有负面影响。如果值后面跟空格,则不是以y结尾,所以就不会检索出来,简单的解决办法就是给搜索模式再加一个%,’k%y%’

12.请注意NULL。通配符%看起来像是可以匹配任何东西,但有个例外,这就是null。如果在DDL中的某个字段使用了null,那么通过like ‘%’进行搜索时就不会匹配到为null的行。

13.sql中的通配符,分别是 %、_(?(Access中使用))、[] 其中最常使用的是%

14.db2不支持 ‘_’ 通配符。

15.拼接:将值联结到一起(将一个值附加到另一个值)构成单个值。解决办法是把两个列拼接起来。在Access和SQL Server中使用 + 拼接。db2、oracle、postgresql、sqlite和open office base中使用 || 拼接。在mysql中使用concat函数拼接。

16.DBMS函数的差异举例
  1.提取字符串的组成:Access使用mid();DB2、Oracle、PostgreSQL和SQLite使用substr();MySQL和SQL Server使用substring()
  2.数据类型转换:Access和Oracle使用多个函数,每种类型的转换有一个函数;DB2和PostgreSQL使用cast();Mysql和SQL Server使用convert()
  3.取当前日期:Access使用now();DB2和PostgreSQL使用current_date;Mysql使用curdate();Oracle使用sysdate;SQL Server使用getdate();

17.SQL聚集函数

avg()    返回某列的平均值; avg()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个avg()函数。avg()函数忽略列值为null的行。count()  返回某列的行数; count()函数有两种使用方式:count(*)对表中行的数目进行计数,不管表列中包含的是空值(null)还是非空值。使用country(column)对特定列中具有值的行进行计数,忽略null值。max()    返回某列的最大值; 虽然max()一般用来找出最大的数值或日期值,但许多(并非所有)DBMS允许将它用来返回任意列中的最大值,包括返回文本中的最大值。在用于文本数据时,max()返回按该列排序后的最后一行。max()函数忽略列值为null的行。min()    返回某列的最小值; min()函数和max()函数的说明相同。sum()    返回某列值之和; sum()函数忽略列值为null的行。


18.having和where的差别:这里有另外一种理解方法,where在数据分组前进行过滤,having在数据分组后进行过滤。这是一个重要的区别,where排除的行不包括在分组中。这可能会改变计算值,从而影响having子句中基于这些值过滤掉的分组。having和where非i鹅肠类似,如果不指定group by,则大多数DBMS会同等对待它们。不过,你自己要能区分这一点。使用having时应该结合group by 子句,而where子句用户标准的行级过滤。


19.select子句极其顺序

子句            说明                   是否必须使用select      要返回的列或者表达式             是from        从中检索数据的表            仅在从表中选择数据时使用where       行级过滤                       否group by    分组说明                   仅在按组计算聚集时使用having      组级过滤                       否order by    输出排序顺序                    否


20.作为子查询的select语句只能查询单个列。企图检索多个列将返回错误。


21.联结表:在联结两个表时,实际要做的是将第一个表中的每一行与第二个表中的每一行配对。where子句作为过滤条件,只包含那些匹配给定条件的行。如果表的联结没有where子句,则会产生笛卡尔积。


22.内联结:等值联结(如where a.id = b.id)它基于两个表之间的相等测试,这种联结也称为内联结(inner join)。

语法:A表 inner join B表 on 联结条件举例:    select vend_name,prod_name,prod_price from Vendors inner join Products on Vendors.vend_id = Products.vend_id;
0 0
原创粉丝点击