Sql介紹 與 Sql基礎查詢

ihav2carryon發表於2024-09-26

Sql介紹 與 Sql基礎查詢

SQL

SQL也稱為結構化查詢語言(Structure Query Language),是一種用於管理和操作關係型資料庫的標準化計算機語言,SQL語言廣泛應用於各種關係型資料庫系統(RDBMS)如Mysql,Oracle,Microsoft SQL Server等等

SQL對資料庫的操作

  1. 資料查詢:透過SELECT語句從資料庫中檢索資料
  2. 資料定義(DDL):其中包括CREATE,ALTER,DROP對資料庫進行定義和修改資料庫結構
  3. 資料操控(DML):包括INSERT,UPDATE,DELETE語句插入,更新,刪除資料
  4. 資料控制:透過GRANT,REVOKE語句管理使用者許可權和範圍控制

SQL的特點

  • 標準化:SQL是一個標準化的語言,各大資料庫廠商都支援SQL語言
  • 高度非過程化:與過程化的與語言不同,SQL不需要指定特點演算法或步驟完成任務.SQL語句更專注描述所需結果,而非如何得到所需結果
  • 集合操作:SQL支援集合操作,即一次可以處理多行資料.一個SELECT語句就可以返回多條記錄,INSERT,UPDATE也可以一次影響多行資料
  • 事務支援:SQL支援事務處理,允許將一組相關資料,作為一個完整的單元來執行.事務具有:原子性(Atomicity),一致性(Consistency),隔離性(Isolation),永續性(Durability)(關於這些性質在之後的事務章節會詳細講解),ACID,這四個性質確保了資料的一致性與可靠性
  • 整合能力:SQL可以與其他 程式語言相互整合,使得開發者能夠在應用程式中嵌入SQL程式碼,實現高效操作,其中典型的屬Java開發者可以使用JDBC來執行SQL查詢

SQL基礎查詢

語法結構

  • SELECT 查詢列表 FORM 表名 其中查詢列表可以是表中的欄位,常量值,表示式,函式等等

SELECT * FORM emplyees; 其中* 表示查詢表中所有資料

查詢表中單個欄位

  • SELECT 欄位名 FORM 表名

    eg:查詢員工的所有姓名

    SELECT e_name FORM emplyees;

查詢表中多個欄位

使用逗號將每個欄位分隔開來

  • SELECT 欄位1,欄位2,欄位3 FORM 表名;

    eg:示例:查詢所有員工的姓名,郵箱,電話號碼

    SELECT e_name,e_email,e_phone_num FORM emplyees;

為欄位起別名

在實際的資料庫表結構中,有些欄位名過長,或者不好理解,我們可以對欄位名起個表明,在後續呼叫中直接使用其別名即可,在多表查詢中,有些欄位名會出現重複,這時我們可以對相應的欄位其別名,不宜混淆

  • 使用AS關鍵字
    • 在將要其別名欄位後使用AS關鍵字
      • SELECT 欄位名 AS 別名 FORM 表名;
  • 直接使用空格隔開
    • 即在欄位和別名之間用空格隔開即可
      • SELECT 欄位名 別名 FORM 表名;

去重

對查詢出的語句可能會出先欄位名重複的結果,這時,我們可以使用去重功能

  • 使用DISTINCT關鍵字:

    • SELECT DISTINCT 要去重的欄位 ,其他欄位… FORM 表名;

    eg:查詢部門表中的部門ID,對於每個部門ID出現一次即可,因此我們可以使用去重

    SELECT DISTINCT d_id FORM department;

+號操作

Mysql中 +號只有一個功能:作為運算子,不能作為連線符

  • + 號兩側都是數值型,視為正常的加法運算
  • +號兩側出現了字元,這嘗試將字元轉化為數值型別,若轉化成功,則繼續執行加法操作,失敗則轉化為數值0;轉化規則為:從首部開始將所有數值型字元進行轉化直到遇到字元型字元,如’11’⇒11;’1a’⇒1;’abc’⇒0;’11a1’⇒11
  • null值與任何數值型別進行+操作都為null
SELECT 1 + 1; //2
SELECT '1' + '1';//2
SELECT 'a' + 1;//1
SELECT 'a' + 'b';//0
SELECT '1a' + '1b';//2
SELECT '11a11' + '11b11'//22;
SELECT 1 + null;//null

CONCAT()操作

既然+號只能作為運算子,那如何連線字元呢?→CONCAT()函式

  • CONCAT() :使用SELECT呼叫CONCAT();

    • SELECT CONCAT(str1,str2,…);

    eg:查詢員工姓名和郵箱,按固定格式(姓名[xxx@xx.com])要求輸出,比如:張三[123@qq.com]

    SELECT CONCAT(e_name,’[’,e_email,’]’)FORM employees;

IFNULL()函式

  • IFNULL():若查詢出的值存在NULL值,使用替代值替代

    • SELECT IFNULL(欄位名,代替值) FROM 表名;

    eg:查詢員工的姓名和部門ID,如果該員工沒有部門資訊,顯示未知

    SELECT e_name,IFNULL(d_id,’未知’) FORM employees;


條件查詢

條件查詢,允許在查詢資料時,指定某些條件,從而篩選出符合條件的記錄

WHERE關鍵字

WHERE關鍵字是條件查詢的核心;

  • 語法結構:

    SELECT 查詢列表  //執行順序3
    FORM 表名       //執行順序 1
    WHERE 條件表示式;//執行順序2
    

    eg:查詢 d_id 為 10 的所有員工

    SELECT d_id FORM employees WHERE d_id=10;

表示式篩選

SQL中包含了條件運算子:>, <,>=,<=, =, !=,<>;<>與!=的作用相同都表示不等於,條件運算子是應用於條件表示式中的

  • eg.1:查詢工資大於8000的員工資訊

    SELECT *FROM employees WHERE salary>8000;

  • eg.2查詢部門編號不等於3的員工資訊

    SELECT *FORM employees WHERE d_id ! =3;

邏輯運算

邏輯運算子也是一般在WHERE表示式中使用,可幫助在查詢中指定多個條件或改變條件邏輯關係

  • 邏輯運算子包括:&&,||,!,分別對應and,or,not

  • eg1:查詢工資在8000到10000之間的員工資訊→使用AND運算子連線

    SELECT * FORM employees WHERE salary>8000 AND salary<100000;

  • eg2:查詢工資大於8000或者部門3的員工資訊→使用OR運算子連線

    SELECT * FORM employees WHERE salary >8000 OR d_id=3;

模糊查詢

LIKE關鍵字

SQL中常用的是LIKE關鍵字,其配合萬用字元來實現模糊查詢

  • 常用萬用字元

    • % :代表可匹配度多個字元,包括0個,1個

    • _:代表只能匹配一個字元

      SELECT 查詢列表
      FROM 表名
      WHERE 列名 LIKE '模式';
      
  • eg1:查詢姓名中包含【微】字的員工資訊

    SELECT * FORM employees WHERE e_name LIKE ‘%微%’;

  • eg2:查詢姓名中第二個字是【可】字的員工資訊

    SELECT * FORM employees WHERE e_name LIKE ’_微%’;

BETEWEEN…AND

查詢在某段範圍值內的資料,包含臨界值,即BETEWEEN 8000 AND 100000⇒[8000,10000]

  • eg1:查詢工資在8000到10000之間的員工資訊

    SELECT * FORM employees WHERE salary BETWEEN 8000 AND 10000;

  • eg2:查詢入職時間在2018-01-01到2022-01-01之間的員工資訊

    SELECT * FORM employees WHERE hiredate BETWEEN ‘2018-01-01’ AND ’2022-01-01’;

IN關鍵字

IN運算子用於檢測欄位值是否在一個指定的值列表中,使用IN運算子可以簡化查詢語句,特別在需要處理多個值情況下

  • eg:查詢在部門2或者部門3的員工資訊

    SELECT *FORM employees WHERE d_id IN(2,3); 等價於SELECT * FORM employees WHERE d_id=2 OR d_id=3;

IS NULL/IS not NULL

用於檢測一個值是否NULL的運算子

  • eg1:查詢沒有部門的員工資訊

    SELECT * FORM employees WHRER d_id is NULL;

  • eg2:查詢有部門的員工資訊

    SELECT * FROM emplyees WHERE d_id is not NULL;

排序查詢

查詢出來的資料預設按照表格的儲存順序查詢,我們如果需要修改查詢結果展示的順序,可以使用排序查詢,

ORDER BY關鍵字

在SQL中ORDER BY實現排序,ASC代表升序,DESC代表降序

  • 語法結構

    SELECT 查詢列表
    FROM 表
    [WHERE 篩選列表]
    ORDER BY 排序列表 [ASC升序|DESC降序] -- ASC|DESC不寫預設是ASC
    

實現單欄位排序

  • ORDER BY 排序欄位 [ASC升序|DESD降序];

  • eg:查詢員工資訊按工資高低排序

    - 按照工資升序
    SELECT * FROM emplyees ORDER BY salary ASC -- ASC可以不寫
    - 按照工資降序
    SELECT * FROM emplyees ORDER BY salary DESC -- DESC不能省略
    

使用多個欄位排序

  • eg:查詢員工資訊,先按部門ID降序,再按工資升序

    SELECT * FROM emplyees ORDER BY department_id DESC,salary ASC;

相關文章