1.要限制結(jié)果集中行的數(shù)量,可以使用 FETCH FIRST 子句,,例如:輸出前10行
SELECT * FROM staff FETCH FIRST 10 ROWS ONLY 2.HAVING 子句 常常與 GROUP BY 子句一起使用,,從而檢索出滿足特定條件的 組
的結(jié)果。 HAVING 子句可以包含一個或多個謂詞,將組的某一屬性與組的另一個 屬性或常量進(jìn)行比較,。例如: "SELECT sales_person, SUM(sales) AS total_sales FROM sales GROUP BY sales_person HAVING SUM(sales) > 25" 這個語句返回銷售總量超過 25 的銷售人員的列表,。 3.INSERT 語句用來在表或視圖中添加新的行。在視圖中插入一個新行也會在 視
圖基于的表中插入這一行,。 ● 使用 VALUES 子句為一行或多行指定列數(shù)據(jù),。例如:
INSERT INTO staff VALUES (1212,'Cerny',20,'Sales',3,90000.00,30000.00) 注意,連續(xù)使用 VALUES 插入多行數(shù)據(jù)時,,推薦使用下面的寫法,,可以獲得 更高的效率: INSERT INTO staff (id, name, dept, job, years, salary, comm) VALUES (1212,'Cerny',20,'Sales',3,90000.00,30000.00), (1213,'Wolfrum',20,'Sales',2,90000.00,10000.00) 可以指定完全選擇來標(biāo)識出要從其他表或視圖復(fù)制的數(shù)據(jù)。完全選擇 ( fullselect ) 是產(chǎn)生結(jié)果表的語句,。例如: CREATE TABLE pers LIKE staff INSERT INTO pers SELECT id, name, dept, job, years, salary, comm FROM staff WHERE dept = 38
4.UPDATE 語句用來修改表或視圖中的數(shù)據(jù),。通過指定 WHERE 子句,可以修改
滿足條件的每一行的一個或多個列的值,。例如: UPDATE staff SET dept = 51, salary = 70000 WHERE id = 750 多個列同時更新: UPDATE staff SET (dept, salary) = (51, 70000) WHERE id = 750 警告,! 如果沒有指定 WHERE 子句, DB2 就會更新表或視圖中的每一行,! update select
UPDATE tmp_khjldzb1 a SET a.newkhjl = (SELECT b.newkhjl FROM tmp_khjldzb b WHERE b.OLDKHJLID=a.OLDKHJLID FETCH FIRST 1 ROWS ONLY)
update select 連用時,,一定要保證a.newkhjl =唯一值。
5.DELETE 語句用來從表中刪除整行的數(shù)據(jù),。通過指定 WHERE 子句,,刪除滿足
條件的每一行。例如: DELETE FROM staff WHERE id IN (1212, 1213)
警告,! 如果沒有指定 WHERE 子句,, DB2 就會刪除表中的所有行! 6.MERGE 語句使用來自源表的數(shù)據(jù)更新目標(biāo)表或可更新視圖,。僅僅用一個操作 ,,
目標(biāo)表中與源表匹配的行就可以被更新或刪除,目標(biāo)表中不存在的行被插入,。 例 如: MERGE INTO employee AS e USING (SELECT empno, firstnme, midinit, lastname, workdept, phoneno, hiredate, job, edlevel, sex, birthdate, salary FROM my_emp) AS m ON e.empno = m.empno WHEN MATCHED THEN UPDATE SET (salary) = (m.salary) WHEN NOT MATCHED THEN INSERT (empno, firstnme, midinit, lastname, workdept, phoneno , hiredate, job, edlevel, sex, birthdate, salary) VALUES (m.empno, m.firstnme, m.midinit, m.lastname, m.workdept, m.phoneno, m.hiredate, m.job, m.edlevel, m.sex, m.birthdate, m.salary) 對上面 SQL 的解釋如下( Merge 操作對一些 SQL 老手來說都可能從來沒用
過呢):使用表 my_emp 聯(lián)合表 employee ,,根據(jù)兩個表的比照( ON e.empno = m.empno ),如果存在這樣的記錄,,則使用 表 my_emp 的 salary 值來更新表 employee 的 salary 的值,;如果不存在符合條件的記錄,則將表 my_emp 中的 數(shù)據(jù)插入到表 employee 中去,??梢岳斫鉃?先更新數(shù)據(jù),更新不了就插入數(shù)據(jù) ,。 7.假設(shè)您想在同一個工作單元( UOW )中給職員 000220 加薪 7% 并檢索她原 來
的工資,??梢允褂?數(shù)據(jù)修改 - 表引用 子句來實現(xiàn),這個子句是 SQL 語句中 FR OM 子句的一部分,。 SELECT salary FROM OLD TABLE ( UPDATE employee SET salary = salary * 1.07 WHERE empno = '000220'); 數(shù)據(jù)修改操作(插入,、更新或刪除)的目標(biāo)中的列變成中間結(jié)果表中的列, 可以在查詢的選擇列表中按名稱引用這些列(在這個示例中是 Salary ),。 插入,、更新或刪除 沒有執(zhí)行,查出結(jié)果為舊表結(jié)果,。把括號外語句注釋了,,插入、更新或刪除才能執(zhí)行,。
SELECT salary FROM NEW TABLE (
UPDATE employee SET salary = salary * 1.07 WHERE empno = '000220'); 查看到預(yù)期的結(jié)果,,但實際employee的數(shù)據(jù)沒有任何該表。
8.查看存儲過程語句
select text from syscat.procedures where procname='PROC1';
9.查看表結(jié)構(gòu)
describe table user,;
10.查看表的索引信息 db2 "select colnames from syscat.indexes where tabname=
'TB_CLEAR_MATCH_DETAIL? ” 11.表重命名
db2 rename table tb_branch to tb_branch_bak
12.日程安排提前五分鐘提醒
SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5 13.查詢存在 SELECT 1 as a FROM A a1 WHERE EXISTS (SELECT * FROM A a2 WHERE a1.name=a2.name and name='輸入內(nèi)容'); 執(zhí)行效率比count(*)高點,避免全表查詢,。當(dāng)用戶名存在,,a的值為1,當(dāng)用戶名不存在,,a的值為NULL,。 |
|
來自: java程序員879 > 《SQL》