MySQL中常用的SQL語句(總結+持續更新)


文章目錄:

1.數據庫的相關操作

1.1 連接數據庫 

1.2 創建數據庫 

1.3 查看數據庫有哪些 

1.4 查看指定的數據庫 

1.5 刪除指定的數據庫

1.6 使用數據庫(很重要) 

1.7 用戶的創建和刪除

1.8 授權

1.9 收權

1.10 視圖的創建與刪除 

1.11 斷開服務器的連接 

2.表的相關操作

2.1 創建表 

2.2 查看錶的結構 

2.3 查看錶的詳細信息 

2.4 查看某個數據庫中有哪些表

2.5 刪除指定的表 

2.6 字段名的數據類型

2.7 添加主鍵約束

2.8 添加外鍵約束

2.9 添加常用約束

3.數據庫和表的基本操作

3.1 修改表名

3.2 修改字段名和字段的數據類型

3.3 添加和刪除字段

3.4 修改字段的排列位置

3.5 刪除表的外鍵約束

3.6 插入數據(INSERT INTO , VALUES)

3.7 查看數據是否成功插入表中

3.8 更新數據(UPDATE , SET)

3.9 刪除數據(DELETE , TRUNCATE)

4.單表查詢 

4.1 基本查詢語句(SELECT , FROM , WHERE)

4.2 帶IN和NOT IN關鍵字的查詢 

4.3 帶(NOT)BETWEEN AND 的範圍查詢

4.4 帶LIKE的字符匹配查詢

4.4.1 百分號通配符"%" 

4.4.2 下劃線通配符"_"

4.5 查詢空值(IS NULL)與去重(DISTINCT)

4.6 帶 AND 與 OR 的多條件查詢

4.7 對查詢結果進行排序(ORDER BY)

4.8 分組查詢(GROUP BY)

4.9 使用 LIMIT 限制查詢結果的數量

5.使用聚合函數查詢(不能出現在WHERE子句的後面)

5.1 COUNT()函數 

5.2 SUM()函數

5.3 AVG()函數

5.4 MAX()函數

5.5 MIN()函數

6.連接查詢(多表查詢)

6.1 內連接查詢 

6.2 外連接查詢(左/右)

6.3 複合條件連接查詢

6.4 子查詢

6.4.1 帶比較運算符的子查詢 

6.4.2 帶(NOT)IN的子查詢 

6.4.3 帶 ANY 或 ALL 的子查詢

6.4.4 帶(NOT)EXISTS謂詞的子查詢

7.SQL語句的編寫順序

8.SQL語句的執行順序

9.SQL語句中四大功能、九大動詞

 


1.數據庫的相關操作

  • 1.1 連接數據庫 

mysql -u[用戶名] -p[密碼] -h[主機名](最後一個可以不加,特定情況時需要添加)
  • 1.2 創建數據庫 

模板:CREATE DATABASE 數據庫名;
舉例:CREATE DATABASE school;
  • 1.3 查看數據庫有哪些 

模板:SHOW DATABASES;
(無需加具體的數據庫名)
  • 1.4 查看指定的數據庫 

模板:SHOW CREATE DATABASE 數據庫名;
舉例:SHOW CREATE DATABASE school;
  • 1.5 刪除指定的數據庫

模板:DROP DATABASE 數據庫名;
舉例:DROP DATABASE school;
  • 1.6 使用數據庫(很重要) 

模板:USE 數據庫名;
舉例:USE school;
(在對其中一個數據庫進行一系列操作的時候,必須要先聲明使用的是哪一個數據庫,即上面的SQL語句!!!)
  •  1.7 用戶的創建和刪除

首先連接數據庫
mysql -u[用戶名] -p[密碼] -h[主機名](這個可以不加,特定情況需要添加)

在這裏我們通過root用戶來創建新的用戶
模板:CREATE USER "用戶名"@"localhost" identified by "密碼";
(用戶名和localhost兩側的引號可加可不加)

舉例:CREATE USER "U4"@"localhost" identified by"123456";
(此時,我們使用root用戶創建了一個新用戶U4,密碼爲123456)


對於新創建的用戶,我們也可以對它進行刪除
模板:DROP USER "用戶名"@"localhost";

舉例:DROP USER "U4"@"localhost";
(此時,我們刪除了上面創建的新用戶U4)
  • 1.8 授權

在創建的一些用戶之後,我們可以爲指定的用戶授權!!!
模板:GRANT <權限列表>  [權限可以是:SELECT,UPDATE,DELETE,INSERT]
      ON <數據庫對象>   [數據庫對象可以是基本表、視圖]
      TO <用戶名>
      [WITH GRANT OPTION];  [添加上這條語句之後,表示被授權的用戶可以繼續將權限轉授給其他用戶]

舉例1:GRANT SELECT
       ON school.student
       TO U4;
(此時,我們爲用戶U4授予school數據庫中student表的查詢權限)
(在這裏,需要說明一點:如果沒有指定具體的數據庫,那麼在基本表或者視圖的前面要加上該數據庫名的前綴)
(上面的student表是在school數據庫中的,所以我們要加上對應數據庫名的前綴)
(如果不想加這個前綴,也可以使用下面的語句)

舉例2:USE school;
      [出現Database changed,表示需要使用這個數據庫]
       GRANT SELECT
       ON student  (由於我們已經事先聲明USE school;所以在這裏就不需要添加數據庫名的前綴了)
       TO U4;
(這兩種方法是一樣的,大家可以根據編寫SQL語句的習慣來選擇!!!)


上面提到的兩個例子,是授予部分權限,如果想授予指定用戶的所有權限,可以使用下面的語句:
模板:GRANT ALL PRIVILEGES
      ON school.student
      TO U5;
(此時,我們爲用戶U5授予了school數據庫中student表的所有權限)
  •  1.9 收權

在授予指定用戶的一些權限之後,我們同樣可以將這些權限收回!!!
模板:REVOKE <權限列表>  [權限可以是:SELECT,UPDATE,DELETE,INSERT]
      ON <數據庫對象>    [數據庫對象可以是基本表、視圖]
      FROM <用戶名>
      [CASCADE|RESTRICT];
(級聯CASCADE:當這個用戶爲其他用戶授權時,我們使用級聯將其一併收回)
(比如用戶root爲U4授予了SELECT權限,而用戶U4又爲U5授予了UPDATE權限,此時使用CASCADE就把兩個權限一起收回了)
(約束RESTRICT:當這個用戶沒有給其他用戶授權時,纔可以將它收回)

舉例:REVOKE SELECT,UPDATE(grade)
      ON school.sc
      FROM U4
      CASCADE;
(此時,我們把用戶U4對school數據庫中student表的查詢和更新成績的權限收回,同時級聯收回U4授出給其他用戶的權限)
  • 1.10 視圖的創建與刪除 

舉例1:涉及單個表的視圖的創建
       創建信工學院開設的課程視圖XG_C(cno,cname,credit)
       屬性名依次表示課程號、課程名、學分,並查詢視圖中的數據。
       CREATE VIEW XG_C(cno,cname,credit)
       AS
       SELECT cs_id,cs_name,cs_credit
       FROM course
       WHERE cs_depart="信工";

使用SELECT查詢所創建視圖中的數據
       SELECT *
       FROM XG_C;
舉例2:涉及多個表的視圖的創建
       創建教師授課視圖Tea_C(tno,tname,cno,cname,credit)
       屬性名依次表示教師號,教師名,課程號,課程名,學分,並查詢視圖中的數據。
       CREATE VIEW Tea_C(tno,tname,cno,cname,credit)
       AS
       SELECT teacher.tea_id,tea_name,course.cs_id,cs_name,cs_credit
       FROM course
       JOIN teaching
       ON course.cs_id=teaching.cs_id
       JOIN teacher
       ON teaching.tea_id=teacher.tea_id;

使用SELECT查詢所創建視圖中的數據
       SELECT *
       FROM Tea_C;
舉例3:在已有視圖的基礎上,繼續創建新的視圖
       創建信工學院學生平均成績視圖XG_AVE(sno,gave)
       CREATE VIEW XG_AVE(sno,gave)
       AS
       SELECT sno,AVG(grade)
       FROM XG_GRADE
       GROUP BY sno;

使用SELECT查詢所創建視圖中的數據
       SELECT *
       FROM XG_AVE;
舉例4:刪除視圖
       DROP VIEW [視圖名];
(可以添加CASCADE級聯操作,表示將此視圖導出的所有視圖一併刪除)
  • 1.11 斷開服務器的連接 

模板1:exit;
模板2:quit;

 

2.表的相關操作

  • 2.1 創建表 

模板:CREATE TABLE 表名
     (
        字段名1  數據類型  [列級約束],
        字段名2  數據類型  [列級約束],
        ......
        表級約束
     );
舉例:CREATE TABLE student
     (
        sno char(10),
        sname varchar(5),
        sage int(5),
        sex char(3)
     );
(在此,我們只是創建了一個基本表,並沒有對錶中字段添加相關約束,隨後會一一介紹!!!)
  • 2.2 查看錶的結構 

模板1:DESCRIBE 表名;
模板2:DESC 表名;
舉例: DESC student;
  • 2.3 查看錶的詳細信息 

模板:SHOW CREATE TABLE 表名;
舉例:SHOW CREATE TABLE student;
  • 2.4 查看某個數據庫中有哪些表

模板:SHOW TABLES;
舉例:SHOW TABLES;
(這個和查看有哪些數據庫一樣,無需添加數據庫名或者表名)
  • 2.5 刪除指定的表 

模板:DROP TABLE 表名;
舉例:DROP TABLE student;
  • 2.6 字段名的數據類型

int              整型
char(n)          定長字符型
varchar(n)       變長字符型
float(m,d)       單精度型,m表示總位數,d表示小數位數
decimal(m,d)     雙精度型
date             日期型
(這裏只介紹MySQL支持的主要數據類型)
  • 2.7 添加主鍵約束

舉例:CREATE TABLE student
     (
        sno char(10) PRIMARY KEY,
        sname varchar(5),
        sage int(5),
        sex char(3)
     );
(我們在第一個字段名sno的後面添加列級約束:PRIMARY KEY,即指定字段sno爲student表的主鍵)
  • 2.8 添加外鍵約束

模板:CONSTRAINT 外鍵約束名 FOREIGN KEY(外鍵名) REFERENCES 主表名(主鍵名)
(在添加外鍵約束的時候,需要有一個父表(主表)和子表)

舉例:CREATE TABLE student
     (
        sno char(10) PRIMARY KEY,
        sname varchar(5),
        sage int(5),
        sex char(3)
     );
      CREATE TABLE score
     (
        sno char(10) PRIMARY KEY,
        cno char(10),
        cname varchar(10),
        ctype varchar(5),
        CONSTRAINT fk_temp FOREIGN KEY(sno) REFERENCES student(sno)
     );
(我們在此就爲score表添加了外鍵約束,外鍵約束名爲fk_temp,外鍵名爲sno)
  • 2.9 添加常用約束

常用約束類型有:
(1)primary key         單一主鍵約束,primary key(字段名1,字段名2)  聯合主鍵
(2)foreign key         外鍵約束
(3)unique              唯一約束 ,取值不能重複,但允許有一個爲空
(4)null                爲空約束(系統默認的)
(5)not null            非空約束
(6)default 值          默認約束,給定字段一個默認值,
	                添加字符串型默認值要使用單引號,表示爲'值’。
	                如果是整型則不需要加任何符號; 
	                如果要添加的是中文默認值,則需要加上 DEFAULT CHARSET=utf8;  使用英文字符則不需要。
(7)auto_increment     自增約束,默認情況下初始值和增量都爲1。
1.添加唯一約束
  CREATE TABLE student
  (
     sno char(10) PRIMARY KEY,
     sname varchar(5) UNIQUE,
     sage int(5),
     sex char(3)
  );
2.添加非空約束
  CREATE TABLE student
  (
     sno char(10) PRIMARY KEY,
     sname varchar(5) NOT NULL,
     sage int(5),
     sex char(3)
  );
3.使用默認約束
CREATE TABLE student
(
    sno char(10) PRIMARY KEY,
    sname varchar(5),
    sage int(5),
    sex char(3) DEFAULT "男"
)DEFAULT CHARSET=utf8;
4.設置表的屬性值自動增加
CREATE TABLE student
(
    sno char(10) PRIMARY KEY AUTO_INCREMENT,
    sname varchar(5),
    sage int(5),
    sex char(3)
);
(默認情況下,關鍵詞AUTO_INCREMENT的初始值的增量均爲1)

 

3.數據庫和表的基本操作

  • 3.1 修改表名

模板:ALTER TABLE 舊錶名 RENAME [TO] 新表名;
舉例:ALTER TABLE student RENAME people;
(此時我們把student表修改爲一個新的表名people)
  • 3.2 修改字段名和字段的數據類型

模板1:修改字段名
      ALTER TABLE 表名 CHANGE 舊字段名 新字段名 新數據類型;
      (數據類型必須跟在新字段名的後面,數據類型可改可不改,如果不需要修改字段的數據類型,
       可以把新字段的數據類型設置爲和原來一樣,但是,千萬不要空着它!)
舉例: ALTER TABLE student CHANGE sage Sage int(5);
模板2:修改字段的數據類型
      ALTER TABLE 表名 MODIFY 字段名 新數據類型;
舉例: ALTER TABLE student MODIFY sage varchar(5);
  • 3.3 添加和刪除字段

模板1:添加字段(默認在表的最後一列添加字段)
       ALTER TABLE 表名 ADD 字段名 數據類型 [約束類型];
舉例:ALTER TABLE student ADD smajor varchar(10) NOT NULL;
模板2:添加字段(指定在表的第一列添加字段)
       ALTER TABLE 表名 ADD 字段名 數據類型 [約束類型] FIRST;
舉例:ALTER TABLE student ADD smajor varchar(10) FIRST;
模板3:添加字段(指定在表的某一列添加字段)
       ALTER TABLE 表名 ADD 字段名 數據類型 [約束類型] ALTER 指定已存在的字段名;
舉例:ALTER TABLE student ADD smajor varchar(10) AFTER sage;
模板4:刪除字段
       ALTER TABLE 表名 DROP 字段名;
舉例:ALTER TABLE student DROP smajor;
  • 3.4 修改字段的排列位置

模板1:修改字段爲表的第一字段
       ALTER TABLE 表名 MODIFY 字段名 數據類型 FIRST;
舉例:ALTER TABLE student MODIFY sname varchar(5) FIRST;
模板2:修改字段到表的某個字段之後
       ALTER TABLE 表名 MODIFY 字段名 數據類型 AFTER 指定字段名;
舉例:ALTER TABLE student MODIFY sname varchar(5) AFTER sage;
  • 3.5 刪除表的外鍵約束

模板:ALTER TABLE 表名 DROP FOREIGN KEY 外鍵約束名;
舉例:ALTER TABLE score DROP FOREIGN KEY fk_temp;
(其中fk_temp爲score表的外鍵約束名)
  • 3.6 插入數據(INSERT INTO , VALUES)

模板1:INSERT INTO 表名 (字段名1,字段名2,......)
       VALUES(字段名1的值,字段名2的值,......),
             (字段名1的值,字段名2的值,......),
             ......
             (字段名1的值,字段名2的值,......);
(如果插入的全部列的值,則INSERT INTO 表名後面的內容就可以省略;如果是部分列,則不能省略)
舉例:INSERT INTO student(sno,sname)
      VALUES("201805050201","張三"),
            ("201805050255","李四"),
            ("201805050230","王五");
模板2:帶子查詢的插入語句
      INSERT INTO 表名 (字段名1,字段名2,......)
      SELECT 字段名1,字段名2,......
      FROM 表名
      此處可以添加一些指定條件(WHERE,GROUP BY等等)
舉例:INSERT INTO sc(sno,grade)
      SELECT sno,AVG(grade)
      FROM student
      GROUP BY sno;
(此時,我們把student表按照學號分組,並計算每個學生的平均成績,之後再把學號和平均成績插入新表sc)

 

  • 3.7 查看數據是否成功插入表中

模板:SELECT *;
      FROM 表名;
舉例:SELECT *;
      FROM student;
  • 3.8 更新數據(UPDATE , SET)

模板1:更新表中的所有行的一列值
       UPDATE 表名
       SET 字段名1=它的新值;
舉例:UPDATE student
      SET sage=20;
(此時,我們把student表的sage字段對應的所有值都更新爲20)
(模板中更新的新值也可以爲空,即:NULL)
模板2:更新表中的所有行的多列值
       UPDATE 表名
       SET 字段名1=它的新值,
           字段名2=它的新值,
           ......;
舉例:UPDATE student
      SET sage=20,
          sex="男",
          smajor="計科";
模板3:更新表中指定行的1列或多列值
       UPDATE 表名
       SET 字段名1=它的新值,
           字段名2=它的新值,
           ......
       WHERE 條件表達式;
舉例:UPDATE student
      SET sage=18,
          sex="女"
          sno="201805050202"
      WHERE id=3;
模板4:帶子查詢的更新語句
       UPDATE 表名
       SET 字段名=它的新值 (可以有多個字段名)
       WHERE 條件表達式 IN
       (
        SELECT 字段名
        FROM 表名
        WHERE 條件表達式
       );
舉例:UPDATE sc
      SET grade=0
      WHERE sno IN
      (
       SELECT sno
       FROM student
       WHERE sdept="信工"
      );
(此時,我們把信工學院的全體學生的成績更新爲0)

 

  • 3.9 刪除數據(DELETE , TRUNCATE)

模板1:刪除表中的指定行
       DELETE FROM 表名
       WHERE 條件表達式;
舉例:DELETE FROM student
      WHERE sage>=18;
模板2:刪除表中的所有行
       DELETE FROM 表名;
舉例:DELETE FROM student;
模板3:帶子查詢的刪除語句
       DELETE FROM 表名
       WHERE 字段名 IN
       (
        SELECT 字段名
        FROM 表名
        WHERE 條件表達式
       );
舉例:DELETE FROM sc
      WHERE sno IN
      (
       SELECT sno
       FROM student
       WHERE sdept="信工"
      );
(此時,我們就刪除了信工學院全體學生的選課記錄) 
模板4:DELETE 和 TRUNCATE
       TRUNCATE TABLE 表名;
舉例:TRUNCATE TABLE student;
(DELETE:一條一條的刪除表中的數據)
(TRUNCATE:直接刪除的是表,而不是表中的內容,但是刪除結束後,還會重新創建一個表)

 

4.單表查詢 

  • 4.1 基本查詢語句(SELECT , FROM , WHERE)

模板1:查詢表中的某個字段
       SELECT 字段名
       FROM 表名;
舉例:SELECT sno
      FROM student;
模板2:查詢表中的多個字段
       SELECT 字段名1,字段名2
       FROM 表名;
舉例:SELECT sno,sname
      FROM student;

在模板1和2中,我們也可以用關鍵字 as 給字段名起別名,方便我們查看和理解查詢的結果!!!
舉例:SELECT sno as 學生學號,sname as 學生姓名
      FROM student;
(在這裏,關鍵字 as 可以省略)
模板3:查詢表中的所有字段
       SELECT *
       FROM 表名;
舉例:SELECT *
      FROM student;
模板4:條件查詢
       SELECT 字段名1,字段名2
       FROM 表名
       WHERE 條件表達式;
舉例:SELECT sno,sname
      FROM student
      WHERE sex<>"女";
  • 4.2 帶IN和NOT IN關鍵字的查詢 

模板:SELECT 字段名 
      FROM 表名 
      WHERE 字段名 IN (n1,n2,n3,...);
舉例:SELECT sno,sname
      FROM student
      WHERE grade IN (98,99,100);
(查詢成績爲98,99,100的學生的學號和姓名)
(NOT IN的使用方法和IN是一樣的,在這就不再舉例了)
  • 4.3 帶(NOT)BETWEEN AND 的範圍查詢

模板:SELECT 字段名 
      FROM 表名 
      WHERE 字段名 BETWEEN n1 AND n2;
舉例:SELECT sno,sname
      FROM student
      WHERE grade BETWEEN 90 AND 100;
(查詢成績在90到100之間的所有學生的學號和姓名)
(NOT BETWEEN AND 和 BETWEEN AND的使用方法是一樣的)
  • 4.4 帶LIKE的字符匹配查詢

  • 4.4.1 百分號通配符"%" 

模板1:SELECT 字段名 
       FROM 表名 
       WHERE 字段名 LIKE '字符%';
(百分號通配符%可以匹配任意長度的字符,甚至包括零字符。其中 % 的位置可以根據需要在字符之間改變)

舉例1:SELECT sno,sname
      FROM student
      WHERE sno LIKE "20180505%";
(查詢學號以20180505開頭的學生學號和姓名)

舉例2:SELECT sno,sname
       FROM student
       WHERE sno LIKE "%0505%";
(查詢學號中間包含0505的學生學號和姓名)

舉例3:SELECT sno,sname
       FROM student
       WHERE sno LIKE "%0201";
(查詢學號結尾爲0201的學生學號和姓名)
  • 4.4.2 下劃線通配符"_"

模板:SELECT 字段名 
      FROM 表名 
      WHERE 字段名 LIKE '字符_';
(下劃線通配符"_"只能模糊匹配1個字符)
(如果你想用下劃線通配符"_"匹配多個字符,那隻能多用幾個"_"咯!其中"_"的位置可以根據需要在字符間變化。 
舉例1:SELECT sno,sname
      FROM student
      WHERE grade LIKE "_9";
(查詢學生成績以9結尾的學生學號和姓名)

舉例2:SELECT sno,sname
      FROM student
      WHERE grade LIKE "________02";
(查詢學號以02結尾的學生學號和姓名,假設學號是2018050502的格式,那麼在02之前就需要用8個下劃線通配符"_")

舉例3:SELECT sno,sname
       FROM student
       WHERE grade LIKE "_子%";
(查詢學生姓名中第二個字爲"子"的學生學號和姓名)
  • 4.5 查詢空值(IS NULL)與去重(DISTINCT)

模板:SELECT 字段名 
      FROM 表名 
      WHERE 字段名 IS NULL;
(查詢數據表中的空值對應的數據)

舉例:SELECT sno,sname
      FROM student
      WHERE grade IS NULL;
(查詢student表中學生成績爲空的數據)
模板:SELECT DISTINCT 字段名 
      FROM 表名;
舉例:SELECT DISTINCT grade
      FROM student;
(對student表中的成績字段進行去重處理)
  • 4.6 帶 AND 與 OR 的多條件查詢

模板:SELECT 字段名 
      FROM 表名 
      WHERE 表達式1 AND 表達式2;
(小提示: 可以同時添加多個過濾條件,增加條件的同時只需增加一個 AND 關鍵字。)

舉例:SELECT sno,sname
      FROM student
      WHERE sage=18 AND sex="男";
(查詢年齡爲18,且性別爲男的學生學號和姓名)
模板:SELECT 字段名 
      FROM 表名 
      WHERE 表達式1 OR 表達式2;
(與AND相反,在WHERE聲明中使用OR關鍵字表示只需滿足兩個條件中的其中一個條件即可返回結果)

舉例:SELECT sno,sname
      FROM student
      WHERE sage=18 OR sex="男";
(查詢年齡爲18或者性別爲男的學生學號和姓名,只要滿足其中一個就行)
  • 4.7 對查詢結果進行排序(ORDER BY)

模板:SELECT 字段名 
      FROM 表名 
      WHERE 條件表達式 (WHERE子句也可以不加)
      ORDER BY 字段名 [ASC[DESC]];
(默認升序:ASC,也可以定義降序:DESC)

舉例:SELECT sno,sname
      FROM student
      WHERE sex="男"
      ORDER BY sage DESC;
(我們對性別爲男的學生進行,按年齡降序排序,最後將其學號和姓名輸出)
  • 4.8 分組查詢(GROUP BY)

模板:SELECT 字段名 
      FROM 表名 
      GROUP BY 字段名;
(分組查詢的關鍵字是Group By,查詢的是每個分組中 首次出現的一條記錄)
(一般情況下,GROUP BY都和聚合函數一起使用)

舉例:SELECT *
      FROM student
      GROUP BY sage;
(在GROUP BY子句之後還可以使用 HAVING 來對分組結果進行篩選)
  • 4.9 使用 LIMIT 限制查詢結果的數量

模板:SELECT 字段名 
      FROM 表名 
      LIMIT [OFFSET,] 記錄數;
(第一個參數:OFFSET,可選參數,表示偏移量,如果不指定默認值爲0,表示從查詢結果的第一條記錄開始,
 若偏移量爲1,則從查詢結果中的第二條記錄開始,以此類推)
(第二個參數,記錄數,表示返回查詢結果的條數)

舉例:SELECT *
      FROM student
      ORDER BY sage ASC
      LIMIT 1,4;
(表示從student表中第2條記錄開始,向後檢索4條數據,並按年齡升序排序)

 

5.使用聚合函數查詢(不能出現在WHERE子句的後面)

  • 5.1 COUNT()函數 

模板:SELECT COUNT(*/字段名) 
      FROM 表名;
      可加,可不加:WHERE 條件表達式;
(COUNT()函數是用來統計記錄的總條數)

舉例:SELECT COUNT(sno)
      FROM student;
(統計student表中一共有多少條記錄)
  • 5.2 SUM()函數

模板:SELECT SUM(字段名) 
      FROM 表名;
      可加,可不加:WHERE 條件表達式;
(SUM()函數是對數據表的某列進行求和操作)

舉例:SELECT SUM(grade)
      FROM score
      WHERE course="語文";
(計算score表中語文成績的總和)
  • 5.3 AVG()函數

模板:SELECT AVG(字段名)
      FROM 表名;
      可加,可不加:WHERE 條件表達式;
(AVG()函數是對數據表的某列進行求平均值操作)

舉例:SELECT AVG(grade)
      FROM score
      WHERE course="數學";
(計算score表中,數學科目的平均成績)
  • 5.4 MAX()函數

模板:SELECT MAX(字段名)
      FROM 表名;
      可加,可不加:WHERE 條件表達式;
(MAX()函數是求某列的最大數值)

舉例:SELECT MAX(grade)
      FROM score
      WHERE course="數學";
(查詢score表中,數學科目成績的最高分)
  • 5.5 MIN()函數

模板:SELECT MIN(字段名)
      FROM 表名;
      可加,可不加:WHERE 條件表達式;
(MIN()函數是求某列的最小數值)

舉例:SELECT MIN(grade)
      FROM score
      WHERE course="數學";
(查詢score表中,數學科目成績的最低分)

 

6.連接查詢(多表查詢)

  • 6.1 內連接查詢 

僅將兩個表中滿足連接條件的行組合起來作爲結果集,稱爲內連接;
關鍵字: [inner] join ...  on。

模板:SELECT 字段名1,字段名2,......
      FROM 表1
      JOIN 表2
      ON 表1.字段=表2.字段;
解釋:從表1中取出每一條記錄,去表2中與所有的記錄進行匹配,匹配必須是某個條件在表1中與表2中相同,
      相同一般理解爲兩個表的公共字段,最終纔會保留結果,否則不保留。inner 關鍵字可省略不寫;on 表示連接條件。

舉例:SELECT student.sno,sname,smajor,cno
      FROM student
      JOIN score
      ON student.sno=score.sno;
(我們對student表和score表做內連接運算,選取兩個表的公共字段sno進行連接)
(在輸出的時候,如果輸出的是公共字段sno,則需要在前面加上表名前綴:student.sno)


以上是其中一種寫法,下面我們介紹另一種寫法:
模板:SELECT 字段名1,字段名2,......
      FROM 表1,表2
      WHERE 表1.字段=表2.字段;
舉例:SELECT student.sno,sname,smajor,cno
      FROM student,score
      WHERE student.sno=score.sno;
  • 6.2 外連接查詢(左/右)

外連接查詢分爲左外連接查詢和右外連接查詢;
關鍵字: left/right [outer] join ... on

模板1:SELECT 字段名1,字段名2,......
      FROM 表1
      LEFT JOIN 表2 
      ON 表1.字段=表2.字段;  (不侷限於兩個表,可以有更多的表)

模板2:SELECT 字段名1,字段名2,......
      FROM 表1
      RIGHT JOIN 表2 
      ON 表1.字段=表2.字段;  (不侷限於兩個表,可以有更多的表)

語法解釋:左外連接:在內連接的基礎上,還包含表1中所有不符合條件的數據行,並在其中的表2列填寫 NULL。
         右外連接:在內連接的基礎上,還包含表2中所有不符合條件的數據行,並在其中的表1列填寫 NULL。
(與內連接相似,只是查詢結果少了一些數據,多出來了一些爲NULL的數據,所以不再舉例了)
  • 6.3 複合條件連接查詢

複合條件連接查詢,就是在連接查詢的過程中,通過添加過濾條件來限制查詢結果,使查詢結果更加精確。
模板與內連接類似,只是在內連接的基礎上,增加了一些查詢條件!!!

舉例1:SELECT student.sno,sname,smajor,cno
       FROM student,score
       WHERE student.sno=score.sno AND sage>=18;
(對兩個表做內連接運算之後,再進行對年齡大於等於18的篩選和檢索)

舉例2:SELECT student.sno,sname,smajor,cno
       FROM student,score
       WHERE student.sno=score.sno
       ORDER BY sage DESC;
(對兩個表做內連接運算之後,再對結果按年齡降序排序輸出)

以上,只是舉了兩個例子來更好的理解,複合條件當中還有很多,比如使用聚合函數,GROUP BY子句等等!!!
  • 6.4 子查詢

  •  6.4.1 帶比較運算符的子查詢 

模板:SELECT * 
      FROM 表1 
      WHERE 字段名1=
      (
        SELECT 字段名2 
        FROM 表2
        可加,可不加:WHERE 條件表達式
      );

比較運算符:大於:>,大於等於:>=,小於:<,小於等於:<=,等於:=,不等於:!=或者<>

舉例:SELECT name,age
      FROM tb_emp
      WHERE age>
      (
	SELECT AVG(age)
	FROM tb_emp
      );
(查詢大於所有平均年齡的員工姓名與年齡)
  • 6.4.2 帶(NOT)IN的子查詢 

模板:與上面的帶比較運算符類似,只是把比較運算符換成了"IN"(相應的也有NOT IN)
舉例:SELECT cs_name 課程名,cs_type 課程類型
      FROM course
      WHERE cs_id IN
      (
        SELECT cs_id
        FROM teaching
        WHERE tea_id IN
        (
          SELECT tea_id
          FROM teacher
          WHERE tea_name="張三"
        )
       );
(這裏我們使用了三個表,來查詢“張三”老師所講授的課程名和課程類型)
  • 6.4.3 帶ANY 或 ALL的子查詢

ALL關鍵字
ALL必須接在一個比較運算符的後面,表示與子查詢返回的所有值比較都爲TRUE,則返回TRUE。

舉例:SELECT position,salary
      FROM tb_salary
      WHERE salary>ALL
      (
	SELECT salary
	FROM tb_salary
	WHERE position='Java'
      );
(查詢薪資表中比Java最高工資高的所有員工職位名稱和薪資,比所有的都高→大於最大值)


ANY和SOME關鍵字
ANY與比較操作符聯合使用,表示與子查詢返回的任何值比較爲TRUE,則返回TRUE。SOME是ANY的別名,一般用的比較少。

舉例:SELECT position,salary
      FROM tb_salary
      WHERE salary>ANY
      (
	SELECT salary
	FROM tb_salary
	WHERE position='Java'
      );
(查詢薪資表中比Java最低工資高的所有員工職位名稱和薪資,比任何的都低→小於最小值)
  • 6.4.4 帶(NOT)EXISTS謂詞的子查詢

帶有EXISTS謂詞的子查詢不返回任何數據,只產生邏輯真值"true",或邏輯假值"false"。
由EXISTS引出的子查詢,其目標列表達式通常都用*。
若內層查詢結果非空,則外層的WHERE子句返回真值;若內層查詢結果爲空,則外層的WHERE子句返回假值。
(NOT EXISTS與其相反)

模板:SELECT 字段名1,字段名2,......
      FROM 表名
      WHERE EXISTS
      (
       SELECT *
       FROM 表名
       WHERE 條件表達式......
      );

舉例:SELECT stu_name 學生姓名,stu_major 專業
      FROM student
      WHERE EXISTS
      (
     	SELECT *
     	FROM score
     	WHERE student.stu_id=score.stu_id
          AND cs_id="05203314"
      );
(查詢選修課程號爲"05203314"的學生的姓名及專業)

 

7.SQL語句的編寫順序

SELECT ...
FROM ...
WHERE ... 
GROUP BY ... HAVING ...
ORDER BY ...

8.SQL語句的執行順序

FROM ...
WHERE  ...
GROUP BY ... HAVING ...
SELECT ...
ORDER BY ...

9.SQL語句中四大功能、九大動詞

                    SQL語句功能                                                                    對應的動詞
                       數據查詢                                                                      SELECT
                       數據定義                                                       CREATE、ALTER、DROP
                       數據操縱                                                     INSERT、UPDATE、DELETE
                       數據控制                                                              GRANT、REVOKE

那麼,以上的所有內容就是博主自己總結的MySQL中常用的一些SQL語句,本篇博客後續還會向其中增添內容,還未100%的完成,因爲博主也還在學習數據庫的過程中,所以並不是大佬,博文當中或許也會出錯,還望諒解!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章