1. 程式人生 > >SQL語句彙總(二)——資料修改、資料查詢

SQL語句彙總(二)——資料修改、資料查詢

SQL語句第二篇,不說廢話直接開始吧。
首先,建立一張t_student表

CREATE TABLE `t_student` (
  `student_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `student_name` varchar(10) NOT NULL,
  `student_age` int(3) unsigned NOT NULL,
  `student_sex` varchar(5) NOT NULL DEFAULT '男',
  PRIMARY KEY (`student_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

新增新資料:

INSERT INTO <表名> (<列名列表>) VALUES (<值列表>)

如:

   INSERT INTO t_student (student_id,student_name,student_age,student_sex) VALUES (1,'大毛',18,'男');

其中列名可以省略,省略之後要求插入的值必須與列一一對應:

INSERT INTO t_student VALUES (2,'王二',20,'男');

多行資料新增:

INSERT INTO t_student VALUES (3,'張三',22,'男'),
                 (4,'李四',17,'女'),
                 (5,'王五',23,'男');

更改資料:

UPDATE 表名 SET 列1=新值1,列2=新值2 WHERE 過濾條件

假如要修改李四的年齡為21歲

UPDATE t_student SET student_age=21 WHERE student_name='李四';

注:修改多個列的值時用逗號隔開。要想設定某一列的值為空,只需讓<列名>=NULL 即可。WHERE表示過濾條件。

刪除資料(行):

DELETE FROM 表名 WHERE 過濾條件

現要刪除20到22歲的學生資訊:

DELETE FROM t_student WHERE student_age BETWEEN 20 AND 22;

WHERE的判斷條件之後會更詳細的介紹。

刪除除了DELETE還有一種方法TRUNCATE,寫法:

TRUNCATE TABLE 表名

二者區別在於:

DELETE會記錄日誌,意味著刪除後的資料還可以恢復,但是效率低。TRUNCATE不會記錄日誌,刪除後的資料不能恢復,但是效率高。需要注意的是,TRUNCATE不能用於有外來鍵約束引用的表。

查詢操作

分類:

–投影操作
  指定查詢結果中能顯示哪些列
–選擇操作
  指定哪些行出現在結果中
–排序操作
  指定查詢的結果以什麼樣的順序顯示

投影操作:

SELECT 列1,列2 FROM 表名

多個列中間用逗號隔開,如果選擇所有列可以用*號簡寫。

還是此表:

現在只想要檢視姓名和年齡列:

SELECT student_name,student_age FROM t_student;

注意這裡不是把其他列刪除了,而是隻顯示我們想看見的部分。

SELECT CONCAT(student_name,'——',student_age) '組合值' FROM t_student;

CONCAT,可以將列與列之間用想要的符號連線起來:

排除重複——DISTINCT

現給原表加入一班級列:

ALTER TABLE `t_student` 
ADD COLUMN `student_class` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '班級' AFTER `student_sex`;

在這裡插入圖片描述

按照之前方法查詢班級列得到:
在這裡插入圖片描述

但是我們只想檢視具體有哪些班級,這裡就需要用到去重,也就是DISTINCT。

SELECT DISTINCT student_class FROM t_student;

在這裡插入圖片描述

返回限定行數的查詢——LIMIT

LIMIT後面引數為1或2個:

LIMIT N 表示從第一行開始返回N行結果,LIMIT i,N 表示從第i+1行開始返回N行結果。

例:

SELECT * FROM t_student LIMIT 3;

在這裡插入圖片描述

SELECT * FROM t_student LIMIT 2,3;

在這裡插入圖片描述

*注:LIMIT很重要,它是之後做資料表格分頁的關鍵。

選擇操作——WHERE:

分為單條件選擇與多條件選擇

單條件選擇標準結構:

SELECT 列1, 列2 FROM 表名 WHERE 列3 = 值 

關係運算符包括:> >= < <= = !=

多條件選擇標準結構:

SELECT 列A, 列B FROM 表 WHERE 條件1 (AND或者OR) 條件2

其中AND表示並且,OR表示或者。

選擇範圍——BETWEEN

如:

SELECT * FROM t_student WHERE student_age BETWEEN 20 AND 23;

在這裡插入圖片描述

BETWEEN後的值為從下限到上限。

定義集合——IN或NOT IN

現在想檢視年齡為17、20、23的學生資訊:

SELECT * FROM t_student WHERE student_age IN (17,20,23);

在這裡插入圖片描述
反之NOT IN就是選擇不包括在集合裡的學生資訊。

模糊查詢——LIKE

首先先說下佔位符與萬用字元:

佔位符 “_”,表示任何單個字元。
萬用字元 “%”,表示包含零或多個字元。

下面就來用模糊查詢逐一選中我們想要的行。

名字只有兩個字的:

SELECT * FROM t_student WHERE student_name LIKE '__';

在這裡插入圖片描述
這裡可能看不清,引號裡實際是兩個佔位符。

所有姓王的:

SELECT * FROM t_student WHERE student_name LIKE '王%';

在這裡插入圖片描述

最後一個字是“王”的:

SELECT * FROM t_student WHERE student_name LIKE '%王';

在這裡插入圖片描述

只要是名字中有“王”字的:

SELECT * FROM t_student WHERE student_name LIKE '%王%';

在這裡插入圖片描述

這下模糊查詢就很明白了吧,當然還有其他組合,大家可以自己嘗試。

處理空值資料:

判斷條件不能用列名=NULL,而是要用IS NULL或IS NOT NULL。

標準寫法:

SELECT * FROM t_student WHERE 性別 IS NULL

排序操作——ORDER BY:

使用ORDER BY時,列名上指定ASC或DESC。ASC表示正序,DESC表示倒序。如果不指定則預設為正序。

按年齡排:

SELECT * FROM t_student ORDER BY student_age ASC;

SELECT * FROM t_student ORDER BY student_age DESC;

最後一定要注意!

基本查詢SQL的執行順序:

1.執行FROM
2.WHERE條件過濾
3.SELECT投影
4.ORDER BY排序