数据库知识点1

-----------------------------------参考《SQL基础教程》--孙淼,罗勇--------------

1、sql语句中的insert、update、select、delete语句,若并未特殊说明,其操作范围是整个数据表中的所有记录,这里特殊说明就是使用where等限定性语句对记录的操作范围进行限制,只对这些满足条件的记录进行操作。sql语句中也是蕴含着循环的,举个栗子,update LZ_OPT_ITEM  SET OPT_ID=1,REPAIR_RATE=0.5就会将数据表中OPT_ID,REPAIR_RATE两列的值一次性修改为1和0.5。



2、NULL

    当我们设计数据表时,如有图所示,有一列约束就是“是否可为null”,这里的null就是空白,只有当使用insert语句向数据表中插入一条记录时才会显示出它的意义。

当OPT_ID,REPAIR_RATE可以为“null”,即可以是“空白”是,以下insert语句才可运行。

INSERT INTO LZ_OPT_ITEM (SPARE_ID,STA_ID)VALUES(2,4);

语句向数据表插入一条记录,但只是向SPARE_ID,STA_ID插入了数据,并没有插入OPT_ID,REPAIR_RATE的值,我们就认为是值“空白”,因为OPT_ID,REPAIR_RATE可以是“空白”,所以这条语句可以顺利执行。如果OPT_ID,REPAIR_RATE也不可以是“null”,那么这条语句就不能通过执行,提示“缺少数据”。

3、逻辑运算符

    AND的优先级是高于OR的,有时候需要先判断OR再判断AND,这时候就使用()将OR包含起来,保证OR先执行。

4、联结

    联结就是以列为单位对若干表进行联结今儿组合成为一个新表。联结分为外联结,内联结以及交叉联结。

以下举一个交叉联结的例子:

SELECT STA_ID,STA_NAME,ITEM_ID,ITEM_NAME FROM ZX_STATION CROSS JOIN ZX_ITEM  WHERE PRO_ID=1 AND (H_ITEM_ID=1 OR H_ITEM_ID=2 OR H_ITEM_ID=6);

具体参考书籍《SQL基础教程》。

5、insert批量数据

    可以使用insert语句从其他表中直接复制数据到新表,即使用insert语句插入批量数据。分三步走:

第一步:

    设置除要批量插入的列之外的列可以为null。OPT_ID,STA_ID,SPARE_ID即是批量插入列。如图所示

第二步:

    使用insert语句批量复制其他表数据到目标数据表中。如图所示:

结果如下图所示:

第三步:

使用update语句可以一次性复制给余下的两列。sql语句:

UPDATE LZ_OPT_RESULT_SPARE set SPARE_QUANTITY=12,SPARE_COST=2000;

结果如下所示:


只是所有记录的后两列数值均相同。

6、GROUP BY

select 列表项中不存在的列可以出现在group by的列表项中,但反过来就不行了,在select列表项中出现的列必须全部出现group by后面(聚合函数除外)

7、层次化查询

    层次化查询的结果中,第一条记录到第n条依次是查询开始节点,此节点的上层节点,上层结点的上层节点。。。

就像查询北京的层次化,则结果是:

北京

中国

亚洲

全球

8、insert批量插入数据2

可以在select语句中写常量,直接将常量插入到新表中。

执行后的结果

9、三张表的内联结

目前一张表的数据如下所示:

需求是从表STATION中查找STA的名称以及从ITEM中查找SPARE的名称,然后与上表组合在一起,总而言之就是在上表的基础上记上两列,STA名称和Spare名称

SQL语句如下:

SELECT STA.STA_ID,STA.STA_NAME,SPARE.SPARE_ID,ITEM.ITEM_NAME,SPARE.SPARE_QUANTITY FROM ZX_STATION STAINNER JOIN LZ_OPT_RESULT_SPARE SPARE ON STA.STA_ID=SPARE.STA_ID
INNER JOIN ZX_ITEM ITEM ON ITEM.ITEM_ID=SPARE.SPARE_ID;

执行结果如下所示:







posted @ 2015-05-19 13:54  lz3018  阅读(186)  评论(0编辑  收藏  举报