使用Java實現資料庫編程—03 第三章 高級查詢(一)

来源:https://www.cnblogs.com/HQING/archive/2018/07/21/9347432.html
-Advertisement-
Play Games

1、 修改表: (1)修改表名語法: ALTER TABLE <舊表名> RENAME [ TO ] <新表名>; 註意:其中[TO]為可選參數,使用與否不影響結果,僅修改表名,表結構不變; (2)添加欄位語法: ALTER TABLE 表名 ADD 欄位名 數據類型 [屬性]; (3)修改欄位語法 ...


1、        修改表:

(1)修改表名語法:

ALTER TABLE <舊表名> RENAME [ TO ] <新表名>;

註意:其中[TO]為可選參數,使用與否不影響結果,僅修改表名,表結構不變;

(2)添加欄位語法:

ALTER TABLE 表名 ADD 欄位名 數據類型 [屬性];

(3)修改欄位語法:

ALTER TABLE 表名 CHANGE 原欄位名 新欄位名 數據類型 [屬性];

其中,”原欄位名“指修改前的欄位名,“ 新欄位名”指修改後的欄位名,“數據類型”指修改後的數據類型,

如果不需要修改數據類型,則和原數據類型保持一致,但“數據類型”不能為空。

註意:由於不同的類型的數據儲存方式和長度不同,修改數據類型可能會影響數據表中已有的數據,因此,此種情況下不應輕易修改數據類型。

(4)刪除欄位語法:

ALTER TABLE 表名 DROP欄位名;

Eg

DROP TABLE IF EXISTS `demo01`;

#創建表

CREATE TABLE  `demo01`(

       `id` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,

       `name` VARCHAR(8) NOT NULL

);

#修改表名

ALTER TABLE `demo01` RENAME `demo02`;

#添加欄位

ALTER TABLE ` demo02 ` ADD `password` VARCHAR(32) NOT NULL;

#修改欄位

ALTERTABLE ` demo02 ` CHANGE `name` `username`CHAR(10) NOT NULL;

#刪除欄位

ALTERTABLE ` demo02 ` DROP `password`;

2、        添加主外鍵:

(1)添加主鍵約束語法:

ALTER TABLE 表名 ADD CONSTRAINT 主鍵名 PRIMARY KEY 表名(主鍵欄位);

Eg:設置grade表中gradeId欄位為主鍵

ALTER TABLE `grade` ADD CONSTRAINT `pk_grade` PRIMARY KEY `grade`(`gradeId`);

(2)添加外鍵約束語法:

ALTER TABLE 表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY (外鍵欄位) REFE RENCES 關聯表名(關聯欄位);

Eg:將student表的gradeId欄位和grade表的gradeId欄位建立外鍵關聯:

ALTER TABLE `student`  ADD  CONSTRAINT fk_student_grade FOREIGN KEY(`gradeId`) REFERENCES `grade` (`gradeId`);

提示:在MySQL中,InnoDB儲存類型的表支持外鍵,

MyISAM儲存類型的表不支持外鍵,因此對於MySISAM儲存類型的表,也可以通過建立邏輯關聯的方式保證數據的完整性和一致性,

這種關聯實際上是依照設計之初就定義好的固有邏輯,按照這種固有邏輯存取數據即可,不需要在資料庫層面進行“硬綁定”。

3、      DML(數據操作語言)

(1)插入數據記錄:

(A)插入單行數據記錄語法:

        INSERT INTO 表名 [(欄位名列表)] VALUES(值列表);

        Eg:

           INSERT INTO `student`(`loginPwd`,`studentName`,`gradeId`,`phone`,`bornDate`)

           VALUES('123','黃小平',1,'13956799999','1996-5-8');

其中:

1.表的欄位名是可選的,如果省略,則依次插入所有欄位。

2.多個列表和多個值之間使用逗號分隔。

3.值列表必須和欄位名列表數量相同,且數據類型相符。

4.如果插入的是表中部分數據,欄位名列表必須填寫。

 (B)插入多行數據語法:在MySQL中INSERT語句支持一次插入多條記錄,插入時可指定多個值列表,每個值列表之間逗號隔開。

          INSERT INTO 新表(欄位名列表)VALUES(值列表1),(值列表2),……(值列表n);

          註意:插入數據時需要指定具體欄位名。

         Eg

           INSERT INTO `subject`(`subjectNo`,`subjectName`,`classHour`,`gradeID`)

           VALUES(1,'Logic Java',220,1),(2,'HTML',160,1),(3,'Java OOP',230,2);

 

          註意:為避免表結構發生變化引發的錯誤,建議插入數據時寫明具體欄位名!

          插入時間類型也需要 ‘ ’ 。

(2)將查詢結果插入到新表語法:

        CREATE TABLE 新表(SELECT 欄位1,欄位2,..........FROM 原表);

         註意:新表無需事先創建,如新表已存在,將會報錯!

(3)更新數據記錄語法:

         UPDATE 表名 SET 欄位1=值,欄位2=值,。。。。欄位n=值[WHERE 條件];

(4)刪除數據記錄語法:

         DELETE FROM 表名 [WHERE 條件];

          除此之外,也可以使用TRUNCATE語句刪除表中所有行。語法:

          TRUNCATE TABLE 表名;

          註意:TRUNCATE 語句實現刪除表中所有數據,刪除後將重置自增列,表結構及其欄位、約束、索引保持不變執行速度比DELETE語句快。

 

SQL Sever資料庫與MySQL資料庫把數據插入新表語法對比:

 

4、數據查詢:

         ●查詢回顧:SQL Server中查詢語句在MySQL中同樣支持;

SQL Service中的數據查詢語法:

SELECT<欄位名列表>

FRMO<表名或視圖>

[WHERE <查詢條件>]

[GROUP BY<分組欄位名>]

[HAVING<條件>]

[OGDER BY<排序的欄位名>[ASC 或 DESC]]

 

Eg

SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate`

FROM `student`

WHERE `gradeId` = 1

ORDER BY studentNo;

其中:

1.欄位名列表為要查詢的欄位名、各欄位之間使用逗號分隔、若查詢表中所有欄位、則使用“* ”號表示。

2.FROM後的表名為要查詢的數據的來源,可以單個可以多個。

3.WHERE子句為可選項,指定查詢的條件。

4.GROUP BY子句表明查詢出來的數據按指定欄位進行分組。

5.HAVING子句用於篩選組。

6.OGDER BY子句指定按什麼順序顯示查詢出來的數據,什麼欄位的升序(ASC)或降序(DESC)

          ●LIMIT子句:MySQL查詢語句中使用LIMIT子句限制結果集;

SELECT  <欄位名列表>

FROM  <表名或視圖>

[WHERE  <查詢條件>]

[GROUP BY <分組的欄位名>]

[ORDER BY  <排序的列名> [ASC DESC]]

[LIMIT [位置偏移量, ]行數];

其中:

  1. 位子偏移量:指從結果集中第幾條數據開始顯示(第一條記錄的位置偏移量是:0,第二條記錄的位置偏移量是:1,............),

此參數可選,當省略是從第一條記錄開始顯示。

2.行數:指顯示記錄的條數。

5、常用函數:

聚合函數:

AVG(); 作用:返回某欄位的平均值。

COUNT(); 作用:返回某欄位的行數。

MAX(); 作用:返回某欄位的最大值。

MIN(); 作用:返回某欄位的最小值。

SUM(); 作用:返回某欄位的和。

數學函數:

CEIL(x);作用:返回大於或等於數值 x 的最小整數。

舉例:SELECT CEIL (2.3);返回:3

FLOOR(x);作用:返回小於或等於數值 x 的最大整數

舉例:SELECT FLOOR(2.3);返回:2

RAND();作用:返回0~1的隨機數。

舉例:SELECT RAND();返回:0.59464161

  • ●字元串函數:

CONCAT(str1,str2,...,strln);作用:鏈接字元串str1,str2.....strln為一個完整的字元串。

舉例:SELECT CONCAT("My","S","QL");   返回:MySQl

INSERT(str,pos,len,newstr);作用:將字元串 str 從 pos 位置開始,len 個字元長的子串替換為字元串 newstr

舉例:SELECT INSERT('這是SQL Server 資料庫',3,10,'MySQL');  返回:這是MySQl資料庫

LOWER(str);作用:將字元串 str 中所有字元變為小寫

舉例:SELECT LOWER('MySQL');  返回:mysql

UPPER(str);作用:將字元串 str 中所有字元變為大寫

舉例:SELECT UPPER('MySQL');   返回:MYSQL

SUBSTRING(str,num,len);作用:返回字元串 str 的第num 個位置開始長度為len 的子字元串

舉例:SELECT SUBSTRING('JavaMySQLOracle',5,5);  返回:MySQL

  • ●時間日期函數:

CURDATE();作用:獲取當前日期

舉例:SELECT CURDTE();   返回:2016-08-08

CURTIME();作用:獲取當前時間

舉例:SELECT CURTIME();  返回:19:19:26

NOW();作用:獲取當前日期和時間

舉例:SELECT NOW();  返回:2016-08-08 19:19:26

WEEK(date);作用:返回日期date為一年中的第幾周

舉例:SELECT WEEK(NOW());   返回:26

YEAR(date);作用:返回日期date的年份

舉例:SELECT YEAR(NOW()); 返回:2016

HOUR(time);作用:返回時間按 time 的小時值

舉例:SELECT HOUR(NOW());返回:9

MINUTE(time);作用:返回時間 time 的分鐘值

舉例:SELECT MINUTE(NOW()); 返回:43

DATEDIFF(date1,date2);

作用:返回日期參數 date1 和 date2 之間相隔的天數。

舉例:SELECT DATEDIFF(NOW(),‘2018-8-8’);返回:2881

ADDDATE(date,n);作用:計算日期參數 date 加上 n 天後的日期。

舉例:SELECT ADDDATE(NOW(),5);

返回:2016-09-02 09:37:07

6、子查詢:以查詢為查詢條件的查詢

      Eg1

  eg:

    

實現方法二:採用子查詢實現:

 

  1、 子查詢是一個嵌套在 SELECT、INSERT、UPDATE 或 DELETE 語句或其他子查詢中的查詢

   2、子查詢在WHERE語句中的一般用法

子查詢語法:

    SELECT .... FROM 表1 WHERE 欄位1 比較運算符(子查詢);

其中:

子查詢語句必須放置在一對圓括弧內。

比較運算符包括:>,=,<,>=,<=。

外面查詢稱為父查詢,圓括弧中嵌入的查詢稱為子查詢。

執行時,先執行子查詢,在執行父查詢,返回返回值。

                    註意;將子查詢和比較運算符聯合使用,必須保證子查詢返回的值不能多於一個

     Eg2: 使用子查詢替換表連接;

 

 

  實現方法一:採用表連接 :內連接(等值連接)

SELECT `studentName` FROM `student` stu

  INNER JOIN `result` r ON stu.studentNO = r.studentNo          

  INNER JOIN `subject` sub ON r.subjectNo = sub.subjectNo      

WHERE `studentResult` = 60 AND `subjectName` = 'Logic Java';

 實現方法二:採用子查詢

SELECT `studentName` FROM `student` WHERE `studentNo` = (

             SELECT `studentNo` FROM `result`

             INNER JOIN `Subject` ON result.subjectNo= subject.subjectNo

             WHERE `studentResult`=60 AND `subjectName`='Logic Java'

);

  1、子查詢比較靈活、方便,常作為增刪改查的篩選條件,適合於操縱一個表的數據

  2、表連接更適合於查看多表的數據

7、IN和NOT IN 子查詢:

                  ●IN子查詢:使用=,>等比較運算符時,要求子查詢只能返回,一條或空的記錄,

                                     在MySQL中,當子查詢跟隨在=、!=、<、>、>=和<=時,不允許子查詢返回多條記錄。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 把三個服務改為自動: ...
  • rm命令Remove,功能:1)刪除目錄,2)刪除文件。 (可以遞歸的刪除指定目錄的所有文件及子目錄) 註意:rm是一個危險的命令,使用的時候要特別當心,尤其對於初學者來說。 1、用法 rm [選項] [參數] (參數為目錄或文件) 2、命令選項 -f:不提示,強制刪除文件或目錄;-i:刪除已有文件 ...
  • mkdir用來創建具有指定名稱的目錄,該目錄不能已存在,且當前用戶對工作目錄具有寫許可權 1、用法: mkdir [選項] [目錄..] 2、選項 -m: --mode=模式,為目錄指定訪問許可權,與chmod類似-p: --parents 當目錄的父級目錄不存在時,創建父級目錄,該選項常用於創建級聯目 ...
  • 前言:該文章是基於 Hadoop2.7.6_01_部署 進行的。 1. Hive基本概念 1.1. 什麼是Hive Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張資料庫表,並提供類SQL查詢功能。 1.2. 為什麼使用Hive 直接使用hadoop所面臨的問題 人員學 ...
  • CMD下進入MYSQL的命令 mysql -h localhost -u root -p 切到MYSQL的bin目錄下,輸入上面命令,回車 然後輸入密碼 回車 ...
  • 最近下載新的MySQL8.0 來使用的時候, 通過sqlyog、或者程式中連接資料庫時,提示:Authentication plugin 'caching_sha2_password' cannot be loaded 的錯誤,經查看發現,8.0改變了 身份驗證插件 , 打開 my.ini (或者m ...
  • mysql的字元集和字元序: 字元序:字元序(Collation)是指在同一字元集內字元之間的比較規則 一個字元序唯一對應一種字元集,但一個字元集可以對應多種字元序,其中有一個是預設字元序(Default Collation) mysql的字元集和字元序有四個級別的預設設置:伺服器級,資料庫級,數據 ...
  • 1、事務(Transaction): 事務是將一系列數據操作綁成一個整體進行統一管理。 如果一事務執行成功,則咋子該事務中進行的所有數據更改均會提交,稱為資料庫中的永久成部分。 如果事務執行是遇到錯誤且必須取消或回滾,則數據將全部恢復到操作前的狀態,所有數據的更改均被清除。 定義: 事務是一種機制、 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...