一 說明
如果是初學者,建議去網上尋找安裝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
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。