手机看片精品高清国产日韩,色先锋资源综合网,国产哺乳奶水91在线播放,乱伦小说亚洲色图欧洲电影

My SQL表及其增刪改查

2025-01-07 17:48:39 2262

如今數(shù)據(jù)庫管理成為了眾多領(lǐng)域不可或缺的關(guān)鍵技能。MySQL 作為一款廣受歡迎的開源數(shù)據(jù)庫管理系統(tǒng),其操作的熟練掌握尤為重要。今天藍(lán)隊云將深入探討 MySQL 中關(guān)于數(shù)據(jù)表及數(shù)據(jù)處理的核心操作。


一、MySQL創(chuàng)建數(shù)據(jù)表(CREATE TABLE語句)


在創(chuàng)建數(shù)據(jù)庫之后,接下來就要在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表。所謂創(chuàng)建數(shù)據(jù)表,指的是在已經(jīng)創(chuàng)建的數(shù)據(jù)庫中建立新表。

創(chuàng)建數(shù)據(jù)表的過程是規(guī)定數(shù)據(jù)列的屬性的過程,同時也是實施數(shù)據(jù)完整性(包括實體完整性、引用完整性和域完整性)約束的過程。

接下來我們介紹一下創(chuàng)建數(shù)據(jù)表的語法形式。

在 MySQL 中,可以使用 CREATE TABLE 語句創(chuàng)建表。其語法格式為:

CREATE TABLE <表名> ([表定義選項])[表選項][分區(qū)選項];

CREATETABLE命令語法比較多,其主要是由表創(chuàng)建定義(create-definition)、表選項(table-options)和分區(qū)選項(partition-options)所組成的。


mysql> USE test_db;
Database changed
mysql> CREATE TABLE tb_emp1 
   -> (    -> id INT(11),   
    -> name VARCHAR(25),   
     -> deptId INT(11),   
      -> salary FLOAT  
        -> );
        Query OK, 0 rows affected (0.37 sec)


語句執(zhí)行后,便創(chuàng)建了一個名稱為 tb_emp1 的數(shù)據(jù)表,使用 SHOW TABLES;語句查看數(shù)據(jù)表是否創(chuàng)建成功,如下所示。

mysql> SHOW TABLES;
+--------------------+
| Tables_in_test_db  |
+--------------------+
| tb_emp1            |
+--------------------+
1 rows in set (0.00 sec)


MySQL 使用 ALTER TABLE 語句修改表。常用的修改表的操作有修改表名、修改字段數(shù)據(jù)類型或字段名、增加和刪除字段、修改字段的排列位置、更改表的存儲引擎、刪除表的外鍵約束等。


使用 ALTER TABLE 修改表 tb_emp1 的結(jié)構(gòu),在表的第一列添加一個 int 類型的字段 col1,輸入的 SQL 語句和運(yùn)行結(jié)果如下所示。

mysql> ALTER TABLE tb_emp1 
   -> ADD COLUMN col1 INT FIRST;
   Query OK, 0 rows affected (0.94 sec)


在MySQL數(shù)據(jù)庫中,對于不再需要的數(shù)據(jù)表,我們可以將其從數(shù)據(jù)庫中刪除。在刪除表的同時,表的結(jié)構(gòu)和表中所有的數(shù)據(jù)都會被刪除,因此在刪除數(shù)據(jù)表之前最好先備份,以免造成無法挽回的損失。


使用 DROP TABLE 語句可以刪除一個或多個數(shù)據(jù)表。刪除數(shù)據(jù)表 tb_emp1,輸入的 SQL 語句和運(yùn)行結(jié)果如下所示。

mysql> DROP TABLE tb_emp1;
Query OK, 0 rows affected (0.22 sec)


二、MySQL INSERT:插入數(shù)據(jù)(添加數(shù)據(jù))

數(shù)據(jù)庫與表創(chuàng)建成功以后,需要向數(shù)據(jù)庫的表中插入數(shù)據(jù)。在 MySQL 中可以使用 INSERT 語句向數(shù)據(jù)庫已有的表中插入一行或者多行元組數(shù)據(jù)。

INSERT 語句有兩種語法形式,分別是 INSERT…VALUES 語句和 INSERT…SET 語句。

1) INSERT…VALUES語句

-- INSERT VALUES 的語法格式為:INSERT INTO <表名> [ <列名1> [ , … <列名n>] ]
VALUES (值1) [… , (值n) ];


語法說明如下。

  • <表名>:指定被操作的表名。

  • <列名>:指定需要插入數(shù)據(jù)的列名。若向表中的所有列插入數(shù)據(jù),則全部的列名均可以省略,直接采用 INSERT<表名>VALUES(…) 即可。

  • VALUES 或 VALUE 子句:該子句包含要插入的數(shù)據(jù)清單。數(shù)據(jù)清單中數(shù)據(jù)的順序要和列的順序相對應(yīng)。

2) INSERT…SET語句

-- 語法格式為:INSERT INTO <表名>
SET <列名1> = <值1>,<列名2> = <值2>


在 tb_courses 表中插入一條新記錄,course_id 值為 1,course_name 值為“Network”,course_grade 值為 3,info 值為“Computer Network”。


mysql> INSERT INTO tb_courses   
 -> (course_id,course_name,course_grade,course_info)   
  -> VALUES(1,'Network',3,'Computer Network');
  Query OK, 1 rows affected (0.08 sec)


三、MySQL DELETE:刪除數(shù)據(jù)

在 MySQL 中,可以使用 DELETE 語句來刪除表的一行或者多行數(shù)據(jù)。

使用 DELETE 語句從單個表中刪除數(shù)據(jù),語法格式為:

DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]


語法說明如下:

  • <表名>:指定要刪除數(shù)據(jù)的表名。

  • ORDER BY 子句:可選項。表示刪除時,表中各行將按照子句中指定的順序進(jìn)行刪除。

  • WHERE 子句:可選項。表示為刪除操作限定刪除條件,若省略該子句,則代表刪除該表中的所有行。

  • LIMIT 子句:可選項。用于告知服務(wù)器在控制命令被返回到客戶端前被刪除行的最大值。

注意:在不使用 WHERE 條件的時候,將刪除所有數(shù)據(jù)。

在 tb_courses_new 表中,刪除 course_id 為 4 的記錄,輸入的 SQL 語句和執(zhí)行結(jié)果如下所示。

mysql> DELETE FROM tb_courses 
   -> WHERE course_id=4;
   Query OK, 1 row affected (0.00 sec)



四、MySQL UPDATE:修改數(shù)據(jù)(更新數(shù)據(jù))


在 MySQL 中,可以使用 UPDATE 語句來修改、更新一個或多個表的數(shù)據(jù)。

使用 UPDATE 語句修改單個表,語法格式為:


UPDATE <表名> SET 字段 1=值 1 [,字段 2=值 2… ] [WHERE 子句 ]
[ORDER BY 子句] [LIMIT 子句]


語法說明如下:

  • <表名>:用于指定要更新的表名稱。

  • SET 子句:用于指定表中要修改的列名及其列值。其中,每個指定的列值可以是表達(dá)式,也可以是該列對應(yīng)的默認(rèn)值。如果指定的是默認(rèn)值,可用關(guān)鍵字 DEFAULT 表示列值。

  • WHERE 子句:可選項。用于限定表中要修改的行。若不指定,則修改表中所有的行。

  • ORDER BY 子句:可選項。用于限定表中的行被修改的次序。

  • LIMIT 子句:可選項。用于限定被修改的行數(shù)。

注意:修改一行數(shù)據(jù)的多個列值時,SET 子句的每個值用逗號分開即可。

在 tb_courses_new 表中,更新所有行的 course_grade 字段值為 4,輸入的 SQL 語句和執(zhí)行結(jié)果如下所示。

mysql> UPDATE tb_courses_new   
 -> SET course_grade=4;
 Query OK, 3 rows affected (0.11 sec)
 Rows matched: 4  Changed: 3  Warnings: 0


五、MySQL SELECT:數(shù)據(jù)表查詢語句

MySQL表單查詢是指從一張表的數(shù)據(jù)中查詢所需的數(shù)據(jù),主要有查詢所有字段、查詢指定字段、查詢指定記錄、查詢空值、多條件的查詢、對查詢結(jié)果進(jìn)行排序等。


從數(shù)據(jù)表中查詢數(shù)據(jù)的基本語句為 SELECT 語句,基本格式如下:

SELECT
{* | <字段列名>}
[
FROM <表 1>, <表 2>…
[WHERE <表達(dá)式>
[GROUP BY <group by definition>
[HAVING <expression> [{<operator> <expression>}…]]
[ORDER BY <order by definition>]
[LIMIT[<offset>,] <row count>]
]

查詢 tb_students_info 表中的所有數(shù)據(jù),輸入的 SQL 語句和執(zhí)行結(jié)果如下所示。

mysql> SELECT id,name,dept_id,age,sex,height,login_date 
   -> FROM tb_students_info;


以上,就是關(guān)于Mysql對于表創(chuàng)建和其增刪改查的基本操作,但是在實際工作中,其實大多數(shù)的操作都是在進(jìn)行查詢,比如大家常聽的SQL boy、SQL gril等,主要工作就是寫SQL查詢語句進(jìn)行數(shù)據(jù)提數(shù)和分析。

下面,我們重點對查詢,結(jié)合關(guān)鍵字和實際用途做一個更詳細(xì)的總結(jié)。

  • 數(shù)據(jù)庫和表的查詢

--顯示所有數(shù)據(jù)庫:
SHOW DATABASES;
--顯示所有的表:
SHOW TABLES;
--查看表結(jié)構(gòu)
DESC 表名;
-- 查看表的創(chuàng)建語句
SHOW CREATE TABLE 表名;


  • 查詢表

--查詢表中的姓名和年齡SELECT 姓名,年齡 FROM 表名 ;
--查詢表中id乘50和姓名的結(jié)果
SELECT id*50,姓名 FROM 表名;
--給乘50的列名加個注釋:as "字符串",可以把a(bǔ)s去掉也能顯示注釋名
SELECT id*50 as "乘50",姓名 FROM 表名;


  • 查詢?nèi)ブ?DISTINCT

distinct:作用范圍是后面所有字段的組合(可以有多個字段)

-- 查詢時去除重復(fù)項(表名表中列名,內(nèi)容去重)
SELECT DISTINCT 列名,列名 FROM 表名;


  • 查詢排序 ORDER BY

SELECT DISTINCT 年齡,姓名 FROM 表名 ORDER BY 年齡;
--按年齡排序,展示年齡姓名兩列數(shù)據(jù)
SELECT DISTINCT 年齡,姓名 FROM 表名 ORDER BY 年齡,姓名;
--展示年齡和姓名的前提下,按年齡理相同,姓名不同的排序(默認(rèn)從低到高)
SELECT DISTINCT 年齡,姓名 FROM 表名 ORDER BY 年齡,姓名 DESC;
--展示年齡和姓名的前提下,按年齡理相同,姓名不同的排序(DESC是倒敘)
SELECT DISTINCT 年齡,姓名 FROM 表名 ORDER BY 年齡,姓名 ASC;
--排列順序從低到高(默認(rèn))`(ASC是正序,默認(rèn)就是正序,一般不用)`


  • 查詢限定 WHERE(<= , >=) / LIKE

SELECT 年齡,姓名 FROM 表名 WHERE 年齡>20;
-- 查出所有年齡超過20歲的人
SELECT 年齡,姓名 FROM 表名 WHERE 年齡>20 AND 姓名="張三";
--查出某個國家所有年齡超過20且叫張三的人(注意:后邊是漢字的要加雙引號)
SELECT 年齡,姓名 FROM 表名 WHERE 年齡=21 OR 年齡=67;
--查出年齡為21或者67的人


  • 模糊查詢 like:

--查詢表中叫王某的人有誰SELECT 姓名 FROM 表名 WHERE 姓名 LIKE "王%";
-- WHERE 子句中可以使用等號 = 來設(shè)定獲取數(shù)據(jù)的條件, country=中國’但是有時候我們需要獲取含有某個字符的所有記錄,這時我們就需要在 WHERE 子句中使用 LIKE 子句
SELECT 年齡,姓名 FROM 表名 WHERE age>20 AND 姓名 LIKE ‘王%';
SELECT 年齡,姓名 FROM 表名 WHERE age>20 AND 姓名 LIKE ‘%四';
-- SQL LIKE 子句中使用百分號 %字符來表示任意字符,如果沒有使用百分號 %, LIKE 子句與等號 = 的效果是一樣的


  • 分頁查詢

在查詢時可以只檢索前幾條或者中間某幾行數(shù)據(jù)(數(shù)據(jù)量很大時)

SELECT * FROM t_user LIMIT 0,3; 
   --(從第一行開始,查詢3條數(shù)據(jù))

limit 后面的第一個數(shù)字設(shè)置從哪里開始檢索(從0開始)

limit 后面的第二個數(shù)字是設(shè)置每頁顯示多少條(3,4代表從第四行查詢?nèi)龡l數(shù)據(jù))


  • 聚合函數(shù)

統(tǒng)計總數(shù) count()

為了快速得到統(tǒng)計數(shù)據(jù)(多條數(shù)據(jù)的統(tǒng)計結(jié)果),提供了5個聚合函數(shù)

count():查詢表中某項數(shù)據(jù)一共包含多少條(統(tǒng)計總數(shù))

--查詢表中共包含多少條數(shù)據(jù)(會檢索所有列)
SELECT COUNT(*) FROM 表名;
--查詢表中一共有多少個人且年齡大于20的(只會檢索一列)
SELECT COUNT(年齡) FROM renshi WHERE 年齡>20;


推薦使用第二種寫法,可以提高效率。

統(tǒng)計一般計算的值

--`max(列)`:求此列的最大值
SELECT MAX(age) FROM 表名 ;
--`min(列)`:求此列的最小值
SELECT MIN(age) FROM 表名 ;
--`sum(列)`:求此列的和
SELECT SUM(age) FROM 表名 ;
--`avg(列)`:求此列的平均值
SELECT AVG(age) FROM 表名 ;
--查出總?cè)藬?shù)、最大年齡、最小年齡、年齡的總和、平均年齡
SELECT COUNT(姓名),MAX(年齡),MIN(年齡),SUM(年齡),AVG(年齡) FROM 表名 ;

  • 分組:group by

將表中數(shù)據(jù)分成若干小組,例如分為男人和女人,不同國籍等等。

-- 查看每個國家有多少人
SELECT COUNT(*) FROM 表名 GROUP BY 國家;
--(先根據(jù)group by查詢國家,再查詢有多少人)
--查看每個國家的平均年齡
SELECT AVG(年齡) FROM 表名 GROUP BY 國家;
--查看每個國家的總?cè)藬?shù),年齡總和,平均年齡,最高年齡,最低年齡
SELECT country,COUNT(uname),SUM(age),AVG(age),MAX(age),MIN(age) FROM t_user GROUP BY country;--查看每個國家的總?cè)藬?shù),年齡總和,平均年齡,最高年齡,最低年齡,但是排除某個國家
SELECT 國家,COUNT(姓名),SUM(age),AVG(age),MAX(age),MIN(age) FROM表名 WHERE country!='吳國' GROUP BY country;--列出每個國家小于20歲的人
SELECT 國家,名字 FROM 表名 WHERE age<20 GROUP BY 國家;


  • 過濾:having

SELECT 列名 FROM 表名 WHERE 過濾條件。使用where,可以用來過濾單行,如果想要過濾分組之后的數(shù)據(jù),要加having。

-- 顯示每個國家的平均年齡,但是僅顯示那些總年齡超過100的國家,having在聚合后對組記錄進(jìn)行篩選
SELECT country,AVG(age) FROM 表名 GROUP BY country HAVING SUM(age)>100;
--注意順序:having放在分組之后,因為作用的對象不同。WHERE 子句作用于表和視圖,HAVING 子句作用于組


  • 分組查詢和過濾:

having 和 where:

WHERE 在分組和聚合計算之前進(jìn)行選取(它控制哪些行進(jìn)入聚合計算),

因此,WHERE 子句不能包含聚合函數(shù)。


HAVING 在分組和聚合之后選取分組的行,而且HAVING 子句總是包含聚集函數(shù)。(嚴(yán)格來講,你可以寫不使用聚集的 HAVING 子句, 但同樣的條件用WHERE更有效)


綜上所述:

having要跟在group by(分組)之后,對分組查詢的結(jié)果進(jìn)行過濾(過濾分組),where要出現(xiàn)在group by(分組)之前,執(zhí)行表中所有數(shù)據(jù)來進(jìn)行過濾(過濾行),另外,having可以用聚合函數(shù),并支持所有where子句操作符。


  • where子句操作符:

<,>,=,!=,>=,<=,and,not,or,like

其中 <,>,=,!=,>=,<=屬于比較運(yùn)算符,and,not,or屬于邏輯運(yùn)算符。

--查詢年齡大于十歲小于三十的人名
SELECT 姓名 FROM 表名 WHERE 年齡>10 AND 年齡<30;

  • 空值檢測:IS NULL

--返回id不為空的行,`IS NULL` 為空值判斷
SELECT * FROM 表名 WHERE id IS NOT NULL

  • 子查詢

最后再說一個平時用的比較多的查詢語句,大家可以當(dāng)作練習(xí)。

先建表:

CREATE TABLE stu(            --先建立一個stu的表
stuID INT,                   --添加id為int類型
sname VARCHAR(32),           --名字是varchar類型
score INT,                   --分?jǐn)?shù)是int類型
PRIMARY KEY(stuID)           --把id設(shè)置為主鍵
);


添加幾條數(shù)據(jù):

INSERT INTO stu VALUES (1,‘xiaoming’,60), (2,‘xiaoli’,70);

如何查詢所有比小明成績高的學(xué)生名字,先查詢名字是xiaoming這個人的成績,然后,再根據(jù)stu表的其他人的分?jǐn)?shù)去做對比:

SELECT sname FROM stu WHERE score > (SELECT score FROM stu WHERE sname = 'xiaoming');

查詢成績高于平均成績的學(xué)生姓名和成績:

SELECT sname,score FROM stu WHERE score > (SELECT AVG(score) FROM stu);


好了,以上就是本文的所以內(nèi)容,SQL其實不難,接下來要多練習(xí),熟能生巧。

想了解更多內(nèi)容歡迎上藍(lán)隊云官網(wǎng)查詢也可以直接咨詢專業(yè)客服。


提交成功!非常感謝您的反饋,我們會繼續(xù)努力做到更好!

這條文檔是否有幫助解決問題?

非常抱歉未能幫助到您。為了給您提供更好的服務(wù),我們很需要您進(jìn)一步的反饋信息:

在文檔使用中是否遇到以下問題: