SQL 基礎知識梳理(一)- 資料庫與 SQL(轉)
目錄
一、What's 資料庫
1.資料庫(Database,DB):將大量資料儲存起來,通過計算機加工而成的可以進行高效訪問的資料集合。如:大型-銀行儲存的資訊,小型-電話簿。
2.資料庫管理系統(Batabase Management System,DBMS):用來管理資料庫的計算機系統。
3.關係型資料庫(Relational Database,RDB):目前應用最廣泛的資料庫。
4.結構化查詢語言(Structured Query Language,SQL):專門用於操作 RDB。
5.常見的 5 種關係型資料庫管理系統
①Oracle Database:甲骨文公司
②SQL Server:微軟公司
③DB2:IBM 公司
④PostgreSQL:開源
⑤MySQL:開源
二、資料庫結構
1.伺服器:用於接收並處理其它程式發出的請求的程式(軟體),或者是安裝此類程式的裝置(計算機)。
2.客戶端:向伺服器發出請求的程式(軟體),或者是安裝此類程式的裝置(計算機)。
3.表(table):類似 Excel,由行和列組成的二維表。
4.欄位:表的列(垂直方向)。
5.記錄:表的行(水平方向)。【注意】關係資料庫必須以行為單位進行資料讀寫。
6.單元格:行列交匯處。【注意】與 Excel 不同,一個單元格只能輸入一個數據。
三、SQL 概要
1.SQL 語句:用關鍵字、表名和列名等組合而成的一條語句。
2.3 種SQL 語句種類:
(1)DDL(Data Definition Language,資料定義語言):建立、刪除或修改資料庫以及資料庫中的表等物件。
①CREATE:建立資料庫和表等物件
②DROP:刪除資料庫和表等物件
③ALTER:修改資料庫和表等物件
(2)DML(Data Manipulation Language,資料操作語言):查詢或修改表中的記錄。
①SELECT:查詢表中的資料
②INSERT:向表中插入資料
③UPDATE:修改表中的資料
④DELETE:刪除表中的資料
(3)DCL(Data Control Language,資料控制語言):確認或取消對資料庫中的資料變更的執行操作,以及對使用者的操作資料庫中的物件許可權進行設定。
①COMMIT:確認對資料庫中的資料進行的變更
②ROLLBACK:取消對資料庫中的資料進行的變更
③GRANT:賦予使用者的操作許可權
④REVOKE:取消使用者的操作許可權
【備註】DML 使用最頻繁。
3.SQL 語句書寫規範:
①以分號(;)結尾;
②大小寫不敏感,不區分關鍵字的大小寫;【注意】插入到表中的資料是區分大小寫的,如“HI”、“Hi”和“hi”都不同。
③該系列隨筆將採用“關鍵字大寫,表名和列名的首字母大寫”的格式。
④單詞使用半形空格或換行符隔開
4.常數的書寫方式:
字串、日期:用單引號括起來('),如'Hello','2016-09-24'。
數字:直接書寫,不用加單引號,如:5。
四、建立資料庫與表
1.資料庫建立:
-- 語法:CREATE DATABASE <資料庫名稱>
CREATE DATABASE Shop -- 建立名為 Shop 的資料庫
2.表的建立
-- 語法: -- CREATE TABLE <表名> -- ( -- <列名1> <資料型別> <約束>, -- <列名1> <資料型別> <約束>, -- ... -- <表約束1>, -- <表約束2>, -- ... -- )
-- 建立名為 Shohin 的表 CREATE TABLE Shohin ( shohin_id CHAR(4) NOT NULL, shohin_mei VARCHAR(100) NOT NULL, shohin_bunrui VARCHAR(32) NOT NULL, hanbai_tanka INTEGER , shiire_tanka INTEGER , torokubi DATE , PRIMARY KEY (shohin_id) );
3.命名規則:
①只能使用半形英文字母、數字、下劃線(_)作為資料庫、表和列的名稱;
②規範要求命名以半形英文字元開頭;
③名稱不能重複。
4.資料型別的指定:宣告該列的資料型別,是一種約束。
5.資料型別介紹:
①INTEGER:整型,意味不能儲存小數;
②CHAR:字串型,如 CHAR(10)和 CHAR(100)中的括號表名該列可以儲存的字串的最大長度。它是“定長字串”,如 CHAR(8) 表示在列中插入'abc' 時會自動儲存成 'abc '(後面5個半形空格)的形式;
③VARCHAR:字串型,類似 CHAR,不同的是它是“可變長字串”,如VARCHAR(8) 在插入 'abc',儲存的就是字串 'abc';
④DATE:日期型別;
... ...
6.約束:
①非空約束:NULL 是空白(無記錄)的意思的關鍵字,NOT NULL 表示必須輸入的約束。
②主鍵約束:主鍵是可以確定一行資料的列,一般通過它取特定行的資料,它是唯一的,不允許重複。
... ...
五、刪除和更新表
1.刪除表
-- 語法:DROP TABLE <表名>
DROP TABLE Shohin; -- 刪除名為 Shohin 的表
【注意】被刪的表,無法恢復。
2.更新表
(1)新增列
-- 語法:ALTER TABLE <表名> ADD <列名> <型別>;
ALTER TABLE Shohin ADD Shohin_mei_Kana VARCHAR(100); -- 在 Shohin 中新增名為 Shohin_mei_Kana 型別為 VARCHAR(100) 的列
(2)刪除列
-- 語法:ALTER TABLE <表名> DROP COLUMN <列名>;
ALTER TABLE Shohin DROP COLUMN Shohin_mei_Kana; -- 刪除 Shohin 表中名為 Shohin_mei_Kana 的列
【注意】表定義變更後無法恢復。
SQL用法1.SELECT DISTINCT:去重SELECT DISTINCT:用於查詢表中其唯一不同的值,其用法和SELECET 用法一樣。
2.AND和OR運算子如果第一個條件和第二個條件都成立,則 AND 運算子顯示一條記錄。(和Java中“&&”差不多)如果第一個條件和第二個條件中只要有一個成立,則 OR 運算子顯示一條記錄。(和Java中“||”差不多)在WHERE後面使用,可以組合使用如:SELECT * FROM 表名 WHERE 條件1 AND (條件2 OR 條件2)
3.ORDER BY:排序ORDER BY 關鍵字用於對結果集按照一個列或者多個列進行排序。ORDER BY 關鍵字預設按照升序對記錄進行排序。如果需要按照降序對記錄進行排序,您可以使用 DESC 關鍵字
單列就算了,多列如下:SELECT * FROM 表名 ORDER BY 欄位1 DESC,欄位2;124.INSERT INTO:插入INSERT INTO 語句用於向表中插入新記錄兩種用法如下:
第一種形式無需指定要插入資料的列名,只需提供被插入的值即可(資料列表要一一對應)INSERT INTO table_nameVALUES (value1,value2,value3,...);123第二種形式需要指定列名及被插入的值INSERT INTO table_name (column1,column2,column3,...)VALUES (value1,value2,value3,...);1235.LIKE模糊查詢LIKE 操作符用於在 WHERE 子句中搜索列中的指定模式
萬用字元
萬用字元描述%替代零個或多個字元_替代一個字元[ charlist]字元列中的任何單一字元[^ charlist] 或 [! charlist]不在字元列中的任何單一字元例:1.選取 name 以 "G"、"F" 或 "s" 開始的所有資訊:SELECT * FROM table_name WHERE name REGEXP '^[GFs]‘; 2.name 以 A 到 H 字母開頭的資訊:SELECT * FROM table_name WHERE name REGEXP '^[A-H]'; 3.選取 name 不以 A 到 H 字母開頭的網站:SELECT * FROM table_name WHERE name REGEXP '^[^A-H]';
SELECT 欄位名FROM 表名WHERE 欄位名 LIKE 模糊條件;1236.IN(value1,value2…)和BETWEEN ANDIN 操作符允許您在 WHERE 子句中規定多個值
BETWEEN 操作符選取介於兩個值之間的資料範圍內的值。這些值可以是數值、文字或者日期。
IN 與 = 的異同相同點:均在WHERE中使用作為篩選條件之一、均是等於的含義不同點:IN可以規定多個值,等於規定一個值
JOIN(連線查詢)join 用於把來自兩個或多個表的行結合起來下圖展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相關的 7 種用法
INNER JOIN(內連線)INNER JOIN 關鍵字在表中存在至少一個匹配時返回行。(INNER 可省略)
SELECT column_name(s)FROM table1INNER JOIN table2ON table1.column_name=table2.column_name;1234OUTER JOIN(外連線)OUTER JOIN分為LETF OUTER JOIN和RIGHT OUTER JOINOUTER JOIN 關鍵字從其中一表(table1)中返回所有的行,即使另一個表(table2)中沒有匹配。如果左(右)表中沒有匹配,則結果為 NULL。(OUTER可省略)
SELECT column_name(s)FROM table1LEFT/RIGHT OUTER JOIN table2ON table1.column_name=table2.column_name;12347.INSERT INTO SELECT(複製表資料)INSERT INTO SELECT 語句從一個表複製資料,然後把資料插入到一個已存在的表中。目標表中任何已存在的行都不會受影響。
一個表中複製所有的列插入到另一個已存在的表中:INSERT INTO table2SELECT * FROM table1;
只複製希望的列插入到另一個已存在的表中:INSERT INTO table2(column_name(s))SELECT column_name(s)FROM table1;123456789
8.SQL約束(Constraints)NOT NULL - 指示某列不能儲存 NULL 值。UNIQUE - 保證某列的每行必須有唯一的值。PRIMARY KEY - NOT NULL 和 UNIQUE 的結合。確保某列(或兩個列多個列的結合)有唯一標識,有助於更容易更快速地找到表中的一個特定的記錄。FOREIGN KEY - 保證一個表中的資料匹配另一個表中的值的參照完整性。CHECK - 保證列中的值符合指定的條件。DEFAULT - 規定沒有給列賦值時的預設值。9.CREATE INDEX(建立索引)和DROP INDEX(刪除索引)CREATE INDEX 語句用於在表中建立索引。在不讀取整個表的情況下,索引使資料庫應用程式可以更快地查詢資料。
建立一個簡單的索引。允許使用重複的值:CREATE INDEX index_nameON table_name (column_name);
建立一個唯一的索引。不允許使用重複的值:唯一的索引意味著兩個行不能擁有相同的索引值.CREATE UNIQUE INDEX index_nameON table_name (column_name);
DROP TABLE用法:MySQL:ALTER TABLE table_name DROP INDEX index_name;DB2/Oracle:DROP INDEX index_name;1234567891011121310.ALTER TABLE(修改表)ALTER TABLE 語句用於在已有的表中新增、刪除或修改列。
在表中新增列:ALTER TABLE table_nameADD column_name datatype;
刪除表中的列:ALTER TABLE table_nameDROP COLUMN column_name;
改變表中列的資料型別:ALTER TABLE table_nameMODIFY COLUMN column_name datatype;1234567891011檢視檢視是基於 SQL 語句的結果集的視覺化的表。檢視包含行和列,就像一個真實的表。檢視中的欄位就是來自一個或多個數據庫中的真實的表中的欄位。
您可以向檢視新增 SQL 函式、WHERE 以及 JOIN 語句,也可以呈現資料,就像這些資料來自於某個單一的表一樣
建立檢視CREATE VIEW view_name ASSELECT column_name(s)FROM table_nameWHERE condition;檢視總是顯示最新的資料!每當使用者查詢檢視時,資料庫引擎通過使用檢視的 SQL 語句重建資料
更新檢視CREATE OR REPLACE VIEW view_name ASSELECT column_name(s)FROM table_nameWHERE condition;
查詢檢視SELECT * FROM view_name;
刪除檢視DROP VIEW view_name;1234567891011121314151617函式Aggregate函式Aggregate 函式計算從列中取得的值,返回一個單一的值。
AVG()----返回平均值COUNT()----返回行數FIRST()----返回第一個記錄的值LAST()----返回最後一個記錄的值MAX()----返回最大值MIN()----返回最小值SUM()----返回總和Scalar函式Scalar 函式基於輸入值,返回一個單一的值。
UCASE() ---- 將某個欄位轉換為大寫LCASE() ----將某個欄位轉換為小寫MID() ---- 從某個文字欄位提取字元,MySql 中使用SubString(欄位,1,end) ---- 從某個文字欄位提取字元LEN() ---- 返回某個文字欄位的長度ROUND() ---- 對某個數值欄位進行指定小數位數的四捨五入NOW() ---- 返回當前的系統日期和時間FORMAT() ---- 格式化某個欄位的顯示方式Date函式NOW()----返回當前的日期和時間CURDATE()----返回當前的日期CURTIME()----返回當前的日期DATE()----提取日期或日期/時間表達式的日期部分EXTRACT()----返回日期/時間的單獨部分DATE_ADD()----向日期新增指定的時間間隔DATE_SUB()----從日期中減去指定的時間間隔DATEDIFF()----返回兩個日期之前的天數DATE_FORMAT()----用不同的格式顯示日期/時間————————————————版權宣告:本文為CSDN博主「珠箔飄燈」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。原文連結:https://blog.csdn.net/qq_40205921/article/details/108057192