數(shù)據(jù)庫(kù)基本操作語(yǔ)法歸納總結(jié)
關(guān)系型數(shù)據(jù)庫(kù):以表作為實(shí)體,以主鍵和外鍵關(guān)系作為聯(lián)系的一種數(shù)據(jù)結(jié)構(gòu)。
主鍵:在關(guān)系型數(shù)據(jù)庫(kù)中,用一個(gè)唯一的標(biāo)識(shí)符來(lái)標(biāo)志每一行,這個(gè)標(biāo)識(shí)符就是主鍵。主鍵有兩個(gè)特點(diǎn):非空和不能重復(fù)。
外鍵:在關(guān)系型數(shù)據(jù)庫(kù)中,外鍵就是用來(lái)表達(dá)表與表之間的關(guān)系、聯(lián)系,通過(guò)主外鍵關(guān)系,建立實(shí)體之間的聯(lián)系。
表之間的三種基本關(guān)系模型:
① 一對(duì)多關(guān)系: 一條主表記錄對(duì)應(yīng)多條從表記錄,一條從表記錄對(duì)應(yīng)一條主表記錄。
② 一對(duì)一關(guān)系: 一條主表記錄對(duì)應(yīng)一條從表記錄,一條從表記錄對(duì)應(yīng)一條主表記錄。
③ 多對(duì)多關(guān)系: 一條主表記錄對(duì)應(yīng)多條從表記錄,一條從表記錄對(duì)應(yīng)多條主表記錄。
關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS):
關(guān)系型數(shù)據(jù)庫(kù)只是一個(gè)保存數(shù)據(jù)的容器,大多數(shù)數(shù)據(jù)庫(kù)依靠一個(gè)稱(chēng)為數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)的軟件來(lái)管理數(shù)據(jù)庫(kù)中的數(shù)據(jù)。
目前流行的關(guān)系型數(shù)據(jù)庫(kù)服務(wù)器管理系統(tǒng)有:
① 微軟的MS SQL Server
② 甲骨文的Oracle
③ IBM公司的DB2
④ 開(kāi)源數(shù)據(jù)庫(kù)的MySQL、PostgreSQL
SQL:
SQL是結(jié)構(gòu)化查詢(xún)語(yǔ)言,是一種用于管理關(guān)系型數(shù)據(jù)庫(kù),并與數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行通訊的計(jì)算機(jī)語(yǔ)言。
SQL語(yǔ)句:
① 數(shù)據(jù)定義語(yǔ)言(DDL): 用于創(chuàng)建、修改和刪除數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)結(jié)構(gòu)。
-- 創(chuàng)建數(shù)據(jù)庫(kù)db CREATE DATABASE db; -- 刪除數(shù)據(jù)庫(kù)db DROP DATABASE db; -- 建立表t_student CREATE TABLE t_student( -- PRIMARY KEY標(biāo)志該列為主鍵列 -- AUTO_INCREMENT設(shè)置自動(dòng)增長(zhǎng)列,該列的值由DBMS分配,不用開(kāi)發(fā)者維護(hù) id INT PRIMARY KEY AUTO_INCREMENT,-- 編號(hào) studentName VARCHAR(20),-- 姓名,20表示名字20個(gè)字 sex ENUM('男','女'),-- 性別,enum表示枚舉 birthday DATE, -- 生日 tel VARCHAR(11) -- 電話(huà) );
② 數(shù)據(jù)查詢(xún)語(yǔ)言(DQL):用于數(shù)據(jù)庫(kù)中數(shù)據(jù)的查詢(xún)
-- 查詢(xún)所有的性別 DISTINCT表示去除重復(fù)的列 SELECT DISTINCT sex FROM t_student; -- 查詢(xún)表中所有的數(shù)據(jù),*表示查詢(xún)表中所有的列 SELECT * FROM t_student; -- 查詢(xún)第一條 開(kāi)始的數(shù)據(jù),顯示3條記錄 SELECT * FROM t_student LIMIT 0,3;
③ 數(shù)據(jù)操作語(yǔ)言(DML): 用于修改數(shù)據(jù)庫(kù)中的數(shù)據(jù),包括插入、更新和刪除數(shù)據(jù)
-- 添加記錄 INSERT INTO t_student(studentName,sex,birthday,tel) VALUES('張三','男','1983-09-30','13987879898'); -- 刪除id為17的記錄 DELETE FROM t_student WHERE id=17; -- 修改李四的電話(huà) UPDATE t_student SET tel='13966666666' WHERE studentName='李四';
④ 數(shù)據(jù)控制語(yǔ)言(DCL):控制數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)權(quán)限
-- 給用戶(hù)授予訪(fǎng)問(wèn)權(quán)限的GRANT語(yǔ)句
-- 取消用戶(hù)訪(fǎng)問(wèn)權(quán)限的REVOKE語(yǔ)句
外鍵約束:
外鍵:是指從表的某列與主鍵的某列存在依附關(guān)系。
外鍵約束:是指在外鍵關(guān)聯(lián)主鍵上強(qiáng)制加上一個(gè)約束,如果違反該約束,則不允許該條數(shù)據(jù)的修改。
注意:沒(méi)有建立外鍵約束不等于沒(méi)有外鍵。
主鍵約束:
主鍵是表中的一到多個(gè)列,主鍵列不能為空,也不能重復(fù),一個(gè)表中只能由一個(gè)主鍵。
聚合函數(shù):
對(duì)一組數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析是使用聚合函數(shù)來(lái)實(shí)現(xiàn)的。常見(jiàn)聚合函數(shù)如下:
COUNT:統(tǒng)計(jì)行數(shù)量。
SUM:獲取單個(gè)列的和計(jì)量。
AVG:計(jì)算某個(gè)列的平均值。
MAX:計(jì)算某個(gè)列的最大值。
MIN:計(jì)算某個(gè)列的最小值。
SQL語(yǔ)句的執(zhí)行順序:
第一步:執(zhí)行FROM
第二步:where條件過(guò)濾
第三步:GROUP BY分組
第四步:執(zhí)行select投影列
第五步:HAVING條件過(guò)濾
第六步:執(zhí)行ORDER BY排序語(yǔ)句,默認(rèn)為asc升序,DESC為降序。
聯(lián)接:
內(nèi)聯(lián)接和外聯(lián)接的區(qū)別:
內(nèi)聯(lián)接:只能查詢(xún)兩個(gè)表中都有的相關(guān)數(shù)據(jù)的記錄;
外連接:可以查詢(xún)一個(gè)表中所有的記錄,無(wú)論該記錄是否有關(guān)聯(lián)數(shù)據(jù)。
CREATE TABLE t_man( id INT PRIMARY KEY AUTO_INCREMENT, manName VARCHAR(20), birthday DATE ); INSERT INTO t_man(manName,birthday) VALUES('張三','1980-02-03'),('李四','1994-01-05'), ('王五','1991-07-30'),('趙六','1995-11-18'); SELECT * FROM t_man; CREATE TABLE t_bike( id INT PRIMARY KEY AUTO_INCREMENT, bikeType VARCHAR(20), money INT, manId INT ); -- 添加外鍵約束,讓主鍵和外鍵一一對(duì)應(yīng),防止垃圾數(shù)據(jù)的產(chǎn)生 ALTER TABLE t_bike ADD CONSTRAINT fk_mb FOREIGN KEY (manId) REFERENCES t_man(id); INSERT INTO t_bike(bikeType,money,manId) VALUES('鳳凰',400,1),('永久',500,1),('火麒麟',250,1), ('大運(yùn)',1000,2),('夏力',600,2),('捷安特',1200,3), ('摩拜',200,3),('寶馬',2000,3),('奔馳',600,3); -- 查詢(xún)所有自行車(chē),并顯示該自行車(chē)的主人姓名 SELECT b.*,m.manName FROM t_bike b JOIN t_man m ON m.id=b.manId; -- 查詢(xún)李四所有的自行車(chē)(內(nèi)連接:顯示兩個(gè)表中有聯(lián)系的數(shù)據(jù)) SELECT b.* ,m.manName FROM t_bike b JOIN t_man m ON m.id=b.manId WHERE m.manName='李四'; SELECT b.* ,m.manName FROM t_man m JOIN t_bike b ON m.id=b.manId WHERE m.manName='李四'; SELECT b.* FROM t_bike b,t_man m WHERE b.manId=m.id AND m.manName='李四'; -- 顯示所有用戶(hù)的自行車(chē)信息,外連接不能用,加where的形式來(lái)寫(xiě) -- 外連接:RIGHT 右外連接,包含右邊表中所有的信息,left 左外連接,包含左邊表中所有的信息。 SELECT m.*,b.bikeType,b.money FROM t_bike b RIGHT JOIN t_man m ON b.manId=m.id; -- 顯示所有用戶(hù)自行車(chē)的數(shù)量 -- 左外連接 SELECT m.*,COUNT(bikeType) num FROM t_man m LEFT JOIN t_bike b ON m.id=b.manId GROUP BY m.id; -- 右外連接 SELECT m.*, COUNT(bikeType) number FROM t_bike b RIGHT JOIN t_man m ON b.manId=m.id GROUP BY m.id;
希望本篇文章對(duì)您有所幫助
相關(guān)文章
springboot配置flyway(入門(mén)級(jí)別教程)
本文介紹了springboot配置flyway,主要介紹基于SpringBoot集成flyway來(lái)管理數(shù)據(jù)庫(kù)的變更,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09Mybatis ResultType如何處理返回類(lèi)型
這篇文章主要介紹了Mybatis ResultType如何處理返回類(lèi)型方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01SpringBoot整合Redisson實(shí)現(xiàn)分布式鎖
本文主要介紹了SpringBoot整合Redisson實(shí)現(xiàn)分布式鎖,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11SpringBoot 使用 @Value 注解讀取配置文件給靜態(tài)變量賦值
這篇文章主要介紹了SpringBoot 使用 @Value 注解讀取配置文件給靜態(tài)變量賦值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-1110個(gè)Java解決內(nèi)存溢出OOM的方法詳解
在Java開(kāi)發(fā)過(guò)程中,有效的內(nèi)存管理是保證應(yīng)用程序穩(wěn)定性和性能的關(guān)鍵,不正確的內(nèi)存使用可能導(dǎo)致內(nèi)存泄露甚至是致命的OutOfMemoryError(OOM),下面我們就來(lái)學(xué)習(xí)一下有哪些解決辦法吧2024-01-01Java強(qiáng)制類(lèi)型轉(zhuǎn)換原理詳解(父類(lèi)轉(zhuǎn)子類(lèi)、子類(lèi)轉(zhuǎn)父類(lèi))
這篇文章主要給大家介紹了關(guān)于Java強(qiáng)制類(lèi)型轉(zhuǎn)換原理(父類(lèi)轉(zhuǎn)子類(lèi)、子類(lèi)轉(zhuǎn)父類(lèi))的相關(guān)資料,所謂的強(qiáng)制類(lèi)型轉(zhuǎn)換,其實(shí)是自動(dòng)類(lèi)型轉(zhuǎn)換的逆過(guò)程,在數(shù)據(jù)類(lèi)型兼容的情況下,將容量大的數(shù)據(jù)類(lèi)型轉(zhuǎn)換為容量小的數(shù)據(jù)類(lèi)型,需要的朋友可以參考下2023-12-12SpringBoot3.2.2整合MyBatis Plus3.5.5的詳細(xì)過(guò)程
這篇文章給大家介紹了SpringBoot3.2.2整合MyBatis Plus3.5.5的詳細(xì)過(guò)程,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01Java String類(lèi)字符串的理解與認(rèn)知
String字符串和char字符不同,char使用單引號(hào),只能表示一個(gè)字符,字符串就是一段文本。String是個(gè)類(lèi)。這個(gè)類(lèi)使用final修飾,所以這個(gè)類(lèi)是不可以繼承擴(kuò)充和修改它的方法的2021-10-10Java多線(xiàn)程之線(xiàn)程的創(chuàng)建
這篇文章主要介紹了Java多線(xiàn)程之線(xiàn)程的創(chuàng)建,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04