sql必知必会(第四版) 学习笔记一
溫習(xí)一遍簡單的sql語法,把自己掌握還不夠的地方,做了些筆記....
1 去重復(fù)關(guān)鍵詞,distinct
??? select distinct sname from student;
?
2 限制結(jié)果top的用法
???? select top 5 id from student 獲取前五條記錄
?????可以利用top來寫sql分頁語句
?
3 排序order by
??? select * from student order by id,name desc;
??? 默認(rèn)是升序 asc,若是降序要在列名后標(biāo)明desc
??? order by語句在sql句尾,在where語句后面出現(xiàn)
?
4 where
?? 操作符 =,<> !=(不等于),>,>=,<,<=,!(不小于),!>(不大于)
???????????? BETWEEN......(在...之間)
????????????? is NULL(空值)
????? AND 條件與
????? OR?? 條件或?
????? 注意: and的結(jié)合優(yōu)先級高于or,所以where后面多條件時候最好用括號寫清楚
?
5 IN,NOT
???? select * from student
???? where id in(1,2,3)
??????where 條件中的NOT表明否定其后跟的任何條件,也就是篩選的是where條件外的數(shù)據(jù)
?
6?通配符匹配過濾
??? Like...模糊匹配
?? select * from student
??? where name like '汪%'
?? 選出汪姓 的同學(xué),其中 % 代表匹配任意次,_ 代表匹配單個字符,[]表示匹配中括號里面的字符
?
7 as 利用as起別名,簡便寫法
??
8 聚合函數(shù)
??? 利用一些簡單的聚合函數(shù)匯總數(shù)據(jù)
?? AVG()? 計算平均值
?? Count() 計算 個數(shù)
?? Max() 最大值
???Min() 最小值
?
9 分組數(shù)據(jù)
? select COUNT(*) as 人數(shù), Kind as 科目類型
??from Course
??Group by Kind
?
Having的用法,和where的區(qū)別就是where是在檢索時過濾行的,而Having是用來過濾分組的
如上,在sql句末加上,Having Count(*) > 2 那么就是要篩選出人數(shù)大于2的組了
?
另外一種理解,where是對數(shù)據(jù)分組前進(jìn)行過濾,而Having 是對數(shù)據(jù)分組后進(jìn)行過濾,where中排出的行就不包括在分組中了,從而影響到Having子句中基于這些值過濾掉的分組。
?
至此簡單回顧下select子句及其順序
? 句子?????????????????? 說明?????????????????????? 是否必須使用
---------?????? -----------------?????? -------------------------
select??????????? 要返回的列或者表達(dá)式???????? 是
from?????????????從中檢索數(shù)據(jù)的表??????????????? 僅在從表中選擇數(shù)據(jù)使用
where?????????? 行級的過濾????????????????????????? 否
group by???????分組說明???????????????????????????? 僅在按組計算聚合時使用
Having??????????組級過略??????????????????????????????否
Order by??????? 輸出排序順序?????????????????????? 否
?
??? 以前一直弄不清,group by,having...一起怎么使用的,現(xiàn)在清楚了許多。
?
10 子查詢
?????? 不多說了,就是一級級嵌套查詢下去
?
11 聯(lián)結(jié)表 多表查詢
????對于關(guān)系表而言,那么就是一種數(shù)據(jù)存放在對應(yīng)的一張數(shù)據(jù)表中,避免數(shù)據(jù)的重復(fù),比如把產(chǎn)品相關(guān)信息放在一張Products表中,產(chǎn)品對應(yīng)的供應(yīng)商相關(guān)信息放在另一張供應(yīng)商表Vendors中。
??如果我們要通過產(chǎn)品查詢其對應(yīng)的供應(yīng)商Vendor的相關(guān)信息,要么使用之前的子查詢,這樣就過于繁瑣,所以我們要使用表的連接查詢。
???多表的連接有自然連接,通過join來連接的左外連接和右外連接。
?
12 組合查詢?
??? union
select * from StuCou
where StuNo = 1
union
select * from StuCou
where StuNo = 2?
等價于
select * from StuCou
where StuNo = 1 or StuNo = 2
?
13 插入數(shù)據(jù)
??? insert [into]?Student ?values('1','King',13,'浙江杭州')
???? 這樣的話,就是插入一整行數(shù)據(jù),要求插入數(shù)據(jù)個數(shù)和數(shù)據(jù)表中定義的個數(shù)要一致
?? 或者可以這么寫
?? insert into Student(stu_id,stu_name,stu_age,stu_address,stu_score)
?? values(1,'King',13,'浙江杭州',100);
???values中的值和前面的屬性一一對應(yīng)
?
??? 從一個表復(fù)制到另一個表
???? insert * into class1 from class
?????那么數(shù)據(jù)庫會新建一個名為class1的數(shù)據(jù)表然后把class中的數(shù)據(jù)復(fù)制到class1中。
??? 如果你想將class表中的部分新數(shù)據(jù)導(dǎo)入到class1中的話,那么你可以這么寫
??? insert into class1(列1,列2,列3)
??? select 列11,列22,列33
??? from class
??? 但是如果行中有不能為null的屬性,就不能這么做了
?
14 更新和刪除數(shù)據(jù)
?? update ,delete
?? update 表名
??? set 列名 ='值'
?? where 條件
??? 值得注意的是,更新操作往往會因為,表與表之間的約束關(guān)系發(fā)生沖突
?
? delete from 表名
? where 條件
??delete是刪除表的內(nèi)容
?? 若想刪除整張表中的內(nèi)容,那么delete from 表名
?? 更快的刪除表中所有行,而且速度更快
??? truncate Table? 這樣刪除不用記錄數(shù)據(jù)的變動所以刪除更快
?
15 創(chuàng)建表,更新,刪除
???? create table 表名(
???????? 列名 數(shù)據(jù)類型 說明(null/not null),
???????? ...
??????? )
???? 更新表
???? 給表增加一列
??? Alter Table 表名
??? ADD 列名, 數(shù)據(jù)類型
??? Drop Column 列名?? --刪除一列
?
?? 刪除表
?? Drop Table 表名
from:http://www.cnblogs.com/KingsWang/p/3390766.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的sql必知必会(第四版) 学习笔记一的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RPC框架几行代码就够了
- 下一篇: sql必知必会(第四版) 学习笔记二 视