關於SQL語句的一些細節,SQL語句細節
一、插入insert
1、主鍵對資料插入的影響
主鍵是在同一張表中必須是唯一的, 如果在進行資料插入的時候指定的主鍵與表中已有
的資料重複的話則會導致違反主鍵約束的異常。
2、外鍵對資料插入的影響
外鍵是指向另一個表中已有資料的約束, 因此外鍵值必須是在目標表中存在的。 如果插
入的資料在目標表中不存在的話則會導致違反外鍵約束異常。
二、update更新:
1、非空約束對資料更新的影響
正如 “非空約束” 表達的意思, 如果對一個欄位添加了非空約束, 那麼我們是不能將這
個欄位中的值更新為 NULL 的。
2、主鍵對資料更新的影響
主鍵是在同一張表中必須是唯一的, 如果在進行資料更新的時候指定的主鍵與表中已有
的資料重複的話則會導致違反主鍵約束的異常。
3、外鍵對資料更新的影響
外鍵是指向另一個表中已有資料的約束, 因此外鍵值必須是在目標表中存在的。 如果更
新後的資料在目標表中不存在的話則會導致違反外鍵約束異常。
三、檢索
1、count(*) 和count(欄位) 不相同
如果某欄位為NULL,count 該列不會將空欄位算入其中
關於SQL一些常用語句
(1) 資料記錄篩選:
sql="select * from 資料表 where 欄位名=欄位值 order by 欄位名 "
sql="select * from 資料表 where 欄位名 like ‘%欄位值%‘ order by 欄位名 "
sql="select top 10 * from 資料表 where 欄位名 order by 欄位名 "
sql="select * from 資料表 where 欄位名 in (‘值1‘,‘值2‘,‘值3‘)"
sql="select * from 資料表 where 欄位名 between 值1 and 值2"
(2) 更新資料記錄:
sql="update 資料表 set 欄位名=欄位值 where 條件運算式"
sql="update 資料表 set 欄位1=值1,欄位2=值2 …… 欄位n=值n where 條件運算式"
(3) 刪除資料記錄:
sql="delete from 資料表 where 條件運算式"
sql="delete from 資料表" (將資料表所有記錄刪除)
(4) 添加資料記錄:
sql="insert into 資料表 (欄位1,欄位2,欄位3 …) valuess (值1,值2,值3 …)"
sql="insert into 目標資料表 select * from 來源資料表" (把來源資料表的記錄添加到目標資料表)
(5) 資料記錄統計函數:
AVG(欄位名) 得出一個表格欄平均值
COUNT(*|欄位名) 對資料行數的統計或對某一欄有值的資料行數統計
MAX(欄位名) 取得一個表格欄最大的值
MIN(欄位名) 取得一個表格欄最小的值
SUM(欄位名) 把資料欄的值相加
引用以上函數的方法:
sql="select sum(欄位名) as 別名 from 資料表 where 條件運算式"
set rs=conn.excute(sql)
用 rs("別名") 擷取統的計值,其它函數運用同上。
(5) 資料表的建立和刪除:
CREATE TABLE 資料表名稱(欄位1 類型1(長度),欄位2 類型2(長度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 資料表名稱 (永久性刪除一個資料表)
(6) 記錄集對象的方法:
rs.movenext 將記錄指標從當前的位置向下移一行
rs.moveprevious 將記錄指標從當前的位置向上移一行
rs.movefirst 將記錄指標移到資料表第一行
rs.movelast 將記錄指標移到資料表最後一行
rs.absoluteposition=N 將記錄指標移到資料表第N行
rs.absolutepage=N 將記錄指標移到第N頁的第一行
rs.pagesize=N 設定每頁為N條記錄
rs.pagecount 根據 pagesize 的設定返回總頁數
rs.recordcount 返回記錄總數
rs.bof 返回記錄指標是否超出資料表首端,true表......餘下全文>>
找一些經典的SQL語句,詳細說明功可以
1、串連資料庫
(運行SQL*Plus,使用SCOTT/TIGER)
2、簡單查詢
SQL> select table_name
from user_tables;
運行結果如下:
TABLE_NAME
SALGRADE
BONUS
EMP
DEPT
SQL> select * from emp;
3、格式化使用者結果
SQL> select ename,sal
from emp
where ename like 'A%';
請嘗試一下,如果將上述語句中的'A%'替換為'a%',看看會出現什麼結果。
如果只是將select替換成SELECT,看看又會出現什麼效果。
SQL> column sal format $9,999.99
SQL> select ename,sal
from emp
where ename like 'A%';
請注意觀察結果和剛才有什麼不同。
如果將$符號替換為¥,看看會出現什麼結果。
SQL> describe user_objects
SQL> select object_type,object_name
from user_objects
order by object_type,object_name;
SQL> column object_name format a30
SQL> run
請注意觀察兩次啟動並執行結果有何不同。
SQL> set pause on
SQL> select *
from emp;
SQL> set pause off
4、設定使用者頁面大小
SQL> set pagesize 10
SQL> select rownum,object_name
from all_objects
where rownum < 20;
請注意觀察每一批的記錄有幾條,考慮一下為什麼會出現這種情況?
SQL> show linesize
SQL> set linesize 200
SQL> select * from emp;
5、FEEDBACK(在查詢末尾輸出一行,用來指出查詢中返回的記錄數量)
SQL> show feedback
SQL> select empno,ename,job
from emp
where rownum < 7;
SQL> set feedback off
SQL> select empno,ename,job
from emp
where rownum < 7;
請注意觀察兩次啟動並執行結果有何不同。
SQL> set feedback 3
SQL> select empno,ename,job
from emp
where rownum < 3;
SQL> select empno,ename,job
from emp
where rownum < 4;
再看看結果有何不同,仔細體會FEEDBACK的作用。
6、更換顯示輸出
SQL> create table t(x number);
SQL> insert into t values......餘下全文>>