Posted on 2010-07-11 15:43
斷點 閱讀(236)
評論(0) 編輯 收藏 所屬分類:
Oracle DBA
SQL語言共分為四大類:數據查詢語言DQL,數據操縱語言DML,數據定義語言DDL,數據控制語言DCL。
DML(data manipulation language):它們是SELECT、UPDATE、INSERT、DELETE,就象它的名字一樣,這4條命令是用來對數據庫里的數據進行操作的語言。
conn sys/sys as sysdba;
drop user pcisv6 cascade;
exp --備份scott用戶下的表
--創建用戶,identified為認證相當是密碼,quota配額就是分配空間。
create user pcisv6 identified by 11 default tablespace core6 quota 10M on corev6
grant create session,create table,create view to pcisv6; --授權,session是用于登錄的
imp --導入scott用戶下的表
SELECT:
select rownum r,ename from emp; --rownum行數,目前只能使用<、<=, 而沒有直接>、=的寫法。
select ename, sal --求薪水最高的前5人
from (select ename, sal from emp order by sal desc)
where rownum <= 5;
--求薪水最高的前6到10人
select ename,sal,rownum r from emp order by sal desc; --r 排序混亂
select ename,sal,rownum r from (select ename,sal from emp order by sal desc); --此時r序號按新表排序
select ename, sal -- 此處為結果
from (select ename, sal, rownum r
from (select ename, sal from emp order by sal desc))
where r >= 6
and r <= 10;
INSERT:
insert into dept values(50,'game','bj'); --整條記錄
rollback;
create table dept2 as selet * from emp; --創建dept2表
insert into dept2(deptno,dname) values(60,'game2'); --有選擇的字段插入
insert into dept2 select * from dept; --插入一個表, 2個表結構一樣
UPDATE:
update emp2 set sal=sal*12,ename=ename||'-' where deptno=10;
DELETE:
delete from dept2 where deptno<25;
rollback;
TRANSACTION:
transaction 起始一條dml語句,在commit、rollback時完成。
transaction 在執行dml后,在其后有執行了ddl、dcl時,事務自動提交。
在正常退出exit時,事務自動提交。
在非正常退出時,事務回滾。
------------------------------------------------------------
例子:
有3個表S,C,SC
S(SNO,SNAME)代表(學號,姓名)
C(CNO,CNAME,CTEACHER)代表(課號,課名,教師)
SC(SNO,CNO,SCGRADE)代表(學號,課號成績)
問題:
1,找出沒選過“黎明”老師的所有學生姓名。
2,列出2門以上(含2門)不及格學生姓名及平均成績。
3,即學過1號課程有學過2號課所有學生的姓名。
請用標準SQL語言寫出答案,方言也行(請說明是使用什么方言)。
1.
select sname froms
join sc on (s.sno = sc.sno)
join c(c.cno = sc.cno)
where c.cteacher <> 'liming';
2.
select sname
where sno in (select sno
from sc
where scgrade < 60
group by sno
having count(*) >= 2);
3.
select sname
where sno in (select sno
from sc
where cno = 1
and sno in (select sno from sc where cno = 2));