MySQL 中的 SQL 語句詳解

@java

總結內容

1. 基本概念

  • 數據庫的概念
    1)結構化查詢語言(Structured Query Language)簡稱SQL;
    2)數據庫管理系統(Database Management System)簡稱DBMS;
    3)數據庫管理員(Database Administration)簡稱DBA,功能是確保DBMS的正常高效運行;mysql

  • SQL經常使用的3個部分
    1)數據查詢語言(DQL):其語句也稱「數據庫檢索語句」,用以從表中得到數據,保留字SELECT常常使用,DQL也是全部SQL中用的最多的,其餘保留字還有WHERE, ORDER BY, GROUP BY和HAVING這些保留字還與DML一塊兒使用;
    2)數據操做語言(DML):其他局包括動詞INSERT,UPDATE和DELETE。他們分別用於添加,修改和刪除表中的行。也稱動做語言;
    3)數據定義語言(DDL):DDL主要用於操做數據庫。sql

2. SQL列的經常使用類型

MySQL:           |         Java:
INT              |         int
BIGINT           |         long
DECIMAL          |         BigDecimal
DATE/DATETIME    |         java.util.Date
VARCHAR          |         String

3. DDL簡單操做

3.1 數據庫操做

  • 鏈接數據庫語句
mysql -uroot -padmin;
  • 查看數據庫列表:
show databases
  • 建立數據庫
create database 數據庫名稱;
  • 刪除數據庫
drop database 數據庫名稱;;
  • 修改數據庫(alter databese)
# 修改數據庫編碼格式
alter database 數據庫名稱 charset=編碼格式;
  • 查看當前數據庫下全部數據表
show tables;

3.2 表操做

  • 表的約束
    1)非空約束:NOT NULL,不容許某列的內容爲空;
    2)設置列的默認值:DEFAULT;
    3)惟一約束:UNIQUE,該表中,該列的內容必須惟一;
    4)主鍵約束:PRIMARY KEY,非空且惟一;
    5)主鍵自增加:AUTO_INCREMENT,從1開始,步長爲1;
    6)外鍵約束:FOREIGN KEY,A表中的外鍵列。A表中的外鍵列的值必須參照於B表中的某一列(B表主鍵)。數據庫

  • 建表
    1)建表語法:函數

列名1  列的類型  [約束],
列名2  列的類型  [約束],
...
列名N  列的類型  [約束]
);
// 注意:最後一行沒有逗號

例子:創建一個學生表(t_student)有id name email age
注意:建表不要使用關鍵字編碼

## 若是表存在就移除,由於不能存在兩個同樣名稱的表
DROP TABLE IF EXISTS 't_student';
CREATE TABLE t_student(
  id    BIGINT          PRIMARY KEY AUTO_INCREMENT,
  name  VARCHAR(25)     UNIQUE,
  email VARCHAR(25)     NOT NULL,
  age   INT             DEFAULT  17
  );
  • 刪除表
    1)刪表語法:
DROP TABLE 表名;

4. DML操做

4.1 修改操做(UPDATE SET)

  • 語法
UPDATE 表名
SET 列1 = 值1, 列2 = 值2, ...
WHERE [條件]
  • 實戰
// 一、將張三改成獨孤求敗
UPDATE t_student SET name="獨孤求敗" WHERE name="張三";

注意:不要省略where條件子句,省略的話,全表數據都會被修改。code

4.2 插入操做(INSERT INTO VALUE)

  • 語法
INSERT INTO 表名 (列1,列2,...) VALUE (值1,值2,...);
  • 實戰
// 一、插入完整數據記錄
INSERT INTO t_student (name, email, age) VALUE ("xiaoming", "xiao@qq.com", 16);
// 二、插入部分數據記錄
INSERT INTO t_student (name, age) VALUE ("xiaoming", 16);
// 三、插入查詢結果
INSERT INTO t_student(name, email, age) SELECT name,email,age FROM t_student;

4.3 刪除操做(DELETE)

  • 語法
DELETE FROM 表名 WHERE [條件]
  • 實戰
// 刪除 id 爲 2 的學生信息
DELETE FROM t_student WHERE id = 2;

注意:Where子句別省略,不然全表的數據都會被刪除。blog

5. DQL操做

操做的表

5.1 消除重複元素(DISTINCT)

  • 語法:
SELECT DISTINCT 列名, ... FROM 表名;

5.2 算術運算符(+,-,*,/)

  • 算術運算符的使用範圍
    1)對 number 型數據能夠使用算術運算符(+,-,*,/)對數據進行操做;對date型數據能夠使用部分算術運算符(+,-)對數據進行操做。排序

  • 算術運算符的優先級
    1)與數學中運算相同ci

  • 實戰

// 查詢全部貨物的id,名稱和批發價(折扣價=銷售價*折扣)
SELECT id, productName, salePrice * disCount From product;

5.3 設置別名(AS)

  • 做用
    1)改變列的標題頭;
    2)做爲計算結果的含義;
    3)做爲列的別名;
    4)若是別名使用特殊字符(強烈不建議使用特殊字符),或是強制大小寫或有空格時都須要加單引號。

  • 語法

// 第一種
SELECT 列名 AS 別名 FROM 表名 [WHERE];
// 第二種
SELECT 列名 別名 FROM 表名 [WHERE];
  • 實戰
// 查詢全部貨物的id,名稱和折扣價價(折扣價=銷售價*折扣)(使用別名)
SELECT id, productName, salePrice * disCount AS price From product;

5.4 按格式輸出(CONCAT

1)爲了方便用戶瀏覽查詢結果數據,有時須要設置查詢結果的顯示格式,能夠使用CONCAT函數來鏈接字符串。

  • 語法
CONCAT(字符串1, 字符串2, ...)
  • 實戰
// 查詢商品的名字和零售價。格式:xxx商品的零售價爲:ooo
SELECT CONCAT(productName, " 商品的零售價爲:", salePrice) FROM product;

5.5 過濾查詢(WHERE

1)使用WHERE子句限定返回的記錄。

  • 語法
SELECT <selectList> FROM 表名 WHERE 條件;

注意:WHERE子句在FROM子句以後。

5.6 比較運算符(=, >, >=, <, <=, !=)

1)不等於:<> 等價 !=;

  • 實戰
// 查詢商品名爲 羅技G9X 的貨品信息
SELECT * FROM product WHERE productName = "羅技G9X";
// 查詢批發價大於350的貨品信息(折扣價 = 銷售價*折扣)
SELECT *, salePrice * discount FROM product WHERE salePrice * discount > 350;

5.7 邏輯運算符(AND、OR、NOT)

1)AND:若是組合的田間都是 true,返回true;
2)OR:若是組合的條件之一是true,返回true;
3)NOT:若是給出的條件是false,返回true;若是給出的條件是true,則返回false。

  • 實戰
// 查詢售價在300-400(包括300和400)的貨品信息
SELECT * FROM product WHERE salePrice >= 300 ADN salePrice <= 400;
// 查詢分類編號爲2, 4的全部貨品信息
SELECT * FROM product WHERE dir_id = 2 OR dir_id = 4;
// 查詢編號不爲2的全部商品信息
SELECT * FROM product WHERE NOT dir_id = 2

5.8 範圍和集合(BETWEEN AND)

1)範圍匹配BETWEEN AND 運算符,通常使用在數字類型的範圍上。但對於字符數據和日期類型一樣可用。
注意:BETWEE AND 使用的是閉區間。

  • 語法
// 使用的是閉區間,也就是包括minValue 和 maxValue
WHERE 列名 BETWEEN minValue AND maxValue;
  • 實戰
// 查詢零售價不在 300 - 400 之間的貨品信息
SELECT * FROM product WHERE NOT salePrice BETWEEN 300 AND 400;

2)集合查詢:使用 IN 運算符,判斷列的值是否在指定的集合中。

  • 語法
WHERE 列名 IN (值1, 值2, ...);
  • 實戰
// 查詢分類編號爲 2,4 的全部貨品的 id,貨品名稱
SELECT id, productName FROM product WHERE dir_id IN (2,4);
// 查詢分類編號不爲 2, 4 的全部貨品的 id,貨品名稱
SELECT id, dir_id, productName FROM product WHERE NOT dir_id IN (2,4);

5.9 判空(IS NULL)

1)IS NULL:判斷列的值是否爲空值,非空字符串,空字符串使用 == 判斷;

  • 語法
WHERE 列名 IS NULL;
  • 實戰
// 查詢商品名爲NULL的全部商品信息
SELECT * FROM product WHERE productName IS NULL;
SELECT * FROM product WHERE supplier = "";

結論:使用 = 來判斷只能判斷空字符串,不能判斷 null;而使用 IS NULL 只能判斷 null 值,不能判斷空字符串。

5.10 模糊匹配查詢(LIKE,%,_)

1)LIKE:模糊查詢數據使用 LIKE 運算執行通配符;
2)通配符:% 表示可有零個或多個任意字符; _ 即是須要一個任意字符;

  • 語法
WHERE 列名 LIKE "%M_";
  • 實戰
// 查詢貨品名稱以 羅技M9* 結尾的全部貨品信息,這裏的 * 表示一個任意字符,它不具有任何意義,只是我出於題目須要才這樣寫,便於你理解而已
SELECT * FROM product WHERE productName LIKE "%羅技M9_";

5.11 結果排序(ORDER BY)

1)ORDER BY:使用 ORDER BY子句將查詢結果進行排序,ORDER BY子句出如今 SELECT 語句的最後;
2)ASC:升序;DESC:降序;

  • 實戰
// 查詢 id,貨品名稱,分類編號,零售價 按分類編號降序排序,若是分類編號相同再按零售價升序排序
SELECT * FROM product ORDER BY dir_id DESC, salePrice ASC;

5.12 DQL字句的執行順序

1)FROM字句:從哪張表中去查數據;
2)WHERE字句:篩選須要的行數據;
3)SELECT字句:篩選須要顯示的列數據;(AS 起別名是在這時候,因此 WHERE 中不能用別名,ORDER BY 中能夠使用別名)
4)ORDER BY字句:排序操做。

6. 統計函數

經常使用關鍵字(COUNT、SUM、MAX、MIN、AVG)

  • 概念
    1)COUNT(*):統計表中有多少條數據;
    2)SUM(列):彙總列的總和;
    3)MAX(列):獲取某一列的最大值;
    4)MIN(列):獲取某一列的最小值;
    5)AVG(列):獲取某一列的平均值;

  • 實戰

// 查詢貨品表共有多少數據
SELECT COUNT(*) FROM product;
// 計算全部貨品的銷售價
SELECT SUM(costPrice) FROM product;

總結

以上就是對 MYSQL的 SQL 語句的總結了,代碼僅供參考,歡迎討論交流。

相關文章
相關標籤/搜索