乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      基礎篇:數(shù)據(jù)庫 SQL 入門教程

       LuciferLiu 2021-12-10

      目錄

      📚 前言

      SQL語言有40多年的歷史,從它被應用至今幾乎無處不在。我們消費的每一筆支付記錄,收集的每一條用戶信息,發(fā)出去的每一條消息,都會使用數(shù)據(jù)庫或與其相關的產品來存儲,而操縱數(shù)據(jù)庫的語言正是 SQL !

      SQL 對于現(xiàn)在的互聯(lián)網(wǎng)公司生產研發(fā)等崗位幾乎是一個必備技能,如果不會 SQL 的話,可能什么都做不了。你可以把 SQL 當做是一種工具,利用它可以幫助你完成你的工作,創(chuàng)造價值。


      文章結尾有 SQL 小測驗哦!看看你能得幾分?

      ??

      🌴 SQL 介紹

      🌼 什么是 SQL

      SQL 是用于訪問和處理數(shù)據(jù)庫的標準的計算機語言。

      • SQL 指結構化查詢語言
      • SQL 使我們有能力訪問數(shù)據(jù)庫
      • SQL 是一種 ANSI 的標準計算機語言


      SQL 可與數(shù)據(jù)庫程序協(xié)同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他數(shù)據(jù)庫系統(tǒng)。但是由于各種各樣的數(shù)據(jù)庫出現(xiàn),導致很多不同版本的 SQL 語言,為了與 ANSI 標準相兼容,它們必須以相似的方式共同地來支持一些主要的關鍵詞(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等),這些就是我們要學習的SQL基礎。

      🌀 SQL 的類型

      可以把 SQL 分為兩個部分:數(shù)據(jù)操作語言 (DML) 和 數(shù)據(jù)定義語言 (DDL)。

      • 數(shù)據(jù)查詢語言(DQL: Data Query Language)
      • 數(shù)據(jù)操縱語言(DML:Data Manipulation Language)

      🌵 學習 SQL 的作用

      SQL 是一門 ANSI 的標準計算機語言,用來訪問和操作數(shù)據(jù)庫系統(tǒng)。SQL 語句用于取回和更新數(shù)據(jù)庫中的數(shù)據(jù)。

      • SQL 面向數(shù)據(jù)庫執(zhí)行查詢
      • SQL 可從數(shù)據(jù)庫取回數(shù)據(jù)
      • SQL 可在數(shù)據(jù)庫中插入新的記錄
      • SQL 可更新數(shù)據(jù)庫中的數(shù)據(jù)
      • SQL 可從數(shù)據(jù)庫刪除記錄
      • SQL 可創(chuàng)建新數(shù)據(jù)庫
      • SQL 可在數(shù)據(jù)庫中創(chuàng)建新表
      • SQL 可在數(shù)據(jù)庫中創(chuàng)建存儲過程
      • SQL 可在數(shù)據(jù)庫中創(chuàng)建視圖
      • SQL 可以設置表、存儲過程和視圖的權限

      🍄 數(shù)據(jù)庫是什么

      顧名思義,你可以理解為數(shù)據(jù)庫是用來存放數(shù)據(jù)的一個容器。

      打個比方,每個人家里都會有冰箱,冰箱是用來干什么的?冰箱是用來存放食物的地方。

      同樣的,數(shù)據(jù)庫是存放數(shù)據(jù)的地方。正是因為有了數(shù)據(jù)庫后,我們可以直接查找數(shù)據(jù)。例如你每天使用余額寶查看自己的賬戶收益,就是從數(shù)據(jù)庫讀取數(shù)據(jù)后給你的。

      最常見的數(shù)據(jù)庫類型是關系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS):

      RDBMS 是 SQL 的基礎,同樣也是所有現(xiàn)代數(shù)據(jù)庫系統(tǒng)的基礎,比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access等等。

      RDBMS 中的數(shù)據(jù)存儲在被稱為表(tables)的數(shù)據(jù)庫對象中。 是相關的數(shù)據(jù)項的集合,它由列和行組成。

      由于本文主要講解 SQL 基礎,因此對數(shù)據(jù)庫不做過多解釋,只需要大概了解即可。咱們直接開始學習SQL!

      🐥 SQL 基礎語言學習

      在了解 SQL 基礎語句使用之前,我們先講一下 是什么?

      一個數(shù)據(jù)庫通常包含一個或多個表。每個表由一個名字標識(例如“客戶”或者“訂單”)。表包含帶有數(shù)據(jù)的記錄(行)。

      下面的例子是一個名為 “Persons” 的表:

      IdLastNameFirstNameAddressCity
      1AdamsJohnOxford StreetLondon
      2BushGeorgeFifth AvenueNew York
      3CarterThomasChangan StreetBeijing

      上面的表包含三條記錄(每一條對應一個人)和五個列(Id、姓、名、地址和城市)。

      有表才能查詢,那么如何創(chuàng)建這樣一個表?

      🐤 CREATE TABLE – 創(chuàng)建表

      CREATE TABLE 語句用于創(chuàng)建數(shù)據(jù)庫中的表。

      語法:

      CREATE TABLE 表名稱
      (
      列名稱1 數(shù)據(jù)類型,
      列名稱2 數(shù)據(jù)類型,
      列名稱3 數(shù)據(jù)類型,
      ....
      );
      

      數(shù)據(jù)類型(data_type)規(guī)定了列可容納何種數(shù)據(jù)類型。下面的表格包含了SQL中最常用的數(shù)據(jù)類型:

      數(shù)據(jù)類型描述
      integer(size),int(size),smallint(size),tinyint(size)僅容納整數(shù)、在括號內規(guī)定數(shù)字的最大位數(shù)
      decimal(size,d),numeric(size,d)容納帶有小數(shù)的數(shù)字、“size” 規(guī)定數(shù)字的最大位數(shù)、“d” 規(guī)定小數(shù)點右側的最大位數(shù)
      char(size)容納固定長度的字符串(可容納字母、數(shù)字以及特殊字符)、在括號中規(guī)定字符串的長度
      varchar(size)容納可變長度的字符串(可容納字母、數(shù)字以及特殊的字符)、在括號中規(guī)定字符串的最大長度
      date(yyyymmdd)容納日期

      實例:

      本例演示如何創(chuàng)建名為 “Persons” 的表。

      該表包含 5 個列,列名分別是:“Id_P”、“LastName”、“FirstName”、“Address” 以及 “City”:

      CREATE TABLE Persons
      (
      Id_P int,
      LastName varchar(255),
      FirstName varchar(255),
      Address varchar(255),
      City varchar(255)
      );
      

      Id_P 列的數(shù)據(jù)類型是 int,包含整數(shù)。其余 4 列的數(shù)據(jù)類型是 varchar,最大長度為 255 個字符。


      空的 “Persons” 表類似這樣:

      可使用 INSERT INTO 語句向空表寫入數(shù)據(jù)。

      🐑 INSERT – 插入數(shù)據(jù)

      INSERT INTO 語句用于向表格中插入新的行。

      語法:

      INSERT INTO 表名稱 VALUES (1,2,....);
      

      我們也可以指定所要插入數(shù)據(jù)的列:

      INSERT INTO table_name (1,2,...) VALUES (1,2,....);
      

      實例:

      本例演示 “Persons” 表插入記錄的兩種方式:

      1、插入新的行

      INSERT INTO Persons VALUES (1, 'Gates', 'Bill', 'Xuanwumen 10', 'Beijing');
      

      2、在指定的列中插入數(shù)據(jù)

      INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees');
      


      插入成功后,數(shù)據(jù)如下:

      這個數(shù)據(jù)插入之后,是通過 SELECT 語句進行查詢出來的,別急馬上講!

      🐼 SELECT – 查詢數(shù)據(jù)

      SELECT 語句用于從表中選取數(shù)據(jù),結果被存儲在一個結果表中(稱為結果集)。

      語法:

      SELECT * FROM 表名稱;
      

      我們也可以指定所要查詢數(shù)據(jù)的列:

      SELECT 列名稱 FROM 表名稱;
      

      📢 注意: SQL 語句對大小寫不敏感,SELECT 等效于 select。

      實例:

      SQL SELECT * 實例:

      SELECT * FROM Persons;
      


      📢 注意: 星號(*)是選取所有列的快捷方式。

      如需獲取名為 “LastName” 和 “FirstName” 的列的內容(從名為 “Persons” 的數(shù)據(jù)庫表),請使用類似這樣的 SELECT 語句:

      SELECT LastName,FirstName FROM Persons;
      

      🐫 DISTINCT – 去除重復值

      如果一張表中有多行重復數(shù)據(jù),如何去重顯示呢?可以了解下 DISTINCT 。

      語法:

      SELECT DISTINCT 列名稱 FROM 表名稱;
      

      實例:

      如果要從 “LASTNAME” 列中選取所有的值,我們需要使用 SELECT 語句:

      SELECT LASTNAME FROM Persons;
      


      可以發(fā)現(xiàn),在結果集中,Wilson 被列出了多次。

      如需從 “LASTNAME” 列中僅選取唯一不同的值,我們需要使用 SELECT DISTINCT 語句:

      SELECT DISTINCT LASTNAME FROM Persons;
      


      通過上述查詢,結果集中只顯示了一列 Wilson,顯然已經去除了重復列。

      🐸 WHERE – 條件過濾

      如果需要從表中選取指定的數(shù)據(jù),可將 WHERE 子句添加到 SELECT 語句。

      語法:

      SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值;
      

      下面的運算符可在 WHERE 子句中使用:

      操作符描述
      =等于
      <>不等于
      >大于
      <小于
      >=大于等于
      <=小于等于
      BETWEEN在某個范圍內
      LIKE搜索某種模式

      📢 注意: 在某些版本的 SQL 中,操作符 <> 可以寫為 !=。

      實例:

      如果只希望選取居住在城市 “Beijing” 中的人,我們需要向 SELECT 語句添加 WHERE 子句:

      SELECT * FROM Persons WHERE City='Beijing';
      


      📢 注意: SQL 使用單引號來環(huán)繞文本值(大部分數(shù)據(jù)庫系統(tǒng)也接受雙引號)。如果是數(shù)值,請不要使用引號。

      🐹 AND & OR – 運算符

      AND 和 OR 可在 WHERE 子語句中把兩個或多個條件結合起來。

      • 如果第一個條件和第二個條件都成立,則 AND 運算符顯示一條記錄。
      • 如果第一個條件和第二個條件中只要有一個成立,則 OR 運算符顯示一條記錄。

      語法:

      AND 運算符實例:

      SELECT * FROM 表名稱 WHERE 列 運算符 值 AND 列 運算符 值;
      

      OR 運算符實例:

      SELECT * FROM 表名稱 WHERE 列 運算符 值 OR 列 運算符 值;
      

      實例:

      由于 Persons 表數(shù)據(jù)太少,因此增加幾條記錄:

      INSERT INTO Persons VALUES (2, 'Adams', 'John', 'Oxford Street', 'London');
      INSERT INTO Persons VALUES (3, 'Bush', 'George', 'Fifth Avenue', 'New York');
      INSERT INTO Persons VALUES (4, 'Carter', 'Thomas', 'Changan Street', 'Beijing');
      INSERT INTO Persons VALUES (5, 'Carter', 'William', 'Xuanwumen 10', 'Beijing');
      SELECT * FROM Persons;
      


      AND 運算符實例:

      使用 AND 來顯示所有姓為 “Carter” 并且名為 “Thomas” 的人:

      SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter';
      


      OR 運算符實例:

      使用 OR 來顯示所有姓為 “Carter” 或者名為 “Thomas” 的人:

      SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter';
      


      結合 AND 和 OR 運算符:

      我們也可以把 AND 和 OR 結合起來(使用圓括號來組成復雜的表達式):

      SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William') AND LastName='Carter';
      

      🐰 ORDER BY – 排序

      ORDER BY 語句用于根據(jù)指定的列對結果集進行排序,默認按照升序對記錄進行排序,如果您希望按照降序對記錄進行排序,可以使用 DESC 關鍵字。

      語法:

      SELECT * FROM 表名稱 ORDER BY1,2 DESC;
      

      默認排序為 ASC 升序,DESC 代表降序。

      實例:

      以字母順序顯示 LASTNAME 名稱:

      SELECT * FROM Persons ORDER BY LASTNAME;
      


      空值(NULL)默認排序在有值行之后。

      以數(shù)字順序顯示ID_P,并以字母順序顯示 LASTNAME 名稱:

      SELECT * FROM Persons ORDER BY ID_P,LASTNAME;
      


      以數(shù)字降序顯示ID_P

      SELECT * FROM Persons ORDER BY ID_P DESC;
      


      📢 注意: 在第一列中有相同的值時,第二列是以升序排列的。如果第一列中有些值為 null 時,情況也是這樣的。

      🐱 UPDATE – 更新數(shù)據(jù)

      Update 語句用于修改表中的數(shù)據(jù)。

      語法:

      UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值;
      

      實例:

      更新某一行中的一個列:

      目前 Persons 表有很多字段為 null 的數(shù)據(jù),可以通過 UPDATE 為 LASTNAME 是 “Wilson” 的人添加FIRSTNAME:

      UPDATE Persons SET FirstName = 'Fred' WHERE LastName = 'Wilson';
      


      更新某一行中的若干列:

      UPDATE Persons SET ID_P = 6,city= 'London' WHERE LastName = 'Wilson';
      

      🐨 DELETE – 刪除數(shù)據(jù)

      DELETE 語句用于刪除表中的行。

      語法:

      DELETE FROM 表名稱 WHERE 列名稱 =;
      

      實例:

      刪除某行:

      刪除 Persons 表中 LastName 為 “Fred Wilson” 的行:

      DELETE FROM Persons WHERE LastName = 'Wilson';
      


      刪除所有行:

      可以在不刪除表的情況下刪除所有的行。這意味著表的結構、屬性和索引都是完整的:

      DELETE FROM table_name;
      

      🐵 TRUNCATE TABLE – 清除表數(shù)據(jù)

      如果我們僅僅需要除去表內的數(shù)據(jù),但并不刪除表本身,那么我們該如何做呢?

      可以使用 TRUNCATE TABLE 命令(僅僅刪除表格中的數(shù)據(jù)):

      語法:

      TRUNCATE TABLE 表名稱;
      

      實例:

      本例演示如何刪除名為 “Persons” 的表。

      TRUNCATE TABLE persons;
      

      🐯 DROP TABLE – 刪除表

      DROP TABLE 語句用于刪除表(表的結構、屬性以及索引也會被刪除)。

      語法:

      DROP TABLE 表名稱;
      

      實例:

      本例演示如何刪除名為 “Persons” 的表。

      drop table persons;
      


      從上圖可以看出,第一次執(zhí)行刪除時,成功刪除了表 persons,第二次執(zhí)行刪除時,報錯找不到表 persons,說明表已經被刪除了。

      🚀 SQL 高級言語學習

      🚢 LIKE – 查找類似值

      LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

      語法:

      SELECT 列名/(*) FROM 表名稱 WHERE 列名稱 LIKE;
      

      實例:

      Persons 表插入數(shù)據(jù):

      INSERT INTO Persons VALUES (1, 'Gates', 'Bill', 'Xuanwumen 10', 'Beijing');
      INSERT INTO Persons VALUES (2, 'Adams', 'John', 'Oxford Street', 'London');
      INSERT INTO Persons VALUES (3, 'Bush', 'George', 'Fifth Avenue', 'New York');
      INSERT INTO Persons VALUES (4, 'Carter', 'Thomas', 'Changan Street', 'Beijing');
      INSERT INTO Persons VALUES (5, 'Carter', 'William', 'Xuanwumen 10', 'Beijing');
      select * from persons;
      


      1、現(xiàn)在,我們希望從上面的 “Persons” 表中選取居住在以 “N” 開頭的城市里的人:

      SELECT * FROM Persons WHERE City LIKE 'N%';
      


      2、接下來,我們希望從 “Persons” 表中選取居住在以 “g” 結尾的城市里的人:

      SELECT * FROM Persons WHERE City LIKE '%g';
      


      3、接下來,我們希望從 “Persons” 表中選取居住在包含 “l(fā)on” 的城市里的人:

      SELECT * FROM Persons WHERE City LIKE '%on%';
      


      4、通過使用 NOT 關鍵字,我們可以從 “Persons” 表中選取居住在不包含 “l(fā)on” 的城市里的人:

      SELECT * FROM Persons WHERE City NOT LIKE '%on%';
      


      📢注意: “%” 可用于定義通配符(模式中缺少的字母)。

      🚤 IN – 鎖定多個值

      IN 操作符允許我們在 WHERE 子句中規(guī)定多個值。

      語法:

      SELECT 列名/(*) FROM 表名稱 WHERE 列名稱 IN (1,2,3);
      

      實例:

      現(xiàn)在,我們希望從 Persons 表中選取姓氏為 Adams 和 Carter 的人:

      SELECT * FROM Persons WHERE LastName IN ('Adams','Carter');
      

      ?? BETWEEN – 選取區(qū)間數(shù)據(jù)

      操作符 BETWEEN … AND 會選取介于兩個值之間的數(shù)據(jù)范圍。這些值可以是數(shù)值、文本或者日期。

      語法:

      SELECT 列名/(*) FROM 表名稱 WHERE 列名稱 BETWEEN1 AND2;
      

      實例:

      1、查詢以字母順序顯示介于 “Adams”(包括)和 “Carter”(不包括)之間的人:

      SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter';
      


      2、查詢上述結果相反的結果,可以使用 NOT:

      SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter';
      


      📢 注意: 不同的數(shù)據(jù)庫對 BETWEEN…AND 操作符的處理方式是有差異的。

      某些數(shù)據(jù)庫會列出介于 “Adams” 和 “Carter” 之間的人,但不包括 “Adams” 和 “Carter” ;某些數(shù)據(jù)庫會列出介于 “Adams” 和 “Carter” 之間并包括 “Adams” 和 “Carter” 的人;而另一些數(shù)據(jù)庫會列出介于 “Adams” 和 “Carter” 之間的人,包括 “Adams” ,但不包括 “Carter” 。

      所以,請檢查你的數(shù)據(jù)庫是如何處理 BETWEEN…AND 操作符的!

      🚂 AS – 別名

      通過使用 SQL,可以為列名稱和表名稱指定別名(Alias),別名使查詢程序更易閱讀和書寫。

      語法:

      表別名:

      SELECT 列名稱/(*) FROM 表名稱 AS 別名;
      

      列別名:

      SELECT 列名稱 as 別名 FROM 表名稱;
      

      實例:

      使用表名稱別名:

      SELECT p.LastName, p.FirstName
      FROM Persons p 
      WHERE p.LastName='Adams' AND p.FirstName='John';
      


      使用列名別名:

      SELECT LastName "Family", FirstName "Name" FROM Persons;
      


      📢 注意: 實際應用時,這個 AS 可以省略,但是列別名需要加上 " "

      🚁 JOIN – 多表關聯(lián)

      JOIN 用于根據(jù)兩個或多個表中的列之間的關系,從這些表中查詢數(shù)據(jù)。

      有時為了得到完整的結果,我們需要從兩個或更多的表中獲取結果。我們就需要執(zhí)行 join。

      數(shù)據(jù)庫中的表可通過鍵將彼此聯(lián)系起來。主鍵(Primary Key)是一個列,在這個列中的每一行的值都是唯一的。在表中,每個主鍵的值都是唯一的。這樣做的目的是在不重復每個表中的所有數(shù)據(jù)的情況下,把表間的數(shù)據(jù)交叉捆綁在一起。

      如圖,“Id_P” 列是 Persons 表中的的主鍵。這意味著沒有兩行能夠擁有相同的 Id_P。即使兩個人的姓名完全相同,Id_P 也可以區(qū)分他們。

      ?? 為了下面實驗的繼續(xù),我們需要再創(chuàng)建一個表:Orders。

      create table orders (id_o number,orderno number,id_p number);
      insert into orders values(1,11111,1);
      insert into orders values(2,22222,2);
      insert into orders values(3,33333,3);
      insert into orders values(4,44444,4);
      insert into orders values(6,66666,6);
      select * from orders;
      


      如圖,“Id_O” 列是 Orders 表中的的主鍵,同時,“Orders” 表中的 “Id_P” 列用于引用 “Persons” 表中的人,而無需使用他們的確切姓名。

      select * from persons p,orders o where p.id_p=o.id_p;
      


      可以看到,“Id_P” 列把上面的兩個表聯(lián)系了起來。

      語法:

      select 列名
      from 表A
      INNER|LEFT|RIGHT|FULL JOIN 表B
      ON 表A主鍵列 = 表B外鍵列;
      

      不同的 SQL JOIN:

      下面列出了您可以使用的 JOIN 類型,以及它們之間的差異。

      • JOIN: 如果表中有至少一個匹配,則返回行
      • INNER JOIN: 內部連接,返回兩表中匹配的行
      • LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行
      • RIGHT JOIN: 即使左表中沒有匹配,也從右表返回所有的行
      • FULL JOIN: 只要其中一個表中存在匹配,就返回行

      實例:

      如果我們希望列出所有人的定購,可以使用下面的 SELECT 語句:

      SELECT p.LastName, p.FirstName, o.OrderNo
      FROM Persons p
      INNER JOIN Orders o
      ON p.Id_P = o.Id_P
      ORDER BY p.LastName DESC;
      

      🚜 UNION – 合并結果集

      UNION 操作符用于合并兩個或多個 SELECT 語句的結果集。

      UNION 語法:

      SELECT 列名 FROM 表A
      UNION
      SELECT 列名 FROM 表B;
      

      📢注意: UNION 操作符默認為選取不同的值。如果查詢結果需要顯示重復的值,請使用 UNION ALL。

      UNION ALL 語法:

      SELECT 列名 FROM 表A
      UNION ALL
      SELECT 列名 FROM 表B;
      

      另外,UNION 結果集中的列名總是等于 UNION 中第一個 SELECT 語句中的列名。

      為了實驗所需,創(chuàng)建 Person_b 表:

      CREATE TABLE Persons_b
      (
      Id_P int,
      LastName varchar(255),
      FirstName varchar(255),
      Address varchar(255),
      City varchar(255)
      );
      INSERT INTO Persons_b VALUES (1, 'Bill', 'Gates', 'Xuanwumen 10', 'Londo');
      INSERT INTO Persons_b VALUES (2, 'John', 'Adams', 'Oxford Street', 'nBeijing');
      INSERT INTO Persons_b VALUES (3, 'George', 'Bush', 'Fifth Avenue', 'Beijing');
      INSERT INTO Persons_b VALUES (4, 'Thomas', 'Carter', 'Changan Street', 'New York');
      INSERT INTO Persons_b VALUES (5, 'William', 'Carter', 'Xuanwumen 10', 'Beijing');
      select * from persons_b;
      


      實例:

      使用 UNION 命令:

      列出 persons 和 persons_b 中不同的人:

      select * from persons
      UNION
      select * from persons_b;
      


      📢注意: UNION 內部的 SELECT 語句必須擁有相同數(shù)量的列。列也必須擁有相似的數(shù)據(jù)類型。同時,每條 SELECT 語句中的列的順序必須相同。

      🚌 NOT NULL – 非空

      NOT NULL 約束強制列不接受 NULL 值。

      NOT NULL 約束強制字段始終包含值。這意味著,如果不向字段添加值,就無法插入新記錄或者更新記錄。

      語法:

      CREATE TABLE(int NOT NULL
      );
      

      如上,創(chuàng)建一個表,設置列值不能為空。

      實例:

      create table lucifer (id number not null);
      insert into lucifer values (NULL);
      


      📢 注意: 如果插入 NULL 值,則會報錯 ORA-01400 提示無法插入!

      ?? 拓展小知識:NOT NULL 也可以用于查詢條件:

      select * from persons where FirstName is not null;
      


      同理,NULL 也可:

      select * from persons where FirstName is null;
      

      感興趣的朋友,可以自己嘗試一下!

      🚐 VIEW – 視圖

      在 SQL 中,視圖是基于 SQL 語句的結果集的可視化的表。

      視圖包含行和列,就像一個真實的表。視圖中的字段就是來自一個或多個數(shù)據(jù)庫中的真實的表中的字段。我們可以向視圖添加 SQL 函數(shù)、WHERE 以及 JOIN 語句,我們也可以提交數(shù)據(jù),就像這些來自于某個單一的表。

      語法:

      CREATE VIEW 視圖名 AS
      SELECT 列名
      FROM 表名
      WHERE 查詢條件;
      

      📢 注意: 視圖總是顯示最近的數(shù)據(jù)。每當用戶查詢視圖時,數(shù)據(jù)庫引擎通過使用 SQL 語句來重建數(shù)據(jù)。

      實例:

      下面,我們將 Persons 表中住在 Beijing 的人篩選出來創(chuàng)建視圖:

      create view persons_beijing as
      select * from persons where city='Beijing';
      


      查詢上面這個視圖:

      如果需要更新視圖中的列或者其他信息,無需刪除,使用 CREATE OR REPLACE VIEW 選項:

      CREATE OR REPLACE VIEW 視圖名 AS
      SELECT 列名
      FROM 表名
      WHERE 查詢條件;
      

      實例:

      現(xiàn)在需要篩選出,LASTNAME 為 Gates 的記錄:

      create or replace view persons_beijing as
      select * from persons where lastname='Gates';
      



      刪除視圖就比較簡單,跟表差不多,使用 DROP 即可:

      drop view persons_beijing;
      


      ?? 本章要講的高級語言就先到此為止,不宜一次性介紹太多~

      🎯 SQL 常用函數(shù)學習

      SQL 擁有很多可用于計數(shù)和計算的內建函數(shù)。

      函數(shù)的使用語法:

      SELECT function() FROM;
      

      ?? 下面就來看看有哪些常用的函數(shù)!

      🍔 AVG – 平均值

      AVG 函數(shù)返回數(shù)值列的平均值。NULL 值不包括在計算中。

      語法:

      SELECT AVG(列名) FROM 表名;
      

      實例:

      計算 “orderno” 字段的平均值。

      select avg(orderno) from orders;
      


      當然,也可以用在查詢條件中,例如查詢低于平均值的記錄:

      select * from orders where orderno < (select avg(orderno) from orders);
      

      🍕 COUNT – 匯總行數(shù)

      COUNT() 函數(shù)返回匹配指定條件的行數(shù)。

      語法:

      count() 中可以有不同的語法:

      • COUNT(*) :返回表中的記錄數(shù)。
      • COUNT(DISTINCT 列名) :返回指定列的不同值的數(shù)目。
      • COUNT(列名) :返回指定列的值的數(shù)目(NULL 不計入)。
      SELECT COUNT(*) FROM 表名;
      SELECT COUNT(DISTINCT 列名) FROM 表名;
      SELECT COUNT(列名) FROM 表名;
      

      實例:

      COUNT(*) :

      select count(*) from persons;
      


      COUNT(DISTINCT 列名) :

      select count(distinct city) from persons;
      


      COUNT(列名) :

      select count(city) from persons;
      

      🍘 MAX – 最大值

      MAX 函數(shù)返回一列中的最大值。NULL 值不包括在計算中。

      語法:

      SELECT MAX(列名) FROM 表名;
      

      MIN 和 MAX 也可用于文本列,以獲得按字母順序排列的最高或最低值。

      實例:

      select max(orderno) from orders;
      

      🍢 MIN – 最小值

      MIN 函數(shù)返回一列中的最小值。NULL 值不包括在計算中。

      語法:

      SELECT MIN(列名) FROM 表名;
      

      實例:

      select min(orderno) from orders;
      

      🍰 SUM – 求和

      SUM 函數(shù)返回數(shù)值列的總數(shù)(總額)。

      語法:

      SELECT SUM(列名) FROM 表名;
      

      實例:

      select sum(orderno) from orders;
      

      🍪 GROUP BY – 分組

      GROUP BY 語句用于結合合計函數(shù),根據(jù)一個或多個列對結果集進行分組。

      語法:

      SELECT 列名A, 統(tǒng)計函數(shù)(列名B)
      FROM 表名
      WHERE 查詢條件
      GROUP BY 列名A;
      

      實例:

      獲取 Persons 表中住在北京的總人數(shù),根據(jù) LASTNAME 分組:

      select lastname,count(city) from persons 
      where city='Beijing' 
      group by lastname;
      


      如果不加 GROUP BY 則會報錯:

      也就是常見的 ORA-00937 不是單組分組函數(shù)的錯誤。

      🍭 HAVING – 句尾連接

      在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與合計函數(shù)一起使用。

      語法:

      SELECT 列名A, 統(tǒng)計函數(shù)(列名B)
      FROM table_name
      WHERE 查詢條件
      GROUP BY 列名A
      HAVING 統(tǒng)計函數(shù)(列名B) 查詢條件;
      

      實例:

      獲取 Persons 表中住在北京的總人數(shù)大于1的 LASTNAME,根據(jù) LASTNAME 分組:

      select lastname,count(city) from persons 
      where city='Beijing' 
      group by lastname
      having count(city) > 1;
      

      🍷 UCASE/UPPER – 大寫

      UCASE/UPPER 函數(shù)把字段的值轉換為大寫。

      語法:

      select upper(列名) from 表名;
      

      實例:

      選取 “LastName” 和 “FirstName” 列的內容,然后把 “LastName” 列轉換為大寫:

      select upper(lastname),firstname from persons;
      

      🍶 LCASE/LOWER – 小寫

      LCASE/LOWER 函數(shù)把字段的值轉換為小寫。

      語法:

      select lower(列名) from 表名;
      

      實例:

      選取 “LastName” 和 “FirstName” 列的內容,然后把 “LastName” 列轉換為小寫:

      select lower(lastname),firstname from persons;
      

      👛 LEN/LENGTH – 獲取長度

      LEN/LENGTH 函數(shù)返回文本字段中值的長度。

      語法:

      select length(列名) from 表名;
      

      實例:

      獲取 LASTNAME 的值字符長度:

      select length(lastname),lastname from persons;
      

      🍗 ROUND – 數(shù)值取舍

      ROUND 函數(shù)用于把數(shù)值字段舍入為指定的小數(shù)位數(shù)。

      語法:

      select round(列名,精度) from 表名;
      

      實例:

      保留2位:

      select round(1.1314,2) from dual;
      select round(1.1351,2) from dual;
      



      📢 注意:ROUND 取舍是 四舍五入 的!

      取整:

      select round(1.1351,0) from dual;
      select round(1.56,0) from dual;
      

      🍞 NOW/SYSDATE – 當前時間

      NOW/SYSDATE 函數(shù)返回當前的日期和時間。

      語法:

      select sysdate from 表名;
      

      實例:

      獲取當前時間:

      select sysdate from dual;
      


      📢 注意: 如果您在使用 Sql Server 數(shù)據(jù)庫,請使用 getdate() 函數(shù)來獲得當前的日期時間。

      🍺 寫在最后

      上述如果都學完了的話,可以來做個小測驗:SQL 測驗,看看掌握的怎么樣!

      ?? 測驗會被記分:

      每道題的分值是 1 分。在您完成全部的20道題之后,系統(tǒng)會為您的測驗打分,并提供您做錯的題目的正確答案。其中,綠色為正確答案,而紅色為錯誤答案。

      ? 現(xiàn)在就開始測驗! 祝您好運。

        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多