因公司要求,因而花了約莫一週的時間來理解和記憶SQL語言,在基於實用而非完全理解的狀況下,SQL語句實際上是很簡單的,如今,我就把本身這段時間的整理能容放出來,供新人摸索,供大佬批判。數據庫
由於是新人上路,因此可能有所不足,歡迎指正,我已經儘量的保證正確的了。bash
指定插入:函數
insert into 表名 (列名1,列名2,列名3......) values (內容1,內容2,內容3);
複製代碼
默認插入:測試
insert into 表名 values (內容1,內容2,內容3);
複製代碼
以上兩種是直接向表中插入數據的方式,ui
第一種是照應前邊的內容進行插入, 第二種方式,是默認的按照表格內容插入數據,spa
若是二者數據不足,都會在表格中以NULL的形式插入數據。code
指定行刪除:blog
delete from table_name where 字段名=「指定值」;
複製代碼
(清空數據表內容,不釋放空間,即:下次插入表數據,id依然接着刪除數據的id繼續增長)排序
數據刪除:get
(注:如下刪除都不會清理掉表的形式,只會清理掉表的內容;)
delete * from table_name;
複製代碼
(直接刪除表格內全部的東西,不可恢復;)
truncate:truncate table 表名1;
複製代碼
(清空表數據,釋放空間,即:下次插入表數據,id從1從新開始)
表刪除:drop:drop table 表名1;
複製代碼
(整張表被刪除,要使用該表必須從新建)
指定修改:
update 表名 set 字段名1=‘新值’,字段名2=‘新值’ where 字段名=你想要刪除行的內容;
複製代碼
所有修改:
update 表名 set 字段名=‘新值’,字段名2=‘新值’;
複製代碼
注:若是不加where子句的話,全部內容都會被改爲你指定的值;
所有查詢:
select * from 表名;
複製代碼
指定列查詢:
select 指定的列名 from 表名;
複製代碼
去重查詢:
select distinct * from 表名;
複製代碼
條件查詢:
select 字段名 from 表名 where 查詢條件;
複製代碼
排序查詢:
1,select 字段名 from 表名 order by 想要排行的字段名 desc;(倒序)
2,select 字段名 from 表名 order by 想要排行的字段名 asc;(正序,asd能夠省略)
複製代碼
求和查詢:
select sum (字段) from table1 where 條件;
複製代碼
平均值查詢:
select avg (字段) from table1 where 條件;
複製代碼
最大值查詢:
select max (字段) from table1 where 條件;
複製代碼
最小值查詢:
select min (字段) from table1 where 條件;
複製代碼
(注,這裏我會用column_name代替字段名這個說法,但願不會影響閱讀)
有關表關聯這方面,雖然說就功能而言,這像是在查詢中的內容,可是我仍是把它單獨列出來了。畢竟,這當初但是困擾個人難點。
這個關鍵字不難,簡單的來講,就是將兩張表放在一塊兒,經過某一個字段的關聯,來進行合併查詢。如下爲目前已知的關聯區分;
假設要關聯兩張表上的ID字段進行查詢,那麼,如下爲例子(如下語句均在ORACLE數據庫中測試過,可使用)。
第一張表
左關聯:
select table_name1 as a left join table_name2 as b on a.id =b.id; (這個語句中,as能夠省略)
複製代碼
右關聯:
select * from table_name1 as a right join table_name2 as b on a.id =b.id; (這個語句中,as能夠省略)
複製代碼
全關聯:
select * from table_name1 as a full join table_name2 as b on a.id=b.id;
select * from table_name1 a join table_name2 as b on a.id=b.id;(這個語句中,full和as均可以省略)
複製代碼
交叉關聯:
select * from table_name1 as a cross join table_name2 as b on a.id=b.id(這個語句中,as能夠省略);
複製代碼
內關聯:
select * from table_name1 as a inner join table_name2 as b on a.id=b.id;(這個語句中,as能夠省略);
複製代碼
有關表關聯這裏,我在第一遍看的時候,很鬧不明白,也許是我悟性太差,後來查了好幾人的博客,才弄清楚這裏是怎麼一回事,那麼,在這裏稍微說一下我的的看法吧。
(這裏提早放一下大佬的連接:www.cnblogs.com/thomasguan/…若是有興趣,能夠直接看,下邊的我的看法能夠跳過了。)
關聯,就是以你肯定的字段名,進行鏈接,而後對應的開始查詢,通常關聯的字段名是有必定的相關性的。
經過關聯字段名,你就能夠作到一種對比顯示,而要作到對比顯示,就會有如下幾種可能性:
1,左關聯:以左表爲主顯示,而右表不顯示左表中沒有的字段;
2,右關聯:以右表爲主顯示,不顯示左表中沒有的字段;
3,全關聯:兩個表所有對比,一一對應,不管兩個表中是否有此行,都顯示;
4,內關聯:仍舊是一一對應,可是和上邊正好相反,兩個都沒有的,他就都不顯示;
5,交叉關聯:拿其中的一個表的一行,去對應另外一個表中的全部行,而後將以上對應執行到這個表的最後一個。
以上就是關聯查詢的幾個常見形式了,固然,用文字看可能對初學者來講有點繞,這裏我圖省事,就沒有放圖,實際上,要是看結果圖,會很是輕鬆的明白關聯這一塊。
因爲剛開始的時候,踩了很多坑,因此我對這裏其實有點打怵。不過過來以後,發現其實也就是那麼一回事,太簡單了,簡直是傻子都能懂的東西(等等,這樣會不會說我本身是傻子了?emmmm。。。。)
group by
(這個關鍵字用起來很簡單,就是經過字段名來將表的內容進行分類)
select column_name1, column_name2 from table_name group by column_name3;
複製代碼
例子:
select XB 性別 ,count(1) 總數 from CET_01 group by XB;
複製代碼
以上,我經過group by 分組統計了男女生人數,經過字段的內容進行分組查詢;
having
同where用法,having與group by連用。where是篩選單個記錄,having是篩選分組記錄(先分組,後篩選);
select XB 性別 ,count(1) 總數 from CET_01 group by XB having count(1)>300;
複製代碼
仍是接着上一個例子,這裏咱們想讓知道男生和女生中哪一個大於300人,咱們只須要用having子句,篩選出來就能夠了。
注意,這裏有個坑,有的新手不熟悉,會覺得這裏能夠用where進行篩選,可是實際上,這裏由於group by的分組,where是沒有法使用的,因而便有了having子句。
說一個悲哀的事實,我本覺得本身把SQL的基礎語句看的如此紮實了,應該也沒什麼大事了,就算有問題,憑藉我如今的能力,至少可以看懂吧?
可是兩天以後,我纔有些鬧心的發現,真正的遇到問題的時候,本身的這點水準依舊只是個打雜的,有不少地方的查詢,不是難在語句上,而是難在想法和對錶的熟悉程度上。
真正在用到的時候,更多的是對錶關聯查詢的使用,還有有別名用法,和關聯符的使用。
這個過程當中,真正用到最多的,是SQL中自帶的函數,好比DECODE(),sum(),avg(),nvl()一類的函數。
有不少地方,我寫的很重複的SQL語句,以後在大佬檢查了以後,多數會被翻新重寫,我就發現我寫的SQL很沒有靈性。。 至少,他們的SQL寫得很簡單,有種邏輯在裏邊,而不是我這種重複的基礎SQL。
不得不說,路還很長,我仍是太嫩,我還須要繼續努力。
最後,若是有能噴的地方,請輕噴。。。或者,能戳到痛點上,給點用處的重噴也行。。。
原本打算過兩天放出本身對函數部分的理解,可是這兩天在公司看了大佬的SQL語句後,瑟瑟發抖。。。神仙寫法,不少時候都有種徹底沒想到的感受。
等後續可以徹底適應了SQL中的函數部分,我會放出本身對SQL的理解的,謝謝。