SQL-小白最佳入門sql查詢一

知識追尋者發表於2020-01-11

一 說明

如果是初學者,建議去網上尋找安裝Mysql的文章安裝,以及使用navicat連線資料庫,以後的示例基本是使用mysql資料庫管理系統;

二 準備前提

需要建立一張學生表,列分別是id,名稱,年齡,學生資訊;本示例中文章篇幅原因SQL註釋略;

建表語句:

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

表中的資料:

INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (1, 'youku1', 18, '大一新生');
INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (2, 'youku2', 23, '畢業生');
INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (3, 'jeff', 25, '社會人士');
INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (4, 'smile', 17, '高三學子');

三 基本檢索

3.1 select 關鍵字

sql 都是由許多關鍵字(keyword)組成的語句,關鍵字是資料庫的保留字,使用者不能將其當作建表的表名,欄位等;表中的資料檢索使用select關鍵字作為開頭進行查詢資料庫表的資訊;

3.2 檢索單個欄位

語句示例:

SELECT name FROM student 

查詢結果:

youku1
youku2
jeff
smile

語句分析:

select 是 查詢 的意思 , name 代表表中的欄位 ,from 表示來自哪張表,其後面的student就是表;連起來的意思就是查詢欄位是name的資料來自表student;

3.3 sql語句注意點

多sql語句一起執行使用封號(;)隔開,在拼寫語句時表的關鍵字都建議使用大寫,表的欄位和表名使用小寫;為了容易閱讀建議將sql分成多行(由於文章篇幅原因就不分了);sql語言也是使用英文字母,不要開中文,以免造成符號錯誤不容易發現;sql語句預設不區分大小寫;

3.4 檢索多個欄位

語句示例:

SELECT name,age FROM student;

語句結果:

youku1	18
youku2	23
jeff	25
smile	17

語句分析:

查詢欄位 名字,年齡來自表student;多個列檢索時使用逗號(,)隔開;

3.5 檢索所有欄位

語句示例:

SELECT * FROM student;

語句結果:

1	youku1	18	大一新生
2	youku2	23	畢業生
3	jeff	25	社會人士
4	smile	17	高三學子

語句分析:

萬用字元 (*)表示返回表中的所有列,如果不是必須建議不要使用萬用字元,會影響資料庫效能;

3.6 distinct

distinct 表示區分,意指檢索出來的行是唯一(去重),其放在列的最前面;如果使用了關鍵字distinct,其作用於後面的所有列(由於本示例資料沒有重複示例,結果就不是很清晰);

SELECT DISTINCT name, age FROM student;

語句結果:

youku1	18
youku2	23
jeff	25
smile	17

3.7 限制條數

access 和 sql server :

SELECT TOP 2 name FROM student

TOP 2 表示限制返回前2行

postgresql 、SQLite和 mysql:

SELECT name FROM student LIMIT 2;

limit 2 表示限制返回前2行;

DB2:

SELECT name FROM student FETCH FIRST 2 ROWS ONLY

FETCH FIRST 2 ROWS ONLY 表示只抓取前2行資料

語句結果:

youku1
youku2

3.8偏移

示例:

SELECT name FROM student LIMIT 1 OFFSET 1;

語句分析

表示查詢列名稱來自學生表 限制條數1,偏移值1;意思就是查詢學生表中的第二行資料;offset表示跳躍或者偏移;

mysql和MariaDB簡化形式:

SELECT name FROM student LIMIT 1,2;

表示查詢欄位名稱來自學生表,限制2條,偏移1條;注意順序;

語句結果:

youku2
jeff

四 排序檢索

4.1 ORDER BY 子句

示例:

SELECT name,age FROM student ORDER BY age

語句分析;

檢索欄位名稱,年齡來自學生表按照列年齡排序;注意預設是升序,ORDER BY 子句通常在語句末尾;

語句結果:

smile	17
youku1	18
youku2	23
jeff	25

4.2 多列排序

示例:

SELECT name,age FROM student ORDER BY age DESC, name ASC;

語句分析:

查詢名稱,年齡來自學生表,按照年齡降序,名稱升序進行排序;關鍵字 DESC(descending) 意指降序,字母預設Z-A; ASC(ascending)意指升序,字母預設A-Z;多列情況下,每個列後面指定使用DESC,使用逗號(,)隔開,如果不寫,預設升序;

語句結果:

jeff	25
youku2	23
youku1	18
smile	17

4.3 按位排序

語句示例:

SELECT name,age FROM student ORDER BY 2 DESC, 1 ASC;

按位指查詢欄位的位置,2 對應欄位age,1對應欄位name;結果和4.2一致;

五 過濾檢索

sql 語句中過濾條件(filter condition)的關鍵字是 WHERE,其使用方式是跟在表名之後;

5.1 WHERE語句操作符

根據不同的資料庫管理系統,其支援的操作符略有不同,所以下文較多重複意思的操作符,應查閱官方文件說明,哪些操作符是支援使用的資料庫管理系統;

操作符 說明
= 等於
> 大於
< 小於
!= 不等於
<> 不等於
>= 大於等於
<= 小於等於
!< 不小於
!> 不大於
BETWEEN 在中間
IS NULL 為空

5.2 單條件過濾

示例:

SELECT * FROM student WHERE name = 'jeff';

語句分析;

查詢所有欄位來自學生表 條件是 學生名稱是 jeff;注意 非表欄位,表名,關鍵字,使用2個單引號(’’)括起來,裡面存放的是我們輸入的資料;

語句結果;

3	jeff	25	社會人士

5.3 多條件過濾

多條件過濾時使用 AND 或者 OR 子句;AND連線表示式表示過濾條件都為真的資料;OR連線表示式表示匹配過濾條件任意一個;

AND示例:

SELECT * FROM student WHERE age >= '18' AND age <= '23';

語句分析:

查詢所有欄位來自學生表,條件是 學生年齡大於等於18 並且 學生年齡小於 23;

語句結果:

1	youku1	18	大一新生
2	youku2	23	畢業生

OR示例:

SELECT * FROM student WHERE age >= '18' OR age <= '23';

語句分析:

檢索所有欄位來自學生表,條件是 學生年齡大於等於18,或者學生年齡小於23;

OR 和 AND 示例:

SELECT * FROM student WHERE age >= '18' AND (age <= '23' OR id >=2);

語句分析:

在使用OR 和 AND 的時候應該明確過濾條件,然後使用小括號括起來,由於資料庫管理系統是根據順序執行,如果不使用小括號很容易造成語義錯誤;查詢所有欄位來自學生表 過濾條件 年齡大於 18 並且 (年齡小於23 或者 id 大於2)的資料;

5.4 範圍查詢

示例:

SELECT * FROM student WHERE  age BETWEEN '18' And '23';

語句分析

BETWEEN 表示範圍查詢,查詢所有欄位來自學生表,過濾條件學生年齡在18至23之間;

語句結果:

1	youku1	18	大一新生
2	youku2	23	畢業生

5.5 空值查詢

示例:

SELECT * FROM student WHERE  age IS NULL;

語句分析:

查詢所有欄位來自學生表,過濾條件 學生年齡 為空;資料庫表不填充資料預設為空(NULL),當然你也可以給指定型別的列設定預設值;

5.6 IN 操作

示例:

SELECT * FROM student WHERE  age IN (18,23,25);

語句分析:

查詢所有欄位來自學生表 ,過濾條件 年齡 是 18 或者 23 或者 25 ;IN是個範圍查詢,匹配小括號中指定的任意值,其功能跟OR類似,一個IN 就相當於好多個OR;

語句結果:

1	youku1	18	大一新生
2	youku2	23	畢業生
3	jeff	25	社會人士

5.7 NOT 操作符

示例:

SELECT * FROM student WHERE  NOT age='25';

語句分析:

NOT 操作符表是否定;其跟在WHERE後面功能類似<>;

六 萬用字元檢索

6.1 萬用字元的介紹

萬用字元是組成匹配模式的特殊字串;如果有用過正規表示式的同學肯定不陌生,這個與其類似;檢索文字的萬用字元是用在關鍵詞Like 後面;

6.2 萬用字元 %

示例:

SELECT * FROM student WHERE name LIKE 'you%' ;

語句分析:

查詢所有欄位來自學生表,過濾條件 名字匹配以you開頭的字串後面匹配任意個任意字元;%萬用字元代表任意個任意字串,0也算在內,但不包括null;

語句結果:

1	youku1	18	大一新生
2	youku2	23	畢業生

示例:

SELECT * FROM student WHERE name LIKE '%i%' ;

語句分析:

查詢所有列來自學生表,過濾條件學生的名稱匹配中間必須出現一次字母i,字母i的前後可以匹配任意個任意字串;

語句結果;

4	smile	17	高三學子

6.3 萬用字元 _

萬用字元 _ 代表匹配一個字串;在Access資料庫中不是 _ 而是 ?;

示例:

SELECT * FROM student WHERE name LIKE 'youku_' ;

語句分析:

查詢所有列來自學生表,過濾條件 學生名稱 匹配模式 youku 後面一個為任意字串;

語句結果;

1	youku1	18	大一新生
2	youku2	23	畢業生

6.4 萬用字元 []

萬用字元 [] 表示匹配指定一個位置一個字元;其裡面可以存放多個字元,關係是or,模式匹配時只佔用一個位置,Access,SQL SERVER 支援;

七 欄位基本操作

7.1 欄位拼接

示例:

SELECT concat('你好啊',name,'327今天心情怎麼樣') FROM student WHERE id = '1' ;

語句分析:

函式 concat 就是將多個字元子串拼接成一個字串;不同的資料庫管理系統其使用的方式略有差別,應查閱官方文件;
在 mysql 中使用 concat函式;在postgresql中使用 || ; 在 Access和 sql server中使用 +;

語句結果:

你好啊youku1327今天心情怎麼樣

7.2 去除空白字串

語句示例:

SELECT  RTRIM('      哥,今天管飽        ') FROM student WHERE id = '1' ;

語句分析:

RTRIM(STR) 函式是去掉右邊的字串;TRIM(STR)是去掉字串兩邊的空白字元;LTRIM(STR)是去掉字串左邊的空白字元;

語句結果;

      哥,今天管飽

7.3 別名

語句示例:

SELECT name as student_name FROM student WHERE  id = '1' ;

語句分析:

別名(alias)是可以給欄位,或者表起別名;當多表操作出現重複欄位時使用別名是個很好的選擇;別名可以使用AS關鍵字,雖然其是可省略,但平時我們最好加上它增強閱讀性;

7.4 計算

操作符 說明
*
+
-
/

語句示例:

SELECT 2 * 8; 

語句結果:

16

八 關於作者

在這裡插入圖片描述

相關文章