1. 程式人生 > 其它 >SQL 基礎知識梳理(一)- 資料庫與 SQL(轉)

SQL 基礎知識梳理(一)- 資料庫與 SQL(轉)

目錄

一、What's 資料庫

  1.資料庫(Database,DB):將大量資料儲存起來,通過計算機加工而成的可以進行高效訪問的資料集合。如:大型-銀行儲存的資訊,小型-電話簿。

  2.資料庫管理系統(Batabase Management System,DBMS):用來管理資料庫的計算機系統。

  3.關係型資料庫(Relational Database,RDB):目前應用最廣泛的資料庫。

  4.結構化查詢語言(Structured Query Language,SQL):專門用於操作 RDB。

  5.常見的 5 種關係型資料庫管理系統

(Relational Database Management System,RDBMS):

    ①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