-----------------------------------参考《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;
执行结果如下所示: