數(shù)據(jù)庫(kù)總結(jié)

以下是我對(duì)所學(xué)的數(shù)據(jù)庫(kù)的總結(jié),希望能對(duì)你有幫助

mysql -u root -p? ? ?開(kāi)啟MYSQL

數(shù)據(jù)庫(kù)

1. 查看現(xiàn)有數(shù)據(jù)庫(kù)

SHOW DATABASES;

2. 新建數(shù)據(jù)庫(kù)

CREATE DATABASE <數(shù)據(jù)庫(kù)名>;

3. 選擇數(shù)據(jù)庫(kù)

USE <數(shù)據(jù)庫(kù)名>;

4. 從.sql文件引入SQL語(yǔ)句

SOURCE <.sql文件路徑>;

5. 刪除數(shù)據(jù)庫(kù)

DROP DATABASE <數(shù)據(jù)庫(kù)名>;

6. 查看當(dāng)前數(shù)據(jù)庫(kù)中的表

SHOW TABLES;

7. 創(chuàng)建新表

CREATE TABLE<表名>(<列名1><列類(lèi)型1>,<列名2><列類(lèi)型2>,<列名3><列類(lèi)型3>,? ? PRIMARY KEY (<列名1>),? ? FOREIGN KEY (<列名2>) REFERENCES<表名2>(<列名2>));

主鍵(PRIMARY KEY)用來(lái)標(biāo)識(shí)一條記錄(一行),所以每條記錄的主鍵值必須是唯一的。主鍵可以定義在多列上,這稱(chēng)為聯(lián)合主鍵(composite primary key)。

如果我們把表視作具有某種結(jié)構(gòu)的數(shù)組(例如,C語(yǔ)言中的struct),那么外鍵(FOREIGN KEY)可以視作指針。

例子:

CREATE TABLEinstructor(? ? ID CHAR(5),? ? nameVARCHAR(20)NOT NULL,? ? dept_nameVARCHAR(20),? ? salaryNUMERIC(8,2),? ? PRIMARYKEY(ID),? ? FOREIGNKEY(dept_name)REFERENCESdepartment(dept_name));

在上面的例子中,我們創(chuàng)建了一個(gè)教員(instructor)表,該表的主鍵是ID,外鍵是教員所在的部門(mén)名稱(chēng)(dept_name),關(guān)聯(lián)部門(mén)(department)表。此外,教員表還包括姓名(name)、薪水(salary)。其中,姓名有約束NOT NULL,表示姓名這一項(xiàng)不能為空。

8. 概述表中的列

使用如下語(yǔ)句查看表中的列的基本信息:

DESCRIBE <表名>;

下圖顯示了一些例子:


9. 在表中插入新紀(jì)錄

INSERT INTO <表名> (<列名1>, <列名2>, <列名3>, …)VALUES (<值1>, <值2>, <值3>, …);

也可以省略列名(依序在所有列上插入新值):

INSERT INTO <表名>VALUES (<值1>, <值2>, <值3>, …);

10. 在表中更新記錄

UPDATE<表名>SET<列名1>=<值1>,<列名2>=<值2>, ...? ? WHERE<條件>;

11. 清空表

DELETE FROM <表名>;

12. 刪除表

DROP TABLE <表名>;

查詢(xún)

13. SELECT

SELECT語(yǔ)句可以從表中選擇數(shù)據(jù):

SELECT<列名1>,<列名2>, …? ? FROM<表名>;

以下語(yǔ)句選擇所有內(nèi)容:

SELECT * FROM <表名>;

選中部門(mén)(department)表和課程(course)表中的所有內(nèi)容

artment)表和課程(course)表中的所有內(nèi)容

14. SELECT DISTINCT

SELECT DISTINCT過(guò)濾掉了重復(fù)的值:

SELECT DISTINCT<列名1>,<列名2>, …? ? FROM<表名>;

15. WHERE

我們之前在更新記錄時(shí)已經(jīng)用到了WHERE關(guān)鍵字,用來(lái)指明條件。這里我們稍微詳細(xì)一點(diǎn)地介紹下WHERE

WHERE的條件通常是:

比較文本(text)

比較數(shù)字(numbers)

AND、ORNOT等邏輯運(yùn)算

讓我們來(lái)看一些例子:

SELECT * FROM course WHERE dept_name='Comp. Sci.';SELECT * FROM course WHERE credits>3;SELECT * FROM course WHERE dept_name='Comp. Sci.'ANDcredits>3;

16. GROUP BY

GROUP BY語(yǔ)句可以分組結(jié)果,常用于COUNTMAX、MINSUM、AVG聚合函數(shù)(aggregate functions)

SELECT<列名1>,<列名2>, …? ? FROM<表名>GROUP BY<列名>;

讓我們來(lái)看一個(gè)例子,列出每個(gè)部門(mén)的課程數(shù)量:

SELECTCOUNT(course_id), dept_name? ? ? FROM course? ? ? GROUP BY dept_name;

17. HAVING

乍看起來(lái),HAVINGWHERE很像:

SELECT<列名1>,<列名2>, …? ? FROM<表名>GROUP BY<列名x>HAVING<條件>;

那么,HAVINGWHERE有什么不同呢?讓我們先來(lái)看一個(gè)例子,列出開(kāi)了不止一門(mén)課程的部門(mén)開(kāi)設(shè)的課程數(shù):

SELECTCOUNT(course_id), dept_name? ? FROM course? ? GROUP BY dept_name? ? HAVINGCOUNT(course_id)>1;

這里HAVING不能換成WHERE,因?yàn)?b>WHERE直接針對(duì)行操作,且在GROUP BY之前運(yùn)行(即先通過(guò)WHERE篩選行,之后再將篩選出的行通過(guò)GROUP BY分組)。假設(shè)SQL中不存在HAVING語(yǔ)句,那么我們只能先新建一張表,將COUNT(course_id)作為新表的列,然后在新表上再通過(guò)WHERE進(jìn)行篩選(當(dāng)然,實(shí)際上SQL提供了派生表、CTE等機(jī)制,并不用真的手工建新表)。

18. ORDER BY

ORDER BY可以對(duì)結(jié)果進(jìn)行排序,在沒(méi)有明確指定ASC(升序)或DESC(降序)的情況下,默認(rèn)按升序排列。

SELECT<列名1>,<列名2>, …FROM<表名>ORDER BY<列名1>,<列名2>, …, ASC|DESC;

例子:

SELECT * FROM course ORDER BY credits;

SELECT * FROM course ORDER BY credits DESC;


19. BETWEEN

BETWEEN語(yǔ)句用于指定區(qū)間。

SELECT<列名1>,<列名2>, …? ? FROM<表名>WHERE<列名x>BETWEEN<值1>AND<值2>;

其中“值”可能是數(shù)字,文本,乃至日期等。

例如,列出薪資在50000和100000之間的教員:

SELECT * FROM instructor? ? WHERE salary BETWEEN50000AND100000;

20. LIKE

LIKE用于匹配文本中的特定模式。

SELECT<列名1>,<列名2>, …? ? FROM<表名>WHERE<列名x>LIKE<模式>;

模式中可以使用以下兩個(gè)通配符:

%(零個(gè)、一個(gè)或多個(gè)字符)

_(單個(gè)字符)

例子:列出課程名中包含“to”的課程,以及課程ID以“CS-”開(kāi)頭的課程。

SELECT * FROM course WHERE title LIKE'%to%';SELECT * FROM course WHERE course_id LIKE'CS-___';

21. IN

IN語(yǔ)句表示值屬于某個(gè)集合。

SELECT<列名1>,<列名2>, …? ? FROM<表名>WHERE<列名n>IN (<值1>,<值2>, …);

例子:列出計(jì)算機(jī)科學(xué)、物理、電子工程部門(mén)的學(xué)生。

SELECT *FROM student? ? WHERE dept_nameIN('Comp. Sci.','Physics','Elec. Eng.');

22. JOIN

JOIN用來(lái)組合兩張以上表中的值。下圖展示了JOIN的三種類(lèi)型:

SELECT<列名1>,<列名2>, …? ? FROM<表名1>JOIN<表名2>ON<表名1.列名x>=<表名2.列名x>

讓我們來(lái)看三個(gè)例子,分別對(duì)應(yīng)三種JOIN的類(lèi)型。

第一個(gè)例子,列出課程時(shí)包含開(kāi)設(shè)課程的部門(mén)詳情:

SELECT * FROM course

? ? JOIN department

? ? ON course.dept_name=department.dept_name;

第二個(gè)例子,列出所有具有前置課程的課程的詳情:

SELECT prereq.course_id, title, dept_name, credits, prereq_id

? ? FROM prereq

? ? LEFT OUTER JOIN course

? ? ON prereq.course_id=course.course_id;

最后一個(gè)例子,列出所有課程的詳情,不管是否具有前置課程:

SELECT course.course_id, title, dept_name, credits, prereq_id

? ? FROM prereq

? ? RIGHT OUTER JOIN course

? ? ON prereq.course_id=course.course_id;

23. 視圖

視圖(view)是虛擬的SQL表。它包含行和列,和一般的SQL表格很類(lèi)似。視圖總是顯示數(shù)據(jù)庫(kù)中的最新數(shù)據(jù)。

CREATE VIEW

創(chuàng)建視圖:

CREATE VIEW<視圖名>AS? ? SELECT<列名1>,<列名2>, …? ? FROM<表名>WHERE<條件>;

DROP VIEW

刪除視圖:

DROP VIEW <視圖名>;

例如,創(chuàng)建3學(xué)分的課程視圖:

CREATE VIEW my_viewASSELECT * FROM course? ? WHERE credits=3;

24. 聚合函數(shù)

我們之前已經(jīng)提到聚合函數(shù),這里列出最常用的一些聚合函數(shù):

COUNT(列名)返回行數(shù)

SUM(列名)返回指定列的值之和

AVG(列名)返回指定列的平均值

MIN(列名)返回指定列的最小值

MAX(列名)返回指定列的最大值

25. 嵌套子查詢(xún)

在SQL請(qǐng)求中,可以嵌套SELECT-FROM-WHERE表達(dá)式,稱(chēng)為嵌套子查詢(xún)(nested subqueries)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容