SQL語言是通用的數據庫語言數據庫
SQL命令可分爲數據定義語言、數據操縱語言、事務控制語言和數據控制語言函數
Oracle支持的數據類型包括字符、數值、日期時間、RAW和LOB等學習
僞列:ROWID、ROWNUM排序
數據完整性:實體完整性、域完整性、引用完整性、自定義完整性事務
一、選擇無重複的行,使用distinct關鍵字ci
select distinct sclass from student;table
二、給列指定別名class
select cid as 課程號,cname as 課程名 from course;select
三、對查詢結果進行排序 order by 排序字段 排序方式分頁
select * from score where sid='10011' order by score desc;
四、模糊查詢:字段 like 匹配表達式
%:0個或多個字符
_:任意單個字符
select * from student where sname like '張%';
五、利用現有的表建立表
create table <new_table_name> as select column_names from <old_table_name>;
例如:create table stubak as select * from student;
create table stuclass as select * from student where sclass=1;
create table stuemp as select * from student where 1=2;
聯接查詢(多表)
交叉聯接(cross join)
select 列名列表 from T1 cross join T2;
一個交叉聯接(cross join)接收兩個分別有N行和M行的表T1和T2,而後返回一個包含交叉乘積N×M條記錄的聯接表
例如:知道學生與課程有多少可能的組合:select * from student cross join course;
也能夠不適用join:select * from student,course;
內聯接(等值聯接)
例如:查詢學生整體學習狀況:學生姓名,課程名,成績
select sname,cname,score from t_student join t_score on t_student.sid=t_score.sid join t_course on t_course.cid=t_score.cid;
或者:select sname,cname,score from t_student,t_score,t_coure where t_student.sid=t_score.sid and t_coure.cid=t_score.cid;
外聯接
例如:內聯接查詢教師和課程的對應狀況
select * from teacher join teachcourse on teacher.tid=teachcourse.tid;
查看全部教師的工做分配狀況,即沒有課程的教師也要出如今查詢結果中,此時就用外聯接
select * from teacher full join teachcourse on teacher.tid=teachcourse.tid;
左外聯接left
右外聯接right
全聯接
分組聚合
SQL中提供得聚合函數 Min、Max、Sum、Avg、Count
對記錄分組經過關鍵字group by 實現
select sid, max(score) as maxscore, min(score) as minscore, sum(score) as totalscore, avg(score) as avgscore from t_score group by sid;
Having子句
Having子句主要用於聚合查詢中,在group以後過濾那些不符合條件的組
例如:平均成績超過75的學生的學號和平均成績
select sid,avg(score) as avgscore from t_score group by sid having avg(score)>=75;
子查詢
例如:查詢比大山老師年齡大的教師的信息
select * from teacher where tage > (select tage from teacher where tname='大山');
[not]in子查詢 適用於子查詢中返回多個值時的狀況
select 列名 from 表名 where 列名 [not] in (子查詢)
例如:查詢全部已經安排教師上課的課程信息
select * from course where cid in (select cid from teachcourse);
exists子查詢:存在查詢,子查詢不返回任何結果,只產生邏輯真或邏輯假
select 列名 from 表名 where [not] eaists (子查詢)
例如:查詢全部已經安排教師上課的課程信息
select * from course where exists (select * from teachcourse where teachcourse.cid=course.cid);
在from裏面的子查詢
當子查詢返回一個結果集時,那麼它就至關於一個普通的表,因此,在from子句咱們一樣可使用子查詢
在成績表中查詢出全部學生的最高平均分
select max(avgscore) from (select avg(score) as avgscore from t_score group by sid);
分頁查詢:rownum僞列
select * from (select rownum as num,sid,sname,ssex,sclass from t_student) where num>=11 and num<=20;