SQL-小白最佳入門sql查詢一
一 說明
如果是初學者,建議去網上尋找安裝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
八 關於作者
相關文章
- Oracle常用抓取SQL-標量子查詢等OracleSQL
- sql查詢入門練習題SQL
- SQL入門之4 group by 與子查詢SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-帶有子查詢的查詢結果集處理SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-查詢結果集處理SQL
- DbForge Studio for SQL Server入門教程:在查詢生成器中建立查詢SQLServer
- Microsoft SQL Server查詢最佳化方法ROSSQLServer
- MySQL入門系列:查詢簡介(五)之子查詢MySql
- Elasticsearch Query DSL查詢入門Elasticsearch
- openGauss SQL引擎(下)——查詢最佳化SQL
- SQL 唯一查詢SQL
- Electron小白入門自學筆記(一)筆記
- dbForge Studio for SQL Server入門教程:如何建立和編輯查詢SQLServer
- SqlSugar ORM 入門篇2 【查詢】 讓我們實現零SQLSqlSugarORM
- MySQL入門系列:查詢簡介(七)之組合查詢MySql
- oracle sql分頁查詢(一)OracleSQL
- SQL總結(一)基本查詢SQL
- SQL隱碼攻擊靶場實戰-小白入門SQL
- 查詢使用者登入資訊sqlSQL
- UData查詢引擎最佳化-如何讓一條SQL效能提升數倍SQL
- SQL查詢的:子查詢和多表查詢SQL
- 機器學習之小白入門機器學習
- 前端小白的入門前端
- 入門MySQL——查詢語法練習MySql
- MySQL入門系列:查詢簡介(二)MySql
- [MySQL光速入門]005 查詢資料MySql
- MongoDB入門系列(三):查詢(SELECT)MongoDB
- MySQL入門--查詢資料庫資訊MySql資料庫
- 如何最佳化查詢記錄數的SQL操作?SQL
- 【SQL查詢】集合查詢之INTERSECTSQL
- JVM(一)史上最佳入門指南JVM
- 使用預載入最佳化 Laravel Model 查詢Laravel
- SQL查詢的轉義方法(一)SQL
- 【SQL】查詢資料的方式 (一)SQL
- 一條SQL語句查詢塊分解及查詢轉換SQL
- Mysql系列一:SQL入門MySql
- 一個小白來分享程式設計入門程式設計
- uni-app小白入門自學筆記(一)APP筆記