SQL-結(jié)構(gòu)化查詢(xún)語(yǔ)言

1.SQL簡(jiǎn)介

在這里插入圖片描述

SQL是一種結(jié)構(gòu)化查詢(xún)語(yǔ)言,是專(zhuān)門(mén)為數(shù)據(jù)庫(kù)而建立的操作命令集,是一門(mén)數(shù)據(jù)庫(kù)語(yǔ)言。

對(duì)于數(shù)據(jù)庫(kù)的交互操作離不開(kāi)SQL,SQL為我們管理數(shù)據(jù)庫(kù)提供了極大的方便。

1.1 數(shù)據(jù)庫(kù)用例構(gòu)建
注釋?zhuān)罕疚乃械腟QL程序,都是基于文末的自建數(shù)據(jù)庫(kù)進(jìn)行,大家可以自行下載獲取。
  • 下載文末的create.txt、populate.txt文件
  • 在MySQL命令行客戶(hù)端中運(yùn)行“CREATE DATABASE sample;”,創(chuàng)建sample數(shù)據(jù)庫(kù)
  • 在MySQL命令行客戶(hù)端中運(yùn)行“USE sample;”,轉(zhuǎn)至sample數(shù)據(jù)庫(kù)進(jìn)行后續(xù)操作
  • 在MySQL命令行客戶(hù)端中運(yùn)行create.txt中的SQL語(yǔ)句,創(chuàng)建數(shù)據(jù)表
  • 在MySQL命令行客戶(hù)端中運(yùn)行populate.txt中的SQL語(yǔ)句,將數(shù)據(jù)導(dǎo)入sample數(shù)據(jù)庫(kù)
  • 在MySQL命令行客戶(hù)端中運(yùn)行“SHOW TABLES;”,查看數(shù)據(jù)表創(chuàng)建情況
  • 在MySQL命令行客戶(hù)端中運(yùn)行“select * from Customers;select * from orderitems;select * from orders;select * from products;select * from vendors;”,查看數(shù)據(jù)導(dǎo)入情況
    數(shù)據(jù)庫(kù)

2.SQL總覽

在這里插入圖片描述

SQL語(yǔ)言的講解可以從定義、語(yǔ)法規(guī)則、數(shù)據(jù)類(lèi)型、SQL語(yǔ)法、函數(shù)、高級(jí)查詢(xún)、視圖這七個(gè)方面展開(kāi),但是我們需要知道SQL語(yǔ)言的核心與難點(diǎn)是解決數(shù)據(jù)庫(kù)數(shù)據(jù)查詢(xún)的問(wèn)題,數(shù)據(jù)查詢(xún)也是我們最常用的服務(wù),所以我們要重點(diǎn)掌握這一核心技術(shù)!

3.SQL詳解

3.1數(shù)據(jù)類(lèi)型
在這里插入圖片描述

SQL能夠處理的數(shù)據(jù)類(lèi)型包括以上十幾種,這些數(shù)據(jù)都可以以表格的形式存儲(chǔ)于數(shù)據(jù)庫(kù)中,但是數(shù)據(jù)庫(kù)的海納百川是EXCEL無(wú)法比擬的,這也是為什么公司數(shù)據(jù)的存儲(chǔ)用數(shù)據(jù)庫(kù)的一個(gè)重要原因。

3.2 語(yǔ)法規(guī)則
在這里插入圖片描述

語(yǔ)法規(guī)則是編寫(xiě)SQL語(yǔ)句必須遵守的硬規(guī)則,如果沒(méi)有遵守,則會(huì)運(yùn)行出錯(cuò);所以我們對(duì)SQL程序的檢查首先從它是否滿(mǎn)足語(yǔ)法規(guī)則開(kāi)始。

3.3 函數(shù)
函數(shù)

函數(shù)多用于對(duì)查詢(xún)到的數(shù)據(jù)進(jìn)行處理,與SQL語(yǔ)句結(jié)合使用,所以SQL語(yǔ)言還具有一定的數(shù)據(jù)分析能力。

--求均值
SELECT AVG(列名) FROM 表名;
--記錄條數(shù)
SELECT COUNT(列名) FROM 表名;
--獲取查詢(xún)到的第一條記錄
SELECT FIRST(列名) FROM 表名;
--獲取查詢(xún)到的最后一條記錄
SELECT LAST(列名) FROM 表名;
--獲取查詢(xún)到的最大記錄
SELECT MAX(列名) FROM 表名;
--獲取查詢(xún)到的最小記錄
SELECT MIN(列名) FROM 表名;
--獲取字段總和
SELECT SUM(列名) FORM 表名;

--分組計(jì)算
SELECT 列名,aggregate_function(列名)
FROM 表名
WHERE 條件
GROUP BY 列名;

--分組計(jì)算并篩選符和條件的記錄
SELECT 列名,aggregate_function(列名)
FROM 表名
WHERE 條件
GROUP BY 列名
HAVING aggergate_function(列名) 操作符 值;

--將字段值大寫(xiě)
SELECT UCASE(列名) FROM 表名;
--將字段值小寫(xiě)
SELECT LCASE(列名) FROM 表名;
--提取字段值
SELECT MID(列名,起始位,長(zhǎng)度) FROM 表名;
--獲取字段值長(zhǎng)度
SELECT LEN(列名) FROM 表名;
--對(duì)字段值進(jìn)行四舍五入
SELECT ROUND(列名,小數(shù)位數(shù)) FROM 表名;
--獲取當(dāng)前時(shí)間
SELECT NOW() FROM 表名;
--以規(guī)定格式顯示字段
SELECT FORMAT(列名,格式) FROM 表名;

3.4 SQL語(yǔ)法
SQL

通配符

SQL約束

SQL語(yǔ)法講解的是SQL語(yǔ)言中的保留關(guān)鍵字,也是我們進(jìn)行數(shù)據(jù)庫(kù)操作的直接工具。

SQL語(yǔ)法包括數(shù)據(jù)定義語(yǔ)言(DDL),主要用于數(shù)據(jù)庫(kù)、數(shù)據(jù)表的新建、修改、更新、刪除;以及索引、主鍵、外鍵的創(chuàng)建、刪除;它并非對(duì)數(shù)據(jù)的直接操作。

SQL語(yǔ)法中的數(shù)據(jù)操作語(yǔ)言(DML),是對(duì)于數(shù)據(jù)的直接操作,包括數(shù)據(jù)的增刪改查,其中"查"是核心問(wèn)題。

子句、屬性詞都是服務(wù)于數(shù)據(jù)操作語(yǔ)言(DML)的一些保留關(guān)鍵字,以進(jìn)行更復(fù)雜的數(shù)據(jù)操作。

通配符是與LIKE關(guān)鍵字結(jié)合使用的,用于模糊查找。


DELETE 語(yǔ)句

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

DELTETE FROM 表名 WHERE [條件];
--刪除orders表中的所有記錄
DELETE FROM orders;
DELETE * FROM orders;

--刪除orders表中order_num為20005的記錄
DELETE FROM orders WHERE order_num = 20005;


UPDATE語(yǔ)句

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

UPDATE 表名 SET 列名=新值 WHERE [條件];
--更新某一行中的一列
UPDATE customers SET cust_country = 'CHAIN' WHERE cust_name = Fun4All;

-- 更新某一行中的若干列
UPDATE customers SET cust_country = 'CHAIN',cust_state = 'MI' WHERE cust_name = 'Kids Place';

-- 用一表數(shù)據(jù)更新另一表數(shù)據(jù)
UPDATE customers SET A.cust_zip = B.order_date FROM customers A,orders B WHERE A.cust_id  = B.cust_id;

INSERT INTO 語(yǔ)句

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

--為所有列插入數(shù)據(jù)
INSERT INTO 表名 VALUES(值1,值2,...);

--為若干列插入數(shù)據(jù)
INSERT INTO 表名 (列名1,列名2,...) VALUES(值1,值2,...);
--為所有列插入數(shù)據(jù)
INSERT INTO orderitems VALUES(20005,1,'BRO3',254,11.99);

--為若干列插入數(shù)據(jù)
INSERT INTO orderitems (order_item,quantity) VALUES(3,199);

SELECT語(yǔ)句

SELECT語(yǔ)句用于從表中選取數(shù)據(jù)

--獲取某些字段
SELECT 列名 FROM 表名;
--獲取全部記錄
SELECT * FROM 表名;

--對(duì)獲取的字段去重
SELECT DISTINCT 列名 FROM 表名;

--按條件查詢(xún)數(shù)據(jù)表
SELECT 列名 FROM 表名 WHERE 列名 運(yùn)算符 值;
SELECT 列名 FROM 表名 WHERE 條件1 AND 條件2;
SELECT 列名 FROM 表名 WHERE 條件1 OR 條件2;
SELECT 列名 FROM 表名 WHERE 列名 IS NULL;
SELECT 列名 FROM 表名 WHERE 列名 IS NOT NULL;

--對(duì)查詢(xún)到的數(shù)據(jù)分組
SELECT 列名 FROM 表名 ORDER BY 列名;
SELECT 列名 FROM 表名 ORDER BY 列名 DESC;
SELECT 列名 FROM 表名 ORDER BY 列名1 DESC,列名2 ASC;
SELECT 列名 FROM 表名 WHERE 列名 LIKE 模式;
SELECT 列名 FROM 表名 WHERE 列名 NOT LIKE 模式;
SELECT 列名 FROM 表名 WHERE 列名 IN (value1,value2,...);
SELECT 列名 FROM 表名 WHERE 列名 BETWEEN value1 AND value2;

--獲取前N個(gè)數(shù)據(jù)記錄
SELECT TOP 個(gè)數(shù) 列名 FROM 表名;

--重命名數(shù)據(jù)表
SELECT 列名 FROM 表名 AS 新表名;
--重命名字段
SELECT 列名 AS 新列名 FROM 表名;

--兩表查詢(xún)
SELECT 列名 FROM 表名1,表名2 WHERE 條件;

--數(shù)據(jù)表復(fù)制
SELECT 列名 INTO 新表名 [IN externaldatabase] FROM 舊表名;

SELECT 字段 (查詢(xún)字段)
FROM 表名(查詢(xún)表名)
WHERE 條件(篩選條件)
GROUP BY 字段(對(duì)結(jié)果分組)
ORDER BY 字段(按字段排序)
HAVING 條件(過(guò)濾分組條件)
LIMIT NUM (限制函數(shù));

CREATE語(yǔ)句

CREATE語(yǔ)句可以用于創(chuàng)建數(shù)據(jù)庫(kù)、數(shù)據(jù)表

--創(chuàng)建數(shù)據(jù)庫(kù)
CREATE DATABASE 數(shù)據(jù)庫(kù)名;

--創(chuàng)建數(shù)據(jù)表
CREATE TABLE 表名1
(
列名稱(chēng)1 數(shù)據(jù)類(lèi)型(size),
列名稱(chēng)2 數(shù)據(jù)類(lèi)型(size),
列名稱(chēng)3 數(shù)據(jù)類(lèi)型(size) NOT NULL,
列名稱(chēng)4 數(shù)據(jù)類(lèi)型(size) DEFAULT 值,
列名稱(chēng)5 數(shù)據(jù)類(lèi)型(size) AUTO_INCREMENT,
CHECK (列名稱(chēng)>0),
UNIQUE(列名稱(chēng)3),
PRIMARY KEY (列名稱(chēng)4),
FOREIGN KEY (列名4) REFERENCES 表名2(列名4),
...
);

DROP語(yǔ)句

DROP語(yǔ)句可以刪除索引、表和數(shù)據(jù)庫(kù)

--刪除索引
DROP INDEX index_name ON table_name;
DROP INDEX table_name.index_name;
DROP INDEX index_name;
ALTER TABLE table_name DROP INDEX index_name;
 
--刪除數(shù)據(jù)表
DROP TABLE 表名;

--刪除數(shù)據(jù)庫(kù)
DROP DATABASE 數(shù)據(jù)庫(kù)名;

ALTER語(yǔ)句

ALTER TABLE語(yǔ)句用于在已有的表中添加、修改或刪除行

--添加字段
ALTER TABLE table_name ADD column_name datatype;

--刪除字段
ALTER TABLE table_name DROP COLUMN column_name;

--修改字段數(shù)據(jù)類(lèi)型
ALTER TABLE table_name ALTER COLUMN column_name datatype;

3.5 高級(jí)查詢(xún)
在這里插入圖片描述

高級(jí)查詢(xún)包括組合查詢(xún)、子查詢(xún)、聯(lián)結(jié)表;用于實(shí)現(xiàn)邏輯更復(fù)雜的數(shù)據(jù)查詢(xún)。

--組合查找
SELECT 列名1 FROM 表名1 UNION SELECT 列名2 FROM 表名2;
SELECT 列名1 FROM 表名1 UNION ALL SELECT 列名2 FROM 表名2;

--子查找
SELECT 列名1 FROM 表名1 WHERE 列名2 = (SELECT 列名3 FROM 表名2 WHERE 條件);

--聯(lián)結(jié)表:多表查找
SELECT 列名 FROM 表名1 INNER JOIN 表名2 ON 條件;
SELECT 列名 FROM 表名1 LEFT JOIN 表名2 ON 條件;
SELECT 列名 FROM 表名1 RIGHT JOIN 表名2 ON 條件;
SELECT 列名 FROM 表名1 FULL JOIN 表名2 ON 條件;
3.6 視圖
視圖

視圖相當(dāng)于查詢(xún)數(shù)據(jù)的可視化。
視圖包含行和列,就像一個(gè)真實(shí)的表,但數(shù)據(jù)庫(kù)的設(shè)計(jì)和結(jié)構(gòu)并不會(huì)受到視圖中的函數(shù)、WHERE或JOIN語(yǔ)句的影響。

CREATE VIEW語(yǔ)句

CREATE VIEW語(yǔ)句用于創(chuàng)建視圖

CREATE VIEW view_name AS SELECT 列名 FROM 表名 WHERE 條件;

DROP VIEW view_name;

UPDATE view_name SET 列名 = 值 WHERE 條件;

INSERT INTO view_name VALUES(value1,value2,...);

DELETE FROM view_name WHERE 條件;

4.事務(wù)

將若干SQL語(yǔ)句打包在一起,共同執(zhí)行一個(gè)完整的任務(wù),這就是事務(wù),相當(dāng)于多條SQL語(yǔ)句的集合。

  • 在MySQL中只有使用了Innodb數(shù)據(jù)庫(kù)引擎的數(shù)據(jù)庫(kù)或表才支持事務(wù)
  • 事務(wù)用來(lái)維護(hù)數(shù)據(jù)庫(kù)的完整性,保證成批的SQL語(yǔ)句要么全部執(zhí)行,要么全部不執(zhí)行
  • 事務(wù)用來(lái)管理INSERT、UPDATE、DELETE語(yǔ)句

事務(wù)具有以下特性:

  • 原子性:一個(gè)事務(wù)要么全部被執(zhí)行,要么全部不執(zhí)行
  • 一致性:在事務(wù)開(kāi)始之前和事務(wù)結(jié)束之后,數(shù)據(jù)庫(kù)的完整性未被破壞
  • 隔離性:數(shù)據(jù)庫(kù)允許多個(gè)事務(wù)同時(shí)對(duì)其數(shù)據(jù)進(jìn)行讀寫(xiě)和修改的能力
  • 持久性:事務(wù)處理結(jié)束后,對(duì)數(shù)據(jù)的修改是永久的。

事務(wù)控制語(yǔ)句:

  • BEGIN:開(kāi)始一個(gè)事務(wù)
  • ROLLBACK:回滾事務(wù)
  • COMMIT:提交事務(wù)
  • SET AUTOCOMMIT = 0:禁止自動(dòng)提交
  • SET AUTOCOMMIT = 1:?jiǎn)?dòng)自動(dòng)提交

5.附件下載

SQL操作用例

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容