SQL語言是高級的結構化查詢語言。用哈哈使用SQL語句進行數據操做時,只須要提出「作什麼」而沒必要指明「怎麼作」,具體的執行過程有系統自動完成,大大減輕了用戶的負擔。SQL語言是數據庫服務器和客戶端之間的重要溝通手段,用於存取數據,以及查詢,更新和管理關係型數據庫系統。html
SQL支持類別的命令:
1.數據定義語言(DDL):CREATE(建立),ALTER(更改),TRUNCATE(截斷)和DROP(刪除)命令。mysql
2.數據操縱語言(DML):INCERT(插入),SELECT(選擇),DELETE(刪除),UPDATE(更新)命令。面試
3.事務控制語言(RCL):COMMIT(提交),SAVEPOINT(保存點)和ROLLBACK(回滾)命令。sql
4.數據控制語言(DCL):GRANT(授予),和REVOKE('回收)命令。數據庫
SQL操縱符:
1.算數操縱符:查詢語句中要執行基於數值的計算,能夠在SQL命令中使用算數表達式。算數表達式由UMBER數據類型的列名,數值常量和鏈接它們的算術操做符組成。算術操做符包括 +(加),—(減),*(乘),/(除)。安全
2.比較操做符:比較操做符用於比較兩個表達式的值。比較操做符包括 =,!=,<,>,<=,>=,BETWEEN.....AND(檢查是否在兩個值之間),IN(與列表中的值相匹配),LIKE(匹配字符模式)和 IS NULL(檢查是否爲空)。 服務器
3.邏輯操做符:邏輯操做符用於組合多個比較運算的結果以生成一個真或假的結果。邏輯操做符包括AND(與),OR(或),NOT(非)。網絡
4.集合操做符:集合操做符將兩個查詢的結果組合成一個結果集。能夠在SQL中使用下面的集合操做符來組合多個查詢中的行。⑴UNION(聯合)⑵UNION ALL(聯合全部)⑶INTERSECT(交集)⑷MINUS(減集)。 數據結構
(注意 :使用集合操做符鏈接起來的SELECT語句中的列遵循如下規則1.經過集合操做符鏈接的各個查詢具備相同的列數,並且對應列的數據類型必須兼容。2.這種查詢不該該含有LONG類型的列。列標題來自第一個SELECT語句 )。併發
SQL函數:
1.轉換函數:將值從一種數據類型轉換爲另外一種數據類型,經常使用的轉換函數有:⑴TO_CHAR轉換成字符串類型⑵TO_DATE轉換成日期類型⑶TO_NUMBER轉換成數值類型。
2.其餘函數:字符函數,日期函數,數值函數,轉換函數,單行函數。經常使用的其餘函數 ⑴NVL⑵NVL2⑶DECODE。
3.分析函數:是對一組查詢結果進行運算,而後得到結果。分析函數很是相似於聚會函數,區別在於分析函數每一個組返回多行,聚合函數返回一行。
⑴ROW_NUMBER函數:返回一個惟一的值,當遇到相同數據時,排名按照記錄集中記錄的順序依次遞增。
⑵DENSE_RANK函數:返回一個惟一的值,當遇到相同數據時,全部相同數據排名都是一個樣的。
⑶RANK函數:返回一個惟一的值,當遇到相同數據時,全部相同數據排名都是同樣的,同時會在最後一條相同記錄和下一條不一樣記錄的排名之間空出排名。
---------------------
SQL語言經常使用語句/關鍵字:
select distinct column_name,column_name from table_name;distinct 關鍵詞用於返回惟一不一樣的值。
where條件:包含的運算符where 1=1(where 1=1 是爲了不where 關鍵字後面的第一個詞直接就是 「and」而致使語法錯誤,爲了後面的條件)和防止sql注入
算數 + - * / %
比較運算符= !=/<> > < >= <=
邏輯運算符not and or
特殊條件 name is null/is not null、age between 1500 and 3000、age in(5000,3000,1500)
name like '%M%'
高級查詢
分組集 grouping sets()
rollup() group by子句的擴展
intersect 查詢相似union all不重複的行 交集
minus 相似intersect 減集
all運算符用於將值與另外一個值集中的全部值進行比較。
any運算符用於根據條件將值與列表中的任何適用值進行比較。
EXISTS測試子查詢是否包含任何行,返回true。 不然它返回false
order by asc/desc 排序
group by 分組
HAVING 篩選分組後的各組數據
事務控制
commit 保存更改
rollback 回滾更改
savepoint 回滾事務組建立點
set transaction 事務放置的名稱
select top(10) * from user sqlserver
select * from user limit 5,10 5表明第幾條數據以後開始,10表明差出幾條結束。也能夠直接寫10顯示10條 mysql
select * from (select * from test order by statedate desc ) where rownum<=10 先排序,再查詢前10條 oracle
select name as Name from user SQL別名
inner join/left join(從左表返回全部行,即便右表中沒有匹配)
/right join/outer join/full join/cross join(cross join子句沒有鏈接條件)
union聯合、若是容許重複的值,使用 UNION ALL
insert into table2 select * from table1 複製表數據,將數據插入到已存在的表中 mysql
select * into table2 from table1 sqlserver
create table table1 as select * from table mysql
alter約束
not null 非空約束 unique惟一約束 primary key 主鍵約束
foreign key 外鍵約束 check列中的值符合指定條件 檢查約束
default 沒賦值時默認值
create index 建立索引容許重複的值,通常用於較大數據量表
create unique index 惟一索引不容許重複的值
drop刪除表 一次類推能夠刪庫、索引、視圖、存儲過程、觸發器
truncate只刪除表數據
show table 查看全部表 以此類推能夠查看刪庫、索引、視圖、存儲過程、觸發器
alter table 用於在已有表中添加、刪除、修改列。
alter table user add column state
alter table user drop column state
alter table user modify column state datetype改變表中列的數據類型 mysql
auto_increment mysql主鍵自增
identity(1,1)sqlserver主鍵自增 oracle 則是建立序列
create view 建立視圖
Date函數
now()返回當前的日期和時間
getdate()返回當前的日期和時間
date類型 - 格式:YYYY-MM-DD
datetime類型 - 格式:YYYY-MM-DD HH:MM:SS
avg()平均值 count()行數 first() last()
max() min() sun()
len()返回長度 subString()截取字符,mid()截取字符mysql format()格式化
---------------------
SQL基礎教程推薦博文:https://blog.csdn.net/w_y2010/article/details/80399708
SQL學習例題推薦博文:https://www.jianshu.com/p/476b52ee4f1b
SQL優化推薦博文:https://www.cnblogs.com/yunfeifei/p/3850440.html
SQL優化推薦博文:https://www.cnblogs.com/wind-june/p/9638356.html
面試題:
一、什麼是存儲過程?有哪些優缺點?
存儲過程是一些預編譯的SQL語句。
更加直白的理解:存儲過程能夠說是一個記錄集,它是由一些T-SQL語句組成的代碼塊,這些T-SQL語句代碼像一個方法同樣實現一些功能(對單表或多表的增刪改查),而後再給這個代碼塊取一個名字,在用到這個功能的時候調用他就好了。
存儲過程是一個預編譯的代碼塊,執行效率比較高
一個存儲過程替代大量T_SQL語句 ,能夠下降網絡通訊量,提升通訊速率
能夠必定程度上確保數據安全
二、索引是什麼?有什麼做用以及優缺點?
索引是對數據庫表中一或多個列的值進行排序的結構,是幫助MySQL高效獲取數據的數據結構
你也能夠這樣理解:索引就是加快檢索表中數據的方法。數據庫的索引相似於書籍的索引。在書籍中,索引容許用戶沒必要翻閱完整個書就能迅速地找到所須要的信息。在數據庫中,索引也容許數據庫程序迅速地找到表中的數據,而沒必要掃描整個數據庫。
MySQL數據庫幾個基本的索引類型:普通索引、惟一索引、主鍵索引、全文索引
索引加快數據庫的檢索速度
索引下降了插入、刪除、修改等維護任務的速度
惟一索引能夠確保每一行數據的惟一性
經過使用索引,能夠在查詢的過程當中使用優化隱藏器,提升系統的性能
索引須要佔物理和數據空間
三、什麼是事務?
事務(Transaction)是併發控制的基本單位。所謂的事務,它是一個操做序列,這些操做要麼都執行,要麼都不執行,它是一個不可分割的工做單位。事務是數據庫維護數據一致性的單位,在每一個事務結束時,都能保持數據一致性。
四、數據庫的樂觀鎖和悲觀鎖是什麼?
樂觀併發控制(樂觀鎖)和悲觀併發控制(悲觀鎖)是併發控制主要採用的技術手段。
悲觀鎖:假定會發生併發衝突,屏蔽一切可能違反數據完整性的操做
樂觀鎖:假設不會發生併發衝突,只在提交操做時檢查是否違反數據完整性。
五、簡單說一說drop、delete與truncate的區別
SQL中的drop、delete、truncate都表示刪除,可是三者有一些差異
delete和truncate只刪除表的數據不刪除表的結構
速度,通常來講: drop> truncate >delete
delete語句是dml,這個操做會放到rollback segement中,事務提交以後才生效;
若是有相應的trigger,執行的時候將被觸發. truncate,drop是ddl, 操做當即生效,原數據不放到rollback segment中,不能回滾. 操做不觸發trigger.
六、drop、delete與truncate分別在什麼場景之下使用?
再也不須要一張表的時候,用drop
想刪除部分數據行時候,用delete,而且帶上where子句
保留表而刪除全部數據的時候用truncate
七、 超鍵、候選鍵、主鍵、外鍵分別是什麼?
超鍵:在關係中能惟一標識元組的屬性集稱爲關係模式的超鍵。一個屬性能夠爲做爲一個超鍵,多個屬性組合在一塊兒也能夠做爲一個超鍵。超鍵包含候選鍵和主鍵。
候選鍵:是最小超鍵,即沒有冗餘元素的超鍵。
主鍵:數據庫表中對儲存數據對象予以惟一和完整標識的數據列或屬性的組合。一個數據列只能有一個主鍵,且主鍵的取值不能缺失,即不能爲空值(Null)。
外鍵:在一個表中存在的另外一個表的主鍵稱此表的外鍵。
八、什麼是視圖?以及視圖的使用場景有哪些?
視圖是一種虛擬的表,具備和物理表相同的功能。能夠對視圖進行增,改,查,操做,試圖一般是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得咱們獲取數據更容易,相比多表查詢。
九、說一說三個範式。
第一範式(1NF):數據庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本類型構成,包括整型、實數、字符型、邏輯型、日期型等。
第二範式(2NF):數據庫表中不存在非關鍵字段對任一候選關鍵字段的部分函數依賴(部分函數依賴指的是存在組合關鍵字中的某些字段決定非關鍵字段的狀況),也即全部非關鍵字段都徹底依賴於任意一組候選關鍵字。
第三範式(3NF):在第二範式的基礎上,數據表中若是不存在非關鍵字段對任一候選關鍵字段的傳遞函數依賴則符合第三範式。所謂傳遞函數依賴,指的是如 果存在"A → B → C"的決定關係,則C傳遞函數依賴於A。所以,知足第三範式的數據庫表應該不存在以下依賴關係: 關鍵字段 → 非關鍵字段 x → 非關鍵字段y
varchar與char的區別
char是一種固定長度的類型,varchar則是一種可變長度的類型
十、什麼是內聯接、左外聯接、右外聯接?
l 內聯接(Inner Join):匹配2張表中相關聯的記錄。
l 左外聯接(Left Outer Join):除了匹配2張表中相關聯的記錄外,還會匹配左表中剩餘的記錄,右表中未匹配到的字段用NULL表示。
l 右外聯接(Right Outer Join):除了匹配2張表中相關聯的記錄外,還會匹配右表中剩餘的記錄,左表中未匹配到的字段用NULL表示。
在斷定左表和右表時,要根據表名出如今Outer Join的左右位置關係。
十一、什麼是遊標?
遊標其實是一種能從包括多條數據記錄的結果集中每次提取一條記錄進行處理的機制。
遊標的使用步驟:
定義遊標:declare cursor 遊標名稱 for select查詢語句 [for {readonly|update}]
打開遊標:open cursor
從遊標中操做數據:fetch… … current of cursor
關閉遊標:close cursor
十二、觸發器的做用?
答:觸發器是一中特殊的存儲過程,主要是經過事件來觸發而被執行的。它能夠強化約束,來維護數據的完整性和一致性,能夠跟蹤數據庫內的操做從而不容許未經許可的更新和變化。能夠聯級運算。如,某表上的觸發器上包含對另外一個表的數據操做,而該操做又會致使該表觸發器被觸發。--------------------- 原文:https://blog.csdn.net/qq_38977097/article/details/88532746