SQL不太熟悉,写的时候总是会有这样那样的问题,先从点滴做起,记录一下遇到的小错误以及解决的办法,积累多了,错误也就少了。
SQL(Structed-Query-Language):结构化查询语言,并不是某一个数据库所特有的,而是针对很多的数据库管理系统(DBMS),它们都有自己的一套写法,有些写法是相同的,但是有些写法就不同,这就导致了可移植性比较差。具体情况具体分析。
一句正确的查询语句应该有几部分组成 : select ... from ... where ... ...
select后面是要查询的列,这些列可以是一张表里的,也可以是多张表里面的(要通过表名去查找,而且要连接表),也可以是构造的字段(例如将两个字段加起来,串起来,可以进行加减乘除运算得到新的字段名),用的比较多,也可以是表里的全部字段,用*通配符表示,但是如果需要查询的不是整个表,最好不好使用*,即使它简单方便,它会影响查询的性能,尤其是在表的字段特别多,而查询所需的仅仅是几个字段的情况下。也可以是通过函数计算出来的值。
如果是多个表里的字段,需要使用表的别名时,一定要保证列名前面是表的别名,不然会报不一致的表名。
如果需要给查询的列名重新命名,使用as 关键字。
在查询语句中的字段名会作为查出的表的字段名,确保在程序中使用的字段名和查出的表的字段名相同,否则会出错。
from后面跟着的是 表,这个表可以是已经确定的表,数据库中已经存在,也可以是一个 使用查询语句查出的临时表,也可以是多个表的连接,例如使用left join等关键字。总之,只要from后面是表就行。
where是查询条件,很灵活,可以跟很多种判定条件,判定条件也可以进行组合。
写SQL语句的时候要注意:
空格,有时并不是一次就写完的,而是要经过拼接,这时一定要注意字符串后面的和下一句的开头连在一起,会出错。所以每一句字符串后面跟上一个空格就可以保证不出错。
字符串类型的要加单引号。
如果使用临时表时,要注意给临时表起名字,例如:
SELECT TOP 页大小 *
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1
) A
WHERE RowNumber > 页大小*(页数-1)
A就是临时表的名字,不起则会报错。
如果查询时需要使用计算的,尽量使用SQL中自带的计算函数,在服务器中的计算速度远比在客户机中的计算速度,因为这些都是数据库服务器进行优化过的,例如要只要得到查询到的行数,只需使用count(),不需要将那些值都查出来再显示到客户端。count()计算出来的就一个值,而查询出来的表则有很多数据,而且都没有用,所以能使用自带函数的尽量使用。
如果SQL语句中有错误在程序调试时发现不了,可以将其放在SQL的查询窗口中进行查询,检查错误,这样效率要高一些。
SQL中的关键字不明白的,可在查询窗口中写出来按 F1 就会弹出SQL 的帮助文档