您的位置:首页 > 数据库

编写SQL注意事项----一天一句(一)

2012-07-31 10:38 218 查看
      2012-07-31:

    每次写完存储过程或一些SQL语句,老同事一眼就能看出问题所在,还是咱不认真造成的。今日记下以防后面范同样的错误。

        1. 定义新的数据列,确定其数据类型,以免程式中计算错误。

             创建总金额栏位,cast(SUM(A.iQty*isnull(A.dPrice,0)) as decimal(18,2)) AMT  ,之前未设定AMT的小数点栏位。在个别DB设计者有时会将数量或单价设置为real 类型。在SQLServer中 real类型的数据通过公式计算,小数点位数是不定长的。

       2.在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:

           LEFT JOIN 或 LEFT OUTER JOIN。 左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

         RIGHT JOIN 或 RIGHT OUTER JOIN。

          右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

          FULL JOIN 或 FULL OUTER JOIN。 完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

         交叉联接。

         交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。

  

      eg1: Join

       select * from T_Tab A 
join T_Tabs B on A.iBID=B.iD

       显示内容为:A表与B表中符合A.iBID=B.iD的数据信息,若无信息,则为整个数据集为空

      eg2:Left Join  or Lefter outer Join

       select * from T_Tab A left  joinT_Tabs Bon A.iBID=B.iD

       显示内容为:A表所有的数据信息+符合A.iBID=B.iD的数据信息。若没有A.iBID=B.iD的数据,则显示出A表数据+B表(NULL)的数据信息。

 

      3.INNER JOIN 运算

         组合两个或多个表中的记录,只要在公共字段之中有相符的值。

        多表联接建立记录集是十分有用的,因为某些情况下,我们需要把数字数据类型显示为相应的文本名称,这就碰到了多表联接建立记录集的问题。

       注重事项:

  ●在输入字母过程中,一定要用英文半角标点符号,单词之间留一半角空格;

  ●在建立数据表时,假如一个表与多个表联接,那么这一个表中的字段必须是“数字”数据类型,而多个表中的相同字段必须是主键,而且是“自动编号”数据类型。否则,很难联接成功。

  ●代码嵌套快速方法:如,想连接五个表,则只要在连接四个表的代码上加一个前后括号(前括号加在FROM的后面,后括号加在代码的末尾即可),然后在后括号后面继续添加“INNERJOIN表名XON表1.字段号=表X.字段号”代码即可,这样就可以无限联接数据表了:)

       语法格式:

  其实INNERJOIN……ON的语法格式可以概括为:

  FROM((( 表1 INNER JOIN  表2  ON表1.字段号=表2.字段号)  INNER  JOIN  表3  ON  表1.字段号=表3.字段号)   INNER  JOIN表4 ON   Member.字段号=表4.字段号)  INNER   JOIN表X   ON   Member.字段号=表X.字段号

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql sqlserver 存储