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