什么是sql
SQL是結(jié)構(gòu)化查詢語句(Structured Query Language)
SQL是用于訪問和處理數(shù)據(jù)庫的標(biāo)準(zhǔn)的計算機(jī)語言
不同廠商在標(biāo)準(zhǔn)規(guī)范基礎(chǔ)上進(jìn)行了修改和擴(kuò)展及刻,略有不同。
SQL大小寫不敏感
1.SQL編寫----查詢語句-語法
SELECT
[DISTINCT]? 顯示字段列表
[FROM 單表或多表關(guān)聯(lián)
[WHERE 行記錄過濾條件]
[GROUP BY 分組字段]
[HAVING 條件]
[ORDER BY 排序字段]
[LIMIT 保留記錄數(shù)或區(qū)間]
(一)查詢所有學(xué)生的成績表
1.select * from score竞阐;
(二)查詢所有學(xué)生及其考試科目信息(不去重)
select mid , sid, cid from score;
(三)查詢學(xué)生表所有學(xué)生姓名及考試和性別暑劝,要求結(jié)果中列表標(biāo)題為 “姓名”骆莹、“性別”
select sname 姓名,gender as 性別 from student
(四)關(guān)鍵字distinct(去重)查詢成績表中成績担猛,根據(jù)根據(jù)學(xué)號去重
select distinct? sid from score;
(五)查詢學(xué)生表中zhangsan的信息? (查詢語句 ----- where 單條件)
select * from student where sname = "zhangsan"
(六)查詢學(xué)生表不是中zhangsan的信息? (查詢語句 ----- where? (not) )
select * from student where not sname = "zhangsan"
(七)查詢查詢成績表學(xué)號為1并且分?jǐn)?shù)為80的成績? (查詢語句 -----where 多條件(and))
select *? from score where sid ="1" and score ="80"
(八)查詢所有學(xué)號為1和為2的科目的成績信息 (查詢語句----- where多條件(or)
select * from score? where sid ='1' or sid ='2';同時也等價于select * from score where sid in ('1', '2');
(九)查詢姓zhang san 同學(xué)的成績信息
select * from score? where sname like "%zhang%" (查詢語句 ----- where條件(like)
(十)查詢每位學(xué)生的平均成績
select sid , avg(score)as 平均成績 from score group by? sid; (查詢語句 -----group by)
平時在測試工作過程中使用的聚合函數(shù)有:求和:sum(字段)幕垦,最大/最小值:max(字段)min(字段),記錄條數(shù):count(*)
(十一)查詢平均成績不低于85的學(xué)生及成績
selelct sid , avg(score) as 平均成績 from score group by sid having avg(score) >= 85; (查詢語句 ------ having)
(十二)查詢成績信息傅联,要求按學(xué)號降序排序
select * from score order by sid desc ; (查詢語句 ----- order by)
(十三)查詢成績信息先改,要求按學(xué)號降序排序,成績升序排序
select * from score order by sid desc, score asc;? (查詢語句 -----order by 多字段)
(十四)根據(jù)學(xué)號排序查詢前三名的學(xué)生成績信息
select sid , score from score where sid in ('1', '2','3') order by score desc limit 3; (SQL編寫-----limit)
(十五)查詢平均分高于85的學(xué)生學(xué)號及平均分蒸走,要求平均分降序排列
select sid , avg(score) as 平均成績 from score??where sid in ('1', '2','3') group by sid having avg(score)>85 order by avg(score) desc;
2.SQL編寫 ----- 插入語句insert?
(一)INSERT INTO 表名稱 VALUES(值1仇奶,值2,.........)
(二) 也可以指定字段插入(未指定字段按默認(rèn)值設(shè)置
)INSERT INTO 表名稱(列1比驻,列2该溯,....)VALUES(值1,值2,.....)
例如:將一班李四的英語成績88插入
insert into tb_score (name ,class subject, score )value ('李四', '一班', '英語', '88');等價于
insert into tb_score value ("李四","一班", "英語", "88");
3.SQL編寫 ----- 修改語句update
(一)APDATE 表名稱 SET 列名稱 = 新值 WHERE 條件别惦;
例如:在一張成績表中將所有數(shù)學(xué)成績減去5分
update t_score set score = score -5 where subject = "數(shù)學(xué)"
4.SQL編寫 ----- 刪除語句delete
(一)DELETE? FROM 表名稱 WHERE 條件狈茉;
(二)TRUNCATE 可以全表數(shù)據(jù)清空,效率高掸掸,但缺點是不能回滾氯庆。語法:truncate table 表名稱;
例如:將成績表里所有的數(shù)學(xué)成績刪除
delete from t_score where subject ="數(shù)學(xué)"扰付;
5.SQL編寫--表連接--交叉連接
例如:一張學(xué)生表(t_student)堤撵,一張獲獎信息表(t_honors)?
交叉連接的關(guān)鍵字:cross join
例如:select * from t_student cross ioin t_honors;
6.SQL編寫---表連接--內(nèi)連接
例如:一張學(xué)生表(t_student),一張獲獎信息表(t_honors)?
交叉連接的關(guān)鍵字:inner join
例如:select * from t_student as a inner join t_honors as b? on a.id=b.id;
7.SQL編寫---表連接--自然連接
例如:一張學(xué)生表(t_student)羽莺,一張獲獎信息表(t_honors)
交叉連接的關(guān)鍵字:nature? join
例如:select * from t_student as anature? join t_honors as b? on a.id=b.id;
8.SQL編寫---表連接--左連接
例如:一張學(xué)生表(t_student)粒督,一張獲獎信息表(t_honors)
交叉連接的關(guān)鍵字:left? join
例如:select * from t_student as? a left join?t_honors as b? on a.id=b.id;
9.SQL編寫---表連接--右連接
例如:一張學(xué)生表(t_student),一張獲獎信息表(t_honors)
交叉連接的關(guān)鍵字:right? join
例如:select * from t_student as? a right? join?t_honors as b? on a.id=b.id;
10.SQL編寫---表連接--全連接
例如:一張學(xué)生表(t_student)禽翼,一張獲獎信息表(t_honors)
交叉連接的關(guān)鍵字:full? join
例如:select * from t_student as? a?full?join?t_honors as b? on a.id=b.id;
11.數(shù)據(jù)庫基本概念----索引
索引是為了加速對表中數(shù)據(jù)行的檢索而創(chuàng)建的一種分散的存儲結(jié)構(gòu)
優(yōu)點:加快查詢屠橄,排序和分組的速度
缺點:表數(shù)據(jù)新增族跛,修改,刪除時索引頁需要更新锐墙。頻繁變動的表不適合設(shè)置索引礁哄。
12.數(shù)據(jù)庫基本概念----視圖
視圖是查詢結(jié)果集,使用上同表溪北,是一種虛擬表
創(chuàng)建學(xué)生表和成績表的視圖
例如:create view aaa as
select a.sname, b.score from student as a? right? join score as b on a.sid=b.sid;
創(chuàng)建成功之后桐绒,我們就可以查詢創(chuàng)建的視圖表:select * from aaa
視圖的優(yōu)點:1.聚焦特定的數(shù)據(jù) 2.簡單操作 3.安全性 4.邏輯獨立性
13.數(shù)據(jù)庫基本概念-----存儲過程
存儲過程:一組為了完成特定功能的SQL語句集。通過指定存儲過程名及其參數(shù)(若有)來調(diào)用執(zhí)行它之拨。有
存儲過程:分為有參數(shù)和無參數(shù)兩種類型
(一)有返回值的例子:(計算depb1表的存款余額茉继,存儲過程函數(shù)名:sum_balance)
BEGIN?
# 存款余額求和后,保留兩位小數(shù)蚀乔,轉(zhuǎn)化為萬元返回
select? round(sum(balance) / 10000,2) into @aa form depb1;
RETURN @aa;
END
select? ?sum_balance()
(二)無返回值的例子:(更新余額利潤,存儲過程函數(shù)名:update_balance_rate?)
BEGIN?
# Routine body goes? here .....
update depe1?
set rate = rate * factor
where balance > threshold;
END
call?update_balance_rate(10000,1.1)
14.數(shù)據(jù)庫基本概念 ------觸發(fā)器
觸發(fā)器即一觸即發(fā)
包括:觸發(fā)條件(insert烁竭,update,delete/前吉挣、后)派撕、觸發(fā)動作
觸發(fā)器是一種特殊的存儲過程。
和存儲過程不同的是:不是調(diào)用執(zhí)行睬魂,而是觸發(fā)執(zhí)行终吼。
例如:1.修改學(xué)生表的學(xué)生名時,將其它表中的學(xué)生名同步修改氯哮;
例如:2.商品價格調(diào)整幅度超過30%時际跪,將該異常波動記錄到監(jiān)控表中;
例如:3.敏感數(shù)據(jù)被人修改后喉钢,在日志表中記錄操作信息垫卤。