第一篇:黑馬程序員c語言教程:SQL函數(shù)
日期
Oracle 中的日期型數(shù)據(jù)實際含有兩個值: 日期和時間。默認(rèn)的日期格式是 DD-MON-RR.函數(shù)SYSDATE 返回: 日期 時間
在日期上加上或減去一個數(shù)字結(jié)果仍為日期。兩個日期相減返回日期之間相差的天數(shù)。
可以用數(shù)字除24來向日期中加上或減去小時。
日期的數(shù)學(xué)運(yùn)算
日期函數(shù)
轉(zhuǎn)換函數(shù)
隱式數(shù)據(jù)類型轉(zhuǎn)換
顯式數(shù)據(jù)類型轉(zhuǎn)換
第二篇:黑馬程序員c語言教程:SQL函數(shù)
大小寫控制函數(shù)
大小寫控制函數(shù)
字符控制函數(shù)
數(shù)字函數(shù)
ROUND 函數(shù)
TRUNC 函數(shù)
MOD 函數(shù)
第三篇:黑馬程序員c語言教程:SQL函數(shù)(7)
什么是分組函數(shù)
組函數(shù)類型
組函數(shù)語法
AVG(平均值)和 SUM(合計)函數(shù)
MIN(最小值)和 MAX(最大值)函數(shù)
COUNT(計數(shù))函數(shù)
DISTINCT(distinct)關(guān)鍵字
組函數(shù)與空值
在組函數(shù)中使用NVL函數(shù)
第四篇:黑馬程序員c語言教程:sql語言課堂強(qiáng)化
sql語言課堂強(qiáng)化 select a, b, c select.....(多個列)from.....一個表(多個表)where....(條件)group by...(分組)--難點 having......(分組過濾)order by 1(排序)
SQL語言是數(shù)據(jù)庫的“鍵盤”,請大家重視基本功的訓(xùn)練
課堂考試 9:10 左右 學(xué)員到我筆記本上 上機(jī)操作 求所有部門的平均獎金
select avg(nvl(comm, 0))from emp;
select avg(sal)from emp;求各部門的平均薪水
select deptno, avg(sal)from emp group by deptno
====>錯誤案例
select deptno, ename, avg(sal)from emp group by deptno /
select d from emp group by a, b, c 求各部門每個工種的平均薪水, 并顯示部門編號、工種、平均薪水
select deptno, job, avg(sal)
from emp group by deptno, job--先按deptno、job分組,出來n組數(shù)據(jù),在這個基礎(chǔ)之上,再進(jìn)行計算求各部門每個工種大于2000的薪水 select sal from emp where sal>2000
4-1 求各部門每個工種,平均薪水大于2000的薪水
select deptno, job, avg(sal)from emp group by deptno, job having avg(sal)>2000 求10號部門的平均工資(2種寫法)select deptno, avg(sal)from emp where deptno=10 group by deptno
select deptno, avg(sal)from emp group by deptno having deptno = 10 創(chuàng)建一個學(xué)生表
sid sname
email sex age 7 并向表中插入一條數(shù)據(jù)
create table student(sid number, sname varchar2(20), email varchar2(64), sex number,age number)insert into student(sid, sname, email, sex, age)values(1, 'tom11', '11@163.com', 1, 20)
//只顯示大于4個人的部門信息
select deptno, count(*)from emp group by deptno having count(deptno)> 4 /
--創(chuàng)建表
--1 查詢 員工號 姓名 月薪 年薪 年收入 部門名稱
select e.deptno, e.ename, e.sal, e.sal*12 yearsal,(e.sal*12+nvl(e.comm,0))incoming , d.dname from emp e, dept d where e.deptno = d.deptno
====>
---2 創(chuàng)建一個表, 把第一步驟查詢的信息,存放在另外一張表中 create table s1 as(select e.deptno, e.ename, e.sal, e.sal*12 yearsal,(e.sal*12+nvl(e.comm,0))incoming , d.dname from emp e, dept d where e.deptno = d.deptno)
create view myview1 as(select e.deptno, e.ename, e.sal, e.sal*12 yearsal,(e.sal*12+nvl(e.comm,0))incoming , d.dname from emp e, dept d where e.deptno = d.deptno)
create table empincome as
select e.empno, e.ename, e.sal, e.sal*12 annalsal, sal*12+nvl(comm, 0)income, d.dname from emp e, dept d where e.deptno = d.deptno;
--創(chuàng)建表的同時copy數(shù)據(jù)
第五篇:黑馬程序員c語言教程:Oracle簡介
9.通過子查詢建表 通過子查詢建表的例子
SQL>CREATE TABLE emp_41 AS SELECT id, last_name, userid, start_date FROM s_emp WHERE dept_id = 41;SQL> CREATE TABLE A as select * from B where 1=2;只要表的結(jié)構(gòu).10.用子查詢建表的注意事項
可以關(guān)連多個表及用集合函數(shù)生成新表,注意選擇出來的字段必須有合法的字段名稱,且不能重復(fù)。
用子查詢方式建立的表,只有非空NOT NULL的約束條件能繼承過來, 其它的約束條件和默認(rèn)值都沒有繼承過來.根據(jù)需要,可以用alter table add constraint ……再建立其它的約束條件,如primary key等.11.Foreign Key的可選參數(shù)ON DELETE CASCADE 在創(chuàng)建Foreign Key時可以加可選參數(shù): ON DELETE CASCADE它的含義是如果刪除外鍵主表里的內(nèi)容,子表里相關(guān)的內(nèi)容將一起被刪除.如果沒有ON DELETE CASCADE參數(shù),子表里有內(nèi)容,父表里的主關(guān)鍵字記錄不能被刪除掉.12.如果數(shù)據(jù)庫表里有不滿足的記錄存在,建立約束條件將不會成功.13.給表創(chuàng)建和刪除同義詞的例子 SQL> CREATE SYNONYM d_sum 2 FOR dept_sum_vu;SQL> CREATE PUBLIC SYNONYM s_dept 2 FOR alice.s_dept;SQL> DROP SYNONYM s_dept;
十、ORACLE里的數(shù)據(jù)字典
1.什么是數(shù)據(jù)字典?ORACLE的數(shù)據(jù)字典是數(shù)據(jù)庫的重要組成部分之一,它隨著數(shù)據(jù)庫 的產(chǎn)生而產(chǎn)生, 隨著數(shù)據(jù)庫的變化而變化, 體現(xiàn)為sys用戶下所有的一些表和視圖.2.數(shù)據(jù)字典里存了以下內(nèi)容: 用戶信息
用戶的權(quán)限信息
所有數(shù)據(jù)對象信息表的約束條件統(tǒng)計分析數(shù)據(jù)庫的視圖等 不能手工修改數(shù)據(jù)字典里的信息.16
J2EE @ zxw 3.常用的數(shù)據(jù)字典
Dictionary 存放所有數(shù)據(jù)表,視圖,同義詞名稱和解釋 Dict_columns 數(shù)據(jù)字典里字段名稱的和解釋 Dba_users 用戶 Dba_tablespaces 表空間
Dba_data_files 數(shù)據(jù)庫的文件 Dba_free_space 空閑表空間 Dba_rollback_segs 回滾段
User_objects 數(shù)據(jù)對象 User_constraints 約束條件 User_sequences 序列號 User_views 視圖 User_indexes 索引 User_synonyms 同義詞
Session_roles 用戶的角色 User_role_privs 用戶的角色權(quán)限 User_sys_privs 用戶的系統(tǒng)權(quán)限 User_tab_privs 用戶的表級權(quán)限 V$session 實時用戶情況 V$sysstat 實時系統(tǒng)統(tǒng)計 V$sesstat 實時用戶統(tǒng)計 V$sgastat 實時SGA使用 V$locked_object 實時鎖 V$controlfile 控制文件 V$logfile 日志文件 V$parameter 參數(shù)文件 4.數(shù)據(jù)字典的分類 數(shù)據(jù)字典四大類別
User_ 用戶下所有數(shù)據(jù)庫對象
All_ 用戶權(quán)限范圍內(nèi)所有的數(shù)據(jù)庫對象 Dba_ 所有的數(shù)據(jù)庫對象
V$Content$nbsp;統(tǒng)計分析數(shù)據(jù)庫的視圖 賦于oem_monitor權(quán)限非DBA用戶也可查詢V$*視圖
5.查詢數(shù)據(jù)字典
SQL> select * from dictionary where instr(comments,'index')>0;SQL> select constraint_name, constraint_type, 2 search_condition, r_constraint_name 3 from user_constraints 4 where table_name = ‘&table_name';十一.控制數(shù)據(jù)、INSERT(往數(shù)據(jù)表里插入記錄的語句)SQL> insert into 表名(字段名1, 字段名2, ……)values(值1, 值2, ……);SQL> insert into 表名(字段名1, 字段名2, ……)select(字段名1, 字段名2, ……)from 另外的表名 where 條件;可以用&標(biāo)記變量的方法多次輸入記錄
快速插入數(shù)據(jù)的方法, 一般用于大于128M的數(shù)據(jù)轉(zhuǎn)移 SQL> insert /*+ append */ into 表名
select * from 另外的用戶名.另外的表名 WHERE 條件;SQL> commit;注意事項:
用INSERT /*+ APPEND */ 的方法會對target_tablename產(chǎn)生級別為6的獨(dú)占鎖,如果運(yùn)行此命令時還有對target_tablename的DML操作會排隊在它后面, 對OLTP系統(tǒng)在用的表操作是不合適的。17
J2EE @ zxw 2.插入字符串類型的字段的注意事項: 字符串類型的字段值必須用單引號括起來, 例如: ’GOOD DAY’
如果字段值里包含單引號’ 需要進(jìn)行字符串轉(zhuǎn)換, 我們把它替換成兩個 單引號’ ’
字符串類型的字段值超過定義的長度會出錯, 最好在插入前進(jìn)行長度校驗 ‘’ 標(biāo)記是NULL, user 標(biāo)明當(dāng)前用戶
日期字段的字段值可以用當(dāng)前數(shù)據(jù)庫的系統(tǒng)時間SYSDATE, 精確到秒
用字符串轉(zhuǎn)換成日期型函數(shù)TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)TO_DATE()還有很多種日期格式, 可以參看ORACLE DOC.年-月-日 小時:分鐘:秒 的格式Y(jié)YYY-MM-DD HH24:MI:SS NSERT時最大可操作的字符串長度小于等于4000個單字節(jié), 如果要插入更長的字符串, 請考慮字段用CLOB類型, 方法借用ORACLE里自帶的DBMS_LOB程序包.3、UPDATE(修改數(shù)據(jù)表里記錄的語句)SQL> UPDATE 表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 條件;如果修改的值N沒有賦值或定義時, 將把原來的記錄內(nèi)容清為NULL, 最好在修改前進(jìn)行非空校驗;值N超過定義的長度會出錯, 最好在插入前進(jìn)行長度校驗.新功能,可以修改子查詢后的結(jié)果集
例子:SQL> update(select * from s_dept)set id=50 where id=60;
4、DELETE(刪除數(shù)據(jù)表里記錄的語句)SQL> DELETE FROM 表名 WHERE 條件;注意:刪除記錄并不能釋放ORACLE里被占用的數(shù)據(jù)塊表空間.它只把那些 被刪除的數(shù)據(jù)塊標(biāo)成unused.如果確實要刪除一個大表里的全部記錄, 可以用 TRUNCATE 命令, 它可以釋放占用的數(shù)據(jù)塊表空間
SQL> TRUNCATE TABLE 表名;此操作不可回退.5、SQL語句的分類 數(shù)據(jù)定義語言(DDL):create、alter、drop(創(chuàng)建、修改結(jié)構(gòu)、刪除)(其他:rename)數(shù)據(jù)操縱語言(DML):insert、delete、select、update(增、刪、查、改)(其他:truncate)
數(shù)據(jù)控制語言(DCL):grant、revoke(授權(quán)、回收)、set role 事務(wù)控制:commit、rollback、savepoint(其他:lock table、set constraint、set transaction)
審計控制:audit、noaudit 系統(tǒng)控制:alter system 會話控制:alter session 其他語句:comment(添加注釋)、explain plan、analyze、validate、call
6、ORACLE里事務(wù)控制 Commit 提交事務(wù) Rollback 回退事務(wù)
Savepoint 設(shè)置斷點, 在事務(wù)中標(biāo)記位置, 事務(wù)結(jié)束, 斷點釋放
事務(wù)結(jié)束的情況遇到commit或者rollback遇到DDL和DCL語句發(fā)現(xiàn)錯誤,如死鎖用戶退出
SQL*PLUS系統(tǒng)重啟或崩潰 7.DML操作的注意事項 18
J2EE @ zxw 以上SQL語句對表都加上了行級鎖, 確認(rèn)完成后, 必須加上事物處理結(jié)束的命令COMMIT 才能正式生效, 否則改變不一定寫入數(shù)據(jù)庫里.行級鎖也未能得到釋放.如果想撤回這些操作, 可以用命令 ROLLBACK 復(fù)原.在運(yùn)行INSERT, DELETE 和 UPDATE 語句前最好估算一下可能操作的記錄范圍, 應(yīng)該把它限定在較小(一萬條記錄)范圍內(nèi),.否則ORACLE處理這個事物用到很大的回退段.程序響應(yīng)慢甚至失去響應(yīng).如果記錄數(shù)上十萬以上這些操作, 可以把這些SQL語句分段分次完成, 其間加上COMMIT 確認(rèn)事物處理.太過頻繁的commit不好