-- Create table /*create table TEST_TABLE ( STUDENT VARCHAR2(200), SUBJECT VARCHAR2(200), GRADE NUMBER ) tablespace SYSTEM pctfree 10 pctused 40 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); */ /*insert into test_table(student , Subject , grade) values('張三' , '語文' , 80) insert into test_table(student , Subject , grade) values('張三' , '數學' , 70) insert into test_table(student , Subject , grade) values('張三' , '英語' , 60) insert into test_table(student , Subject , grade) values('李四' , '語文' , 100) insert into test_table(student , Subject , grade) values('李四' , '數學' , 80) insert into test_table(student , Subject , grade) values('李四' , '英語' , 90) go */ --oracle中Decode()函數使用 然后將這些累計求和(sum部分) select t.student AS 姓名,sum(decode(t.subject,'語文',grade,null))語文 ,sum(decode(t.subject,'數學',grade,null)) 數學 ,sum(decode(t.subject,'英語',grade,null)) 英語 from test_table t group by student --靜態SQL,指subject只有語文、數學、英語這三門課程。 select student 姓名, max(case subject when '語文' then grade else 0 end) 語文, max(case subject when '數學' then grade else 0 end) 數學, max(case subject when '英語' then grade else 0 end) 英語 from test_table group by student /* 姓名 語文 數學 英語 ---------- ----------- ----------- ----------- 李四 100 80 90 張三 80 70 60 */ --動態SQL,指subject不止語文、數學、英語這三門課程。 sql server 下測試 declare @sql varchar(8000) set @sql = 'select student as ' + '姓名' select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then grade else 0 end) [' + Subject + ']' from (select distinct Subject from test_table) as a set @sql = @sql + ' from test_table group by student' exec(@sql) having子句可以過濾組函數結果或是分組的信息,且寫在group by子句后 模糊查詢 以及排序 select username,userno,userpassword from userinfo t where username like '%a%' group by username,userno,userpassword having(userno)>40 order by username desc 數量關系: 多對一關系 一對多關系 一對一關系 多對多關系 第一范式,所有的屬性都必須是單值,也就是屬性只表示單一的意義。(記錄可以重復,沒有任何限制) 第二范式,屬性要求唯一且非空,(記錄不可重復,但是數據可能會出現冗余)。 第三范式,非主屬性只能依賴於主屬性,不能依賴於其他非主屬性。(解決數據冗余問題) 一個表中只能存儲一個LONG類型 CLOB 存儲大的文本對象 BLOB 存儲大的二進制對象 Oralce支持級聯刪除,不支持級聯更新