通俗讲解和学习SQL
來源:公眾號【杰哥的IT之旅】
作者:三笠
ID:Jake_Internet
前言
SQL是什么?
官方解釋: SQL (Structured Query Language:結構化查詢語言) 是用于管理關系數據庫管理系統(RDBMS)。
SQL能用來干什么?
通俗的講: 讓您可以訪問和處理數據庫,包括數據插入、查詢、更新和刪除。
SQL下面讓我們看看小美是如何零基礎學習SQL的:
Lucifer,最新領導讓我負責數據庫開發,需要寫SQL,但是我零基礎沒學過,有辦法快速入門嗎?
小美啊,SQL語言其實入門不難,我先來教你最簡單的增刪改查基礎吧。
好的,我試試看,奧力給。
Ok,那我們先來一個最簡單常用的SQL語句DUAL查詢:SELECT SYSDATE FROM DUAL;
sysdate使用這個SQL語句可以查看數據庫當前時間,當然也可以把 SYSDATE 換成任意東西。
例如:
計算器:SELECT 365 * 24 FROM dual;
計算器這個SQL我們在開發中會經常用到,作為入門第一個SQL輕松有趣。小美,你覺得難嗎?
這個太實用了,以后計算器和日歷都可以省了,哈哈哈。
是的,其實我們剛剛已經不經意的學習了SQL語言增刪改查中的?查?操作了。接下來,我要介紹一個新的對象:表?:是相關的數據項的集合,它由列和行組成。通俗的講,數據庫相當于圖書館,表就類似于其中的一個個書架,表數據就類似于一本本書。我們查詢數據庫表的數據,就好比我們進入圖書館去找一本喜歡的書。我這么說,你能理解嗎?
查?的基本語法:select * from?表名;
可以可以,這個比喻我一下子就聽懂了,原來數據庫查詢是這樣的,那表是怎么創建的呢?
不要著急,先來介紹一下數據庫中最常用的3個數據類型:NUMBER,VARCHAR2,DATE,分別為數字型,字符型,日期型。顧名思義,即用來定義表中列字段用來存放數據的類型。
數據類型嗯嗯,這個能理解,跟java,C 好像有些相似。
嗯嗯。理解了這個,就可以開始建表了,現在來創建一個簡單的圖書館書架表。
CREATE?TABLE?bookshelf ( BOOK_ID?NUMBER, BOOK_NAME?VARCHAR2(100), BOOK_TYPE?VARCHAR2(100), AUTHOR?VARCHAR2(100), INTIME?DATE );表名為:bookshelf,有列:圖書id,圖書名稱,圖書類型,作者,入庫時間。通過上面學習的 SELECT語法,來查詢一下這張表:
SELECT * FROM bookshelf;
查詢圖書表可以發現,新建的bookshelf表沒有任何記錄。現在,圖書館里已經增加一個空的書架,是不是需要將書放入書架上呢?這時就需要用到 增 操作了。
嗯嗯,很形象,感覺自己就像個圖書管理員一樣,哈哈哈。
哈哈,沒錯,我們數據庫管理員跟圖書管理員可以說是異曲同工。好了,繼續說放書吧,現在假設有一本書《飄》,作者:瑪格麗特·米切爾,類型:長篇小說。現在通過?INSERT?將這本書放入書架上:
INSERT?INTO?bookshelf? (book_id, book_name, book_type, author, intime) VALUES (1, '飄', '長篇小說', '瑪格麗特·米切爾', SYSDATE); COMMIT;增 的基本語法:insert into 表名 (需要插入的列名,用逗號隔開) values (對應列名的值);
插入數據通過sql查詢發現,這本書《飄》已經放入了書架上,可供大家借用和查看。
太形象了,那如果我把書的作者寫錯了,那怎么辦呢?再插入一條嗎?
這個問題問的很好,因為人為的操作總會存在誤差,因此提出了?改?和 ?刪?兩種操作。
改 的基本語法:UPDATE 表名 SET 列名 = 新的值;
刪 的基本語法:DELETE FROM 表名;
現在來模擬一下場景:
1、修改作者名:
UPDATE?bookshelf?SET?author='Margaret?Mitchell'; COMMIT;修改作者名
2、下架圖書:
DELETE?FROM?bookshelf; COMMIT;圖書下架
通過以上兩個場景,演示了 改 和 ?刪 兩種操作。
lucifer,你講的很明了,我現在已經懂了增刪改查四種操作了,迫不及待想要動手開始操作了!
小美,先別急,你沒有發現一個嚴重的問題嗎?如果書架上不止一本書呢?那你怎么對指定的那本書進行操作呢?有思考過嗎?
對哦,上面都是演示的一本書,如果有多本書,是不是也有對應的操作可以來篩選呢?
沒錯,很聰明。現在隆重有請?WHERE?查詢條件登場。正如上面所說,WHERE 子句用于提取那些滿足指定條件的記錄
先上架3本書:
INSERT?INTO?bookshelf?(book_id,book_name,book_type,author,intime)?VALUES?(1,'飄','長篇小說','瑪格麗特·米切爾',SYSDATE); INSERT?INTO?bookshelf?(book_id,book_name,book_type,author,intime)?VALUES?(2,'傾城之戀','愛情小說','張愛玲',SYSDATE); INSERT?INTO?bookshelf?(book_id,book_name,book_type,author,intime)?VALUES?(3,'從你的全世界路過','短篇小說','張嘉佳',SYSDATE); COMMIT;插入數據
查看《傾城之戀》:
SELECT?*?FROM?bookshelf?WHERE?BOOK_NAME?=?'傾城之戀';查看《傾城之戀》
更新《飄》:
UPDATE?bookshelf?SET?author='Margaret?Mitchell'?WHERE?book_name?=?'飄'; COMMIT;更新《飄》
刪除《從你的全世界路過》:
DELETE?FROM?bookshelf?WHERE?book_name?=?'從你的全世界路過'; COMMIT;刪除《從你的全世界路過》
通過上面的幾個栗子????,應該能很好的理解 WHERE 查詢條件的使用了。
懂了懂了,lucifer,我現在是不是可以去開發了?好像練練手啊!!!
嗯。現在只能說是入門了,會簡單的增刪改查是數據庫開發的第一部,所有的數據庫操作都是基于SQL語言的。
好的好的。有問題了,我在繼續問你,謝謝lucifer!!!Thanks?(・ω・)ノ。
另外,這跟大家分享三個一句SQL畫圖的趣味小玩意兒:
五角星:
WITH?a?AS(SELECT?DISTINCT?round(SUM(x)?over(ORDER?BY?n))?x,round(SUM(y)?over(ORDER?BY?n))?yFROM?(SELECT?n,cos(trunc(n?/?20)?*?(1?-?1?/?5)?*?3.1415926)?*?2?x,sin(trunc(n?/?20)?*?(1?-?1?/?5)?*?3.1415926)?yFROM?(SELECT?rownum?-?1?nFROM?all_objectsWHERE?rownum?<=?20?*?5))) SELECT?REPLACE(sys_connect_by_path(point,'/'),'/',NULL)?starFROM?(SELECT?b.y,b.x,decode(a.x,NULL,'?','*')?pointFROM?a,(SELECT?*FROM?(SELECT?rownum?-?1?+?(SELECT?MIN(x)FROM?a)?xFROM?all_objectsWHERE?rownum?<=?(SELECT?MAX(x)?-?MIN(x)?+?1FROM?a)),(SELECT?rownum?-?1?+?(SELECT?MIN(y)FROM?a)?yFROM?all_objectsWHERE?rownum?<=?(SELECT?MAX(y)?-?MIN(y)?+?1FROM?a)))?bWHERE?a.x(+)?=?b.xAND?a.y(+)?=?b.y)WHERE?x?=?(SELECT?MAX(x)FROM?a)START?WITH?x?=?(SELECT?MIN(x)FROM?a) CONNECT?BY?y?=?PRIOR?yAND?x?=?PRIOR?x?+?1;五角星
調整期中數字5, 你還可以輸出7角星, 9角星。
奧運五環:
WITH?a?AS(SELECT?DISTINCT?round(a.x?+?b.x)?x,round(a.y?+?b.y)?yFROM?(SELECT?(SUM(x)?over(ORDER?BY?n))?x,round(SUM(y)?over(ORDER?BY?n))?yFROM?(SELECT?n,cos(n?/?30?*?3.1415926)?*?2?x,sin(n?/?30?*?3.1415926)?yFROM?(SELECT?rownum?-?1?nFROM?all_objectsWHERE?rownum?<=?30?+?30)))?a,(SELECT?n,(SUM(x)?over(ORDER?BY?n))?x,round(SUM(y)?over(ORDER?BY?n))?yFROM?(SELECT?n,cos(m?/?3?*?3.1415926)?*?2?*?15?x,sin(m?/?3?*?3.1415926)?*?15?yFROM?(SELECT?CASEWHEN?rownum?<=?2?THEN3WHEN?rownum?=?3?THEN-2ELSE-6END?m,rownum?-?1?nFROM?all_objectsWHERE?rownum?<=?5)))?b) SELECT?REPLACE(sys_connect_by_path(point,'/'),'/',NULL)?starFROM?(SELECT?b.y,b.x,decode(a.x,NULL,'?','*')?pointFROM?a,(SELECT?*FROM?(SELECT?rownum?-?1?+?(SELECT?MIN(x)FROM?a)?xFROM?all_objectsWHERE?rownum?<=?(SELECT?MAX(x)?-?MIN(x)?+?1FROM?a)),(SELECT?rownum?-?1?+?(SELECT?MIN(y)FROM?a)?yFROM?all_objectsWHERE?rownum?<=?(SELECT?MAX(y)?-?MIN(y)?+?1FROM?a)))?bWHERE?a.x(+)?=?b.xAND?a.y(+)?=?b.y)WHERE?x?=?(SELECT?MAX(x)FROM?a)START?WITH?x?=?(SELECT?MIN(x)FROM?a) CONNECT?BY?y?=?PRIOR?yAND?x?=?PRIOR?x?+?1;奧運五環
打印當月日歷:
SELECT?MAX(decode(dow,1,d,NULL))?sun,MAX(decode(dow,2,d,NULL))?mon,MAX(decode(dow,3,d,NULL))?tue,MAX(decode(dow,4,d,NULL))?wed,MAX(decode(dow,5,d,NULL))?thu,MAX(decode(dow,6,d,NULL))?fri,MAX(decode(dow,7,d,NULL))?satFROM?(SELECT?rownum?d,rownum?-?2?+?to_number(to_char(trunc(SYSDATE,'MM'),'D'))?p,to_char(trunc(SYSDATE,'MM')?-?1?+?rownum,'D')?dowFROM?all_objectsWHERE?rownum?<=to_number(to_char(last_day(to_date(SYSDATE)),'DD')))GROUP?BY?trunc(p?/?7)ORDER?BY?sun?NULLS?FIRST;打印日歷
最后
本文是讀者:三笠在 CSDN 平臺創作的一篇文章,把枯燥的 SQL 技術文章寫的非常有意思,歡迎大家關注。
博客地址:https://blog.csdn.net/m0_50546016(點擊文末左側的閱讀原文可直達,或 PC 端訪問)
原創不易,如果你覺得這篇文章對你有點用的話,麻煩你為本文點個贊、在看、留言或轉發一下,因為這將是我輸出更多優質文章的動力,感謝!
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯溫州大學《機器學習課程》視頻 本站qq群851320808,加入微信群請掃碼:總結
以上是生活随笔為你收集整理的通俗讲解和学习SQL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 火狐浏览器如何禁止网站发消息 火狐浏览器
- 下一篇: 腾讯视频怎么开启运营商网络自动播放