當(dāng)前位置:首頁(yè) > IT技術(shù) > 數(shù)據(jù)庫(kù) > 正文

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??
2021-09-13 10:20:28

目錄

???? 前言

SQL語(yǔ)言有40多年的歷史,從它被應(yīng)用至今幾乎無(wú)處不在。我們消費(fèi)的每一筆支付記錄,收集的每一條用戶信息,發(fā)出去的每一條消息,都會(huì)使用數(shù)據(jù)庫(kù)或與其相關(guān)的產(chǎn)品來(lái)存儲(chǔ),而操縱數(shù)據(jù)庫(kù)的語(yǔ)言正是 SQL !
?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_oracle
SQL 對(duì)于現(xiàn)在的互聯(lián)網(wǎng)公司生產(chǎn)研發(fā)等崗位幾乎是一個(gè)必備技能,如果不會(huì) SQL 的話,可能什么都做不了。你可以把 SQL 當(dāng)做是一種工具,利用它可以幫助你完成你的工作,創(chuàng)造價(jià)值。

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)_02
文章結(jié)尾有 SQL 小測(cè)驗(yàn)哦!看看你能得幾分?

?? 點(diǎn)我跳轉(zhuǎn)到 SQL 測(cè)驗(yàn)!

???? SQL 介紹

???? 什么是 SQL

SQL 是用于訪問(wèn)和處理數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)的計(jì)算機(jī)語(yǔ)言。

  • SQL 指結(jié)構(gòu)化查詢語(yǔ)言
  • SQL 使我們有能力訪問(wèn)數(shù)據(jù)庫(kù)
  • SQL 是一種 ANSI 的標(biāo)準(zhǔn)計(jì)算機(jī)語(yǔ)言

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_oracle_03
SQL 可與數(shù)據(jù)庫(kù)程序協(xié)同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他數(shù)據(jù)庫(kù)系統(tǒng)。但是由于各種各樣的數(shù)據(jù)庫(kù)出現(xiàn),導(dǎo)致很多不同版本的 SQL 語(yǔ)言,為了與 ANSI 標(biāo)準(zhǔn)相兼容,它們必須以相似的方式共同地來(lái)支持一些主要的關(guān)鍵詞(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等),這些就是我們要學(xué)習(xí)的SQL基礎(chǔ)。

???? SQL 的類型

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

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

???? 學(xué)習(xí) SQL 的作用

SQL 是一門 ANSI 的標(biāo)準(zhǔn)計(jì)算機(jī)語(yǔ)言,用來(lái)訪問(wèn)和操作數(shù)據(jù)庫(kù)系統(tǒng)。SQL 語(yǔ)句用于取回和更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)。

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

???? 數(shù)據(jù)庫(kù)是什么

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

打個(gè)比方,每個(gè)人家里都會(huì)有冰箱,冰箱是用來(lái)干什么的?冰箱是用來(lái)存放食物的地方。
?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_表名_04
同樣的,數(shù)據(jù)庫(kù)是存放數(shù)據(jù)的地方。正是因?yàn)橛辛藬?shù)據(jù)庫(kù)后,我們可以直接查找數(shù)據(jù)。例如你每天使用余額寶查看自己的賬戶收益,就是從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)后給你的。

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

RDBMS 是 SQL 的基礎(chǔ),同樣也是所有現(xiàn)代數(shù)據(jù)庫(kù)系統(tǒng)的基礎(chǔ),比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access等等。
?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_表名_05
RDBMS 中的數(shù)據(jù)存儲(chǔ)在被稱為表(tables)的數(shù)據(jù)庫(kù)對(duì)象中。 是相關(guān)的數(shù)據(jù)項(xiàng)的集合,它由列和行組成。

由于本文主要講解 SQL 基礎(chǔ),因此對(duì)數(shù)據(jù)庫(kù)不做過(guò)多解釋,只需要大概了解即可。咱們直接開(kāi)始學(xué)習(xí)SQL!

???? SQL 基礎(chǔ)語(yǔ)言學(xué)習(xí)

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

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

下面的例子是一個(gè)名為 “Persons” 的表:

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

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

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

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

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

語(yǔ)法:

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ù)、在括號(hào)內(nèi)規(guī)定數(shù)字的最大位數(shù)
decimal(size,d),numeric(size,d) 容納帶有小數(shù)的數(shù)字、“size” 規(guī)定數(shù)字的最大位數(shù)、“d” 規(guī)定小數(shù)點(diǎn)右側(cè)的最大位數(shù)
char(size) 容納固定長(zhǎng)度的字符串(可容納字母、數(shù)字以及特殊字符)、在括號(hào)中規(guī)定字符串的長(zhǎng)度
varchar(size) 容納可變長(zhǎng)度的字符串(可容納字母、數(shù)字以及特殊的字符)、在括號(hào)中規(guī)定字符串的最大長(zhǎng)度
date(yyyymmdd) 容納日期

實(shí)例:

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

該表包含 5 個(gè)列,列名分別是:“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,最大長(zhǎng)度為 255 個(gè)字符。
?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)_06
?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_表名_07
空的 “Persons” 表類似這樣:
?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_08
可使用 INSERT INTO 語(yǔ)句向空表寫入數(shù)據(jù)。

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

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

語(yǔ)法:

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

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

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

實(shí)例:

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

1、插入新的行

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

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

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_oracle_09
插入成功后,數(shù)據(jù)如下:
?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_10
這個(gè)數(shù)據(jù)插入之后,是通過(guò) SELECT 語(yǔ)句進(jìn)行查詢出來(lái)的,別急馬上講!

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

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

語(yǔ)法:

SELECT * FROM 表名稱;

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

SELECT 列名稱 FROM 表名稱;

???? 注意: SQL 語(yǔ)句對(duì)大小寫不敏感,SELECT 等效于 select。

實(shí)例:

SQL SELECT * 實(shí)例:

SELECT * FROM Persons;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_表名_11
???? 注意: 星號(hào)(*)是選取所有列的快捷方式。

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

SELECT LastName,FirstName FROM Persons;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_oracle_12

???? DISTINCT – 去除重復(fù)值

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

語(yǔ)法:

SELECT DISTINCT 列名稱 FROM 表名稱;

實(shí)例:

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

SELECT LASTNAME FROM Persons;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_oracle_13
可以發(fā)現(xiàn),在結(jié)果集中,Wilson 被列出了多次。

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

SELECT DISTINCT LASTNAME FROM Persons;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_14
通過(guò)上述查詢,結(jié)果集中只顯示了一列 Wilson,顯然已經(jīng)去除了重復(fù)列。

???? WHERE – 條件過(guò)濾

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

語(yǔ)法:

SELECT 列名稱 FROM 表名稱 WHERE 列 運(yùn)算符 值;

下面的運(yùn)算符可在 WHERE 子句中使用:

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

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

實(shí)例:

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

SELECT * FROM Persons WHERE City='Beijing';

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_15
???? 注意: SQL 使用單引號(hào)來(lái)環(huán)繞文本值(大部分?jǐn)?shù)據(jù)庫(kù)系統(tǒng)也接受雙引號(hào))。如果是數(shù)值,請(qǐng)不要使用引號(hào)。

???? AND & OR – 運(yùn)算符

AND 和 OR 可在 WHERE 子語(yǔ)句中把兩個(gè)或多個(gè)條件結(jié)合起來(lái)。

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

語(yǔ)法:

AND 運(yùn)算符實(shí)例:

SELECT * FROM 表名稱 WHERE 列 運(yùn)算符 值 AND 列 運(yùn)算符 值;

OR 運(yùn)算符實(shí)例:

SELECT * FROM 表名稱 WHERE 列 運(yùn)算符 值 OR 列 運(yùn)算符 值;

實(shí)例:

由于 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;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_sql_16
AND 運(yùn)算符實(shí)例:

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

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)_17
OR 運(yùn)算符實(shí)例:

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

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_oracle_18
結(jié)合 AND 和 OR 運(yùn)算符:

我們也可以把 AND 和 OR 結(jié)合起來(lái)(使用圓括號(hào)來(lái)組成復(fù)雜的表達(dá)式):

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_19

???? ORDER BY – 排序

ORDER BY 語(yǔ)句用于根據(jù)指定的列對(duì)結(jié)果集進(jìn)行排序,默認(rèn)按照升序?qū)τ涗涍M(jìn)行排序,如果您希望按照降序?qū)τ涗涍M(jìn)行排序,可以使用 DESC 關(guān)鍵字。

語(yǔ)法:

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

默認(rèn)排序?yàn)?ASC 升序,DESC 代表降序。

實(shí)例:

以字母順序顯示 LASTNAME 名稱:

SELECT * FROM Persons ORDER BY LASTNAME;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_表名_20
空值(NULL)默認(rèn)排序在有值行之后。

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

SELECT * FROM Persons ORDER BY ID_P,LASTNAME;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)_21
以數(shù)字降序顯示ID_P

SELECT * FROM Persons ORDER BY ID_P DESC;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)_22
???? 注意: 在第一列中有相同的值時(shí),第二列是以升序排列的。如果第一列中有些值為 null 時(shí),情況也是這樣的。

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

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

語(yǔ)法:

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

實(shí)例:

更新某一行中的一個(gè)列:

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

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_23
更新某一行中的若干列:

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_24

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

DELETE 語(yǔ)句用于刪除表中的行。

語(yǔ)法:

DELETE FROM 表名稱 WHERE 列名稱 =;

實(shí)例:

刪除某行:

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

DELETE FROM Persons WHERE LastName = 'Wilson';

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_表名_25
刪除所有行:

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

DELETE FROM table_name;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_oracle_26

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

如果我們僅僅需要除去表內(nèi)的數(shù)據(jù),但并不刪除表本身,那么我們?cè)撊绾巫瞿兀?/p>

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

語(yǔ)法:

TRUNCATE TABLE 表名稱;

實(shí)例:

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

TRUNCATE TABLE persons;

???? DROP TABLE – 刪除表

DROP TABLE 語(yǔ)句用于刪除表(表的結(jié)構(gòu)、屬性以及索引也會(huì)被刪除)。

語(yǔ)法:

DROP TABLE 表名稱;

實(shí)例:

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

drop table persons;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)_27
從上圖可以看出,第一次執(zhí)行刪除時(shí),成功刪除了表 persons,第二次執(zhí)行刪除時(shí),報(bào)錯(cuò)找不到表 persons,說(shuō)明表已經(jīng)被刪除了。

???? SQL 高級(jí)言語(yǔ)學(xué)習(xí)

???? LIKE – 查找類似值

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

語(yǔ)法:

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

實(shí)例:

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;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_oracle_28
1、現(xiàn)在,我們希望從上面的 “Persons” 表中選取居住在以 “N” 開(kāi)頭的城市里的人:

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_sql_29
2、接下來(lái),我們希望從 “Persons” 表中選取居住在以 “g” 結(jié)尾的城市里的人:

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_sql_30
3、接下來(lái),我們希望從 “Persons” 表中選取居住在包含 “l(fā)on” 的城市里的人:

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_oracle_31
4、通過(guò)使用 NOT 關(guān)鍵字,我們可以從 “Persons” 表中選取居住在不包含 “l(fā)on” 的城市里的人:

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_32
????注意: “%” 可用于定義通配符(模式中缺少的字母)。

???? IN – 鎖定多個(gè)值

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

語(yǔ)法:

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

實(shí)例:

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

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_oracle_33

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

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

語(yǔ)法:

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

實(shí)例:

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

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_34
2、查詢上述結(jié)果相反的結(jié)果,可以使用 NOT:

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_oracle_35
???? 注意: 不同的數(shù)據(jù)庫(kù)對(duì) BETWEEN…AND 操作符的處理方式是有差異的。

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

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

???? AS – 別名

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

語(yǔ)法:

表別名:

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

列別名:

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

實(shí)例:

使用表名稱別名:

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_表名_36
使用列名別名:

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_表名_37
???? 注意: 實(shí)際應(yīng)用時(shí),這個(gè) AS 可以省略,但是列別名需要加上 " "

???? JOIN – 多表關(guān)聯(lián)

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

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

數(shù)據(jù)庫(kù)中的表可通過(guò)鍵將彼此聯(lián)系起來(lái)。主鍵(Primary Key)是一個(gè)列,在這個(gè)列中的每一行的值都是唯一的。在表中,每個(gè)主鍵的值都是唯一的。這樣做的目的是在不重復(fù)每個(gè)表中的所有數(shù)據(jù)的情況下,把表間的數(shù)據(jù)交叉捆綁在一起。
?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_38
如圖,“Id_P” 列是 Persons 表中的的主鍵。這意味著沒(méi)有兩行能夠擁有相同的 Id_P。即使兩個(gè)人的姓名完全相同,Id_P 也可以區(qū)分他們。

?? 為了下面實(shí)驗(yàn)的繼續(xù),我們需要再創(chuàng)建一個(gè)表: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;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_39
如圖,“Id_O” 列是 Orders 表中的的主鍵,同時(shí),“Orders” 表中的 “Id_P” 列用于引用 “Persons” 表中的人,而無(wú)需使用他們的確切姓名。

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_40
可以看到,“Id_P” 列把上面的兩個(gè)表聯(lián)系了起來(lái)。

語(yǔ)法:

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

不同的 SQL JOIN:

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

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

實(shí)例:

如果我們希望列出所有人的定購(gòu),可以使用下面的 SELECT 語(yǔ)句:

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;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)_41

???? UNION – 合并結(jié)果集

UNION 操作符用于合并兩個(gè)或多個(gè) SELECT 語(yǔ)句的結(jié)果集。

UNION 語(yǔ)法:

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

????注意: UNION 操作符默認(rèn)為選取不同的值。如果查詢結(jié)果需要顯示重復(fù)的值,請(qǐng)使用 UNION ALL。

UNION ALL 語(yǔ)法:

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

另外,UNION 結(jié)果集中的列名總是等于 UNION 中第一個(gè) SELECT 語(yǔ)句中的列名。

為了實(shí)驗(yàn)所需,創(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;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_sql_42
實(shí)例:

使用 UNION 命令:

列出 persons 和 persons_b 中不同的人:

select * from persons
UNION
select * from persons_b;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)_43
????注意: UNION 內(nèi)部的 SELECT 語(yǔ)句必須擁有相同數(shù)量的列。列也必須擁有相似的數(shù)據(jù)類型。同時(shí),每條 SELECT 語(yǔ)句中的列的順序必須相同。

???? NOT NULL – 非空

NOT NULL 約束強(qiáng)制列不接受 NULL 值。

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

語(yǔ)法:

CREATE TABLE(int NOT NULL
);

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

實(shí)例:

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_44
???? 注意: 如果插入 NULL 值,則會(huì)報(bào)錯(cuò) ORA-01400 提示無(wú)法插入!

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

select * from persons where FirstName is not null;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_表名_45
同理,NULL 也可:

select * from persons where FirstName is null;

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

???? VIEW – 視圖

在 SQL 中,視圖是基于 SQL 語(yǔ)句的結(jié)果集的可視化的表。

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

語(yǔ)法:

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

???? 注意: 視圖總是顯示最近的數(shù)據(jù)。每當(dāng)用戶查詢視圖時(shí),數(shù)據(jù)庫(kù)引擎通過(guò)使用 SQL 語(yǔ)句來(lái)重建數(shù)據(jù)。

實(shí)例:

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

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_表名_46
查詢上面這個(gè)視圖:
?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_sql_47
如果需要更新視圖中的列或者其他信息,無(wú)需刪除,使用 CREATE OR REPLACE VIEW 選項(xiàng):

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

實(shí)例:

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

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_oracle_48
?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_sql_49
刪除視圖就比較簡(jiǎn)單,跟表差不多,使用 DROP 即可:

drop view persons_beijing;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_oracle_50
?? 本章要講的高級(jí)語(yǔ)言就先到此為止,不宜一次性介紹太多~

???? SQL 常用函數(shù)學(xué)習(xí)

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

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

SELECT function() FROM;

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

???? AVG – 平均值

AVG 函數(shù)返回?cái)?shù)值列的平均值。NULL 值不包括在計(jì)算中。

語(yǔ)法:

SELECT AVG(列名) FROM 表名;

實(shí)例:

計(jì)算 “orderno” 字段的平均值。

select avg(orderno) from orders;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_表名_51
當(dāng)然,也可以用在查詢條件中,例如查詢低于平均值的記錄:

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_sql_52

???? COUNT – 匯總行數(shù)

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

語(yǔ)法:

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

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

實(shí)例:

COUNT(*) :

select count(*) from persons;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_sql_53
COUNT(DISTINCT 列名) :

select count(distinct city) from persons;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_表名_54
COUNT(列名) :

select count(city) from persons;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_sql_55

???? MAX – 最大值

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

語(yǔ)法:

SELECT MAX(列名) FROM 表名;

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

實(shí)例:

select max(orderno) from orders;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_56

???? MIN – 最小值

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

語(yǔ)法:

SELECT MIN(列名) FROM 表名;

實(shí)例:

select min(orderno) from orders;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)_57

???? SUM – 求和

SUM 函數(shù)返回?cái)?shù)值列的總數(shù)(總額)。

語(yǔ)法:

SELECT SUM(列名) FROM 表名;

實(shí)例:

select sum(orderno) from orders;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_58

???? GROUP BY – 分組

GROUP BY 語(yǔ)句用于結(jié)合合計(jì)函數(shù),根據(jù)一個(gè)或多個(gè)列對(duì)結(jié)果集進(jìn)行分組。

語(yǔ)法:

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

實(shí)例:

獲取 Persons 表中住在北京的總?cè)藬?shù),根據(jù) LASTNAME 分組:

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)庫(kù)_59
如果不加 GROUP BY 則會(huì)報(bào)錯(cuò):
?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)_60
也就是常見(jiàn)的 ORA-00937 不是單組分組函數(shù)的錯(cuò)誤。

???? HAVING – 句尾連接

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

語(yǔ)法:

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

實(shí)例:

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

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_sql_61

???? UCASE/UPPER – 大寫

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

語(yǔ)法:

select upper(列名) from 表名;

實(shí)例:

選取 “LastName” 和 “FirstName” 列的內(nèi)容,然后把 “LastName” 列轉(zhuǎn)換為大寫:

select upper(lastname),firstname from persons;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_oracle_62

???? LCASE/LOWER – 小寫

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

語(yǔ)法:

select lower(列名) from 表名;

實(shí)例:

選取 “LastName” 和 “FirstName” 列的內(nèi)容,然后把 “LastName” 列轉(zhuǎn)換為小寫:

select lower(lastname),firstname from persons;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)_63

???? LEN/LENGTH – 獲取長(zhǎng)度

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

語(yǔ)法:

select length(列名) from 表名;

實(shí)例:

獲取 LASTNAME 的值字符長(zhǎng)度:

select length(lastname),lastname from persons;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_表名_64

???? ROUND – 數(shù)值取舍

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

語(yǔ)法:

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

實(shí)例:

保留2位:

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_表名_65
?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)_66
???? 注意:ROUND 取舍是 四舍五入 的!

取整:

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

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)_67

???? NOW/SYSDATE – 當(dāng)前時(shí)間

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

語(yǔ)法:

select sysdate from 表名;

實(shí)例:

獲取當(dāng)前時(shí)間:

select sysdate from dual;

?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)_68
???? 注意: 如果您在使用 Sql Server 數(shù)據(jù)庫(kù),請(qǐng)使用 getdate() 函數(shù)來(lái)獲得當(dāng)前的日期時(shí)間。

???? 寫在最后

上述如果都學(xué)完了的話,可以來(lái)做個(gè)小測(cè)驗(yàn):SQL 測(cè)驗(yàn),看看掌握的怎么樣!

?? 測(cè)驗(yàn)會(huì)被記分:

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

? 現(xiàn)在就開(kāi)始測(cè)驗(yàn)! 祝您好運(yùn)。

?? 將你的得分寫在下方的投票欄吧,讓我看看大家的水平如何???


本次分享到此結(jié)束啦~

如果覺(jué)得文章對(duì)你有幫助,點(diǎn)贊、收藏、關(guān)注、評(píng)論,一鍵四連支持,你的支持就是我創(chuàng)作最大的動(dòng)力。

?? 技術(shù)交流可以 關(guān)注公眾號(hào):Lucifer三思而后行 ??
?? 爆肝3天!兩萬(wàn)字圖文 SQL 零基礎(chǔ)入門,不怕你學(xué)不會(huì),就怕你不收藏!??_數(shù)據(jù)_69

本文摘自 :https://blog.51cto.com/l

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >