<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          通俗講解和學(xué)習(xí)SQL

          共 22831字,需瀏覽 46分鐘

           ·

          2021-06-16 11:17

          來源:公眾號【杰哥的IT之旅】
          作者:三笠
          ID:Jake_Internet

          前言

          SQL是什么?

          官方解釋: SQL (Structured Query Language:結(jié)構(gòu)化查詢語言) 是用于管理關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。

          SQL能用來干什么?

          通俗的講: 讓您可以訪問和處理數(shù)據(jù)庫,包括數(shù)據(jù)插入、查詢、更新和刪除。

          SQL

          下面讓我們看看小美是如何零基礎(chǔ)學(xué)習(xí)SQL的:

          Lucifer,最新領(lǐng)導(dǎo)讓我負責(zé)數(shù)據(jù)庫開發(fā),需要寫SQL,但是我零基礎(chǔ)沒學(xué)過,有辦法快速入門嗎?

          小美啊,SQL語言其實入門不難,我先來教你最簡單的增刪改查基礎(chǔ)吧。

          好的,我試試看,奧力給。

          Ok,那我們先來一個最簡單常用的SQL語句DUAL查詢:SELECT SYSDATE FROM DUAL;

          sysdate

          使用這個SQL語句可以查看數(shù)據(jù)庫當(dāng)前時間,當(dāng)然也可以把 SYSDATE 換成任意東西。

          例如:

          計算器:SELECT 365 * 24 FROM dual;

          計算器

          這個SQL我們在開發(fā)中會經(jīng)常用到,作為入門第一個SQL輕松有趣。小美,你覺得難嗎?

          這個太實用了,以后計算器和日歷都可以省了,哈哈哈。

          是的,其實我們剛剛已經(jīng)不經(jīng)意的學(xué)習(xí)了SQL語言增刪改查中的  操作了。接下來,我要介紹一個新的對象: :是相關(guān)的數(shù)據(jù)項的集合,它由列和行組成。通俗的講,數(shù)據(jù)庫相當(dāng)于圖書館,表就類似于其中的一個個書架,表數(shù)據(jù)就類似于一本本書。我們查詢數(shù)據(jù)庫表的數(shù)據(jù),就好比我們進入圖書館去找一本喜歡的書。我這么說,你能理解嗎?


           的基本語法:select * from 表名;

          可以可以,這個比喻我一下子就聽懂了,原來數(shù)據(jù)庫查詢是這樣的,那表是怎么創(chuàng)建的呢?

          不要著急,先來介紹一下數(shù)據(jù)庫中最常用的3個數(shù)據(jù)類型:NUMBER,VARCHAR2,DATE,分別為數(shù)字型,字符型,日期型。顧名思義,即用來定義表中列字段用來存放數(shù)據(jù)的類型。

          數(shù)據(jù)類型

          嗯嗯,這個能理解,跟java,C 好像有些相似。

          嗯嗯。理解了這個,就可以開始建表了,現(xiàn)在來創(chuàng)建一個簡單的圖書館書架表。

          CREATE TABLE bookshelf
          (
          BOOK_ID NUMBER,
          BOOK_NAME VARCHAR2(100),
          BOOK_TYPE VARCHAR2(100),
          AUTHOR VARCHAR2(100),
          INTIME DATE
          );

          表名為:bookshelf,有列:圖書id,圖書名稱,圖書類型,作者,入庫時間。通過上面學(xué)習(xí)的 SELECT語法,來查詢一下這張表:

          SELECT * FROM bookshelf;

          查詢圖書表

          可以發(fā)現(xiàn),新建的bookshelf表沒有任何記錄。現(xiàn)在,圖書館里已經(jīng)增加一個空的書架,是不是需要將書放入書架上呢?這時就需要用到 操作了。

          嗯嗯,很形象,感覺自己就像個圖書管理員一樣,哈哈哈。

          哈哈,沒錯,我們數(shù)據(jù)庫管理員跟圖書管理員可以說是異曲同工。好了,繼續(xù)說放書吧,現(xiàn)在假設(shè)有一本書《飄》,作者:瑪格麗特·米切爾,類型:長篇小說。現(xiàn)在通過 INSERT 將這本書放入書架上:

          INSERT INTO bookshelf 
          (book_id,
          book_name,
          book_type,
          author,
          intime)
          VALUES
          (1,
          '飄',
          '長篇小說',
          '瑪格麗特·米切爾',
          SYSDATE);
          COMMIT;

          的基本語法:insert into 表名 (需要插入的列名,用逗號隔開) values (對應(yīng)列名的值);

          插入數(shù)據(jù)

          通過sql查詢發(fā)現(xiàn),這本書《飄》已經(jīng)放入了書架上,可供大家借用和查看。

          太形象了,那如果我把書的作者寫錯了,那怎么辦呢?再插入一條嗎?

          這個問題問的很好,因為人為的操作總會存在誤差,因此提出了 改 和  刪 兩種操作。

          的基本語法:UPDATE 表名 SET 列名 = 新的值;

          的基本語法:DELETE FROM 表名;

          現(xiàn)在來模擬一下場景:

          1、修改作者名:

          UPDATE bookshelf SET author='Margaret Mitchell';
          COMMIT;

          修改作者名

          2、下架圖書:

          DELETE FROM bookshelf;
          COMMIT;

          圖書下架

          通過以上兩個場景,演示了 和   兩種操作。

          lucifer,你講的很明了,我現(xiàn)在已經(jīng)懂了增刪改查四種操作了,迫不及待想要動手開始操作了!

          小美,先別急,你沒有發(fā)現(xiàn)一個嚴重的問題嗎?如果書架上不止一本書呢?那你怎么對指定的那本書進行操作呢?有思考過嗎?

          對哦,上面都是演示的一本書,如果有多本書,是不是也有對應(yīng)的操作可以來篩選呢?

          沒錯,很聰明。現(xiàn)在隆重有請 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;

          插入數(shù)據(jù)

          查看《傾城之戀》:

          SELECT * FROM bookshelf WHERE BOOK_NAME = '傾城之戀';

          查看《傾城之戀》

          更新《飄》:

          UPDATE bookshelf SET author='Margaret Mitchell' WHERE book_name = '飄';
          COMMIT;

          更新《飄》

          刪除《從你的全世界路過》:

          DELETE FROM bookshelf WHERE book_name = '從你的全世界路過';
          COMMIT;

          刪除《從你的全世界路過》

          通過上面的幾個栗子??,應(yīng)該能很好的理解 WHERE 查詢條件的使用了。

          懂了懂了,lucifer,我現(xiàn)在是不是可以去開發(fā)了?好像練練手啊!!!

          嗯。現(xiàn)在只能說是入門了,會簡單的增刪改查是數(shù)據(jù)庫開發(fā)的第一部,所有的數(shù)據(jù)庫操作都是基于SQL語言的。

          好的好的。有問題了,我在繼續(xù)問你,謝謝lucifer!!!Thanks?(?ω?)?。

          另外,這跟大家分享三個一句SQL畫圖的趣味小玩意兒:

          五角星:

          WITH a AS
           (SELECT DISTINCT round(SUM(x) over(ORDER BY n)) x,
                            round(SUM(y) over(ORDER BY n)) y
              FROM (SELECT n,
                           cos(trunc(n / 20) * (1 - 1 / 5) * 3.1415926) * 2 x,
                           sin(trunc(n / 20) * (1 - 1 / 5) * 3.1415926) y
                      FROM (SELECT rownum - 1 n
                              FROM all_objects
                             WHERE rownum <= 20 * 5)))
          SELECT REPLACE(sys_connect_by_path(point,
                                             '/'),
                         '/',
                         NULL) star
            FROM (SELECT b.y,
                         b.x,
                         decode(a.x,
                                NULL,
                                ' ',
                                '*') point
                    FROM a,
                         (SELECT *
                            FROM (SELECT rownum - 1 + (SELECT MIN(x)
                                                         FROM a) x
                                    FROM all_objects
                                   WHERE rownum <= (SELECT MAX(x) - MIN(x) + 1
                                                      FROM a)),
                                 (SELECT rownum - 1 + (SELECT MIN(y)
                                                         FROM a) y
                                    FROM all_objects
                                   WHERE rownum <= (SELECT MAX(y) - MIN(y) + 1
                                                      FROM a))) b
                   WHERE a.x(+) = b.x
                     AND a.y(+) = b.y)
           WHERE x = (SELECT MAX(x)
                        FROM a)
           START WITH x = (SELECT MIN(x)
                             FROM a)
          CONNECT BY y = PRIOR y
                 AND x = PRIOR x + 1;

          五角星

          調(diào)整期中數(shù)字5, 你還可以輸出7角星, 9角星。

          奧運五環(huán):

          WITH a AS
           (SELECT DISTINCT round(a.x + b.x) x,
                            round(a.y + b.y) y
              FROM (SELECT (SUM(x) over(ORDER BY n)) x,
                           round(SUM(y) over(ORDER BY n)) y
                      FROM (SELECT n,
                                   cos(n / 30 * 3.1415926) * 2 x,
                                   sin(n / 30 * 3.1415926) y
                              FROM (SELECT rownum - 1 n
                                      FROM all_objects
                                     WHERE rownum <= 30 + 30))) a,
                   (SELECT n,
                           (SUM(x) over(ORDER BY n)) x,
                           round(SUM(y) over(ORDER BY n)) y
                      FROM (SELECT n,
                                   cos(m / 3 * 3.1415926) * 2 * 15 x,
                                   sin(m / 3 * 3.1415926) * 15 y
                              FROM (SELECT CASE
                                             WHEN rownum <= 2 THEN
                                              3
                                             WHEN rownum = 3 THEN
                                              -2
                                             ELSE
                                              -6
                                           END m,
                                           rownum - 1 n
                                      FROM all_objects
                                     WHERE rownum <= 5))) b)
          SELECT REPLACE(sys_connect_by_path(point,
                                             '/'),
                         '/',
                         NULL) star
            FROM (SELECT b.y,
                         b.x,
                         decode(a.x,
                                NULL,
                                ' ',
                                '*') point
                    FROM a,
                         (SELECT *
                            FROM (SELECT rownum - 1 + (SELECT MIN(x)
                                                         FROM a) x
                                    FROM all_objects
                                   WHERE rownum <= (SELECT MAX(x) - MIN(x) + 1
                                                      FROM a)),
                                 (SELECT rownum - 1 + (SELECT MIN(y)
                                                         FROM a) y
                                    FROM all_objects
                                   WHERE rownum <= (SELECT MAX(y) - MIN(y) + 1
                                                      FROM a))) b
                   WHERE a.x(+) = b.x
                     AND a.y(+) = b.y)
           WHERE x = (SELECT MAX(x)
                        FROM a)
           START WITH x = (SELECT MIN(x)
                             FROM a)
          CONNECT BY y = PRIOR y
                 AND x = PRIOR x + 1;

          奧運五環(huán)

          打印當(dāng)月日歷:

          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)) sat

            FROM (SELECT rownum d,

                         rownum - 2 + to_number(to_char(trunc(SYSDATE,
                                                              'MM'),
                                                        'D')) p,

                         to_char(trunc(SYSDATE,
                                       'MM') - 1 + rownum,
                                 'D') dow

                    FROM all_objects

                   WHERE rownum <=

                         to_number(to_char(last_day(to_date(SYSDATE)),
                                           'DD')))

           GROUP BY trunc(p / 7)

           ORDER BY sun NULLS FIRST;

          打印日歷

          最后

          本文是讀者:三笠在 CSDN 平臺創(chuàng)作的一篇文章,把枯燥的 SQL 技術(shù)文章寫的非常有意思,歡迎大家關(guān)注。

          博客地址:https://blog.csdn.net/m0_50546016(點擊文末左側(cè)的閱讀原文可直達,或 PC 端訪問)

          原創(chuàng)不易,如果你覺得這篇文章對你有點用的話,麻煩你為本文點個贊、在看、留言或轉(zhuǎn)發(fā)一下,因為這將是我輸出更多優(yōu)質(zhì)文章的動力,感謝!

          往期精彩回顧





          本站qq群851320808,加入微信群請掃碼:

          瀏覽 68
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩一级片在现观看视频 | 在线免费视频亚洲 | 在线观看免费v黄 | 在线观看免费拍拍视频 | 超碰91在线 |