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