網(wǎng)站上的logo怎么做今日國內(nèi)新聞
【MySQL】基本查詢(1)
目錄
- 【MySQL】基本查詢(1)
- 表的增刪改查
- Create
- 單行數(shù)據(jù) + 全列插入
- 多行數(shù)據(jù) + 指定列插入
- 插入否則更新
- 替換
- Retrieve
- SELECT 列
- 全列查詢
- 指定列查詢
- 查詢字段為表達式
- 為查詢結(jié)果指定別名
- 結(jié)果去重
- WHERE 條件
- 英語不及格的同學及英語成績 ( < 60 )
- 語文成績在 [80, 90] 分的同學及語文成績
- 數(shù)學成績是 58 或者 59 或者 98 或者 99 分的同學及數(shù)學成績
- 姓孫的同學 及 孫某同學
- 語文成績好于英語成績的同學
- 總分在 200 分以下的同學
- 語文成績 > 80 并且不姓孫的同學
- 孫某同學,否則要求總成績 > 200 并且 語文成績 < 數(shù)學成績 并且 英語成績 > 80
- NULL 的查詢
- 結(jié)果排序
- 查詢同學各門成績,依次按 數(shù)學降序,英語升序,語文升序的方式顯示
- 查詢同學及總分,由高到低
- 查詢姓孫的同學或者姓曹的同學數(shù)學成績,結(jié)果按數(shù)學成績由高到低顯示
- 篩選分頁結(jié)果
作者:愛寫代碼的剛子
時間:2024.3.18
前言:本篇博客將會記錄表的基本查詢,主要是select語句的用法。
表的增刪改查
CRUD : Create(創(chuàng)建), Retrieve(讀取),Update(更新),Delete(刪除)
Create
語法:
INSERT [INTO] table_name[(column [, column] ...)]VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...
into是可以被省略的。
案例:
-- 創(chuàng)建一張學生表
CREATE TABLE students (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,sn INT NOT NULL UNIQUE COMMENT '學號',name VARCHAR(20) NOT NULL,qq VARCHAR(20)
);
單行數(shù)據(jù) + 全列插入
-- 插入兩條記錄,value_list 數(shù)量必須和定義表的列的數(shù)量及順序一致
-- 注意,這里在插入的時候,也可以不用指定id(當然,那時候就需要明確插入數(shù)據(jù)到那些列了),那么mysql會使用默認的值進行自增。
INSERT INTO students VALUES (100, 10000, '唐三藏', NULL);
Query OK, 1 row affected (0.02 sec)INSERT INTO students VALUES (101, 10001, '孫悟空', '11111');
Query OK, 1 row affected (0.02 sec)
-- 查看插入結(jié)果
SELECT * FROM students;
多行數(shù)據(jù) + 指定列插入
-- 插入兩條記錄,value_list 數(shù)量必須和指定列數(shù)量及順序一致
INSERT INTO students (id, sn, name) VALUES (102, 20001, '曹孟德'),
(103, 20002, '孫仲謀');
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0-- 查看插入結(jié)果
SELECT * FROM students;
插入否則更新
由于主鍵或者唯一鍵對應的值已經(jīng)存在而導致插入失敗,所以可以選擇性的進行同步更新操作語法:
-- 0 row affected://表中有沖突數(shù)據(jù),但沖突數(shù)據(jù)的值和 update 的值相等
-- 1 row affected:// 表中沒有沖突數(shù)據(jù),數(shù)據(jù)被插入
-- 2 row affected:// 表中有沖突數(shù)據(jù),并且數(shù)據(jù)已經(jīng)被更新
- 查詢受影響的行數(shù):
替換
-- 主鍵 或者 唯一鍵 沒有沖突,則直接插入;
-- 主鍵 或者 唯一鍵 如果沖突,則刪除后再插入REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞞');
Query OK, 2 rows affected (0.00 sec)-- 1 row affected: 表中沒有沖突數(shù)據(jù),數(shù)據(jù)被插入
-- 2 row affected: 表中有沖突數(shù)據(jù),刪除后重新插入
Retrieve
- 先創(chuàng)建一個表用于之后的測試:
SELECT 列
全列查詢
– 通常情況下不建議使用 * 進行全列查詢
– 1. 查詢的列越多,意味著需要傳輸?shù)臄?shù)據(jù)量越大;
– 2. 可能會影響到索引的使用。
指定列查詢
查詢字段為表達式
為查詢結(jié)果指定別名
- 當然也可以不帶as關(guān)鍵字:
結(jié)果去重
- distinct關(guān)系字
WHERE 條件
- 比較運算符:
運算符 | 說明 |
---|---|
>, >=, <, <= | 大于,大于等于,小于,小于等于 |
= | 等于,NULL不安全,例如NULL = NULL的結(jié)果是NULL |
<=> | 等于,NULL安全,例如NULL<=>NULL的結(jié)果是TRUE(1) |
!=,<> | 不等于,NULL不安全 |
BETWEEN a0 AND a1 | 范圍匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) |
IN (option, …) | 如果是option中的任意一個,返回TRUE(1) |
IS NULL | 是NULL |
IS NOT NULL | 不是NULL |
LIKE | 模糊匹配。% 表示任意多個(包括 0 個)任意字符;_ 表示任意一個字符 |
邏輯運算符:
運算符 | 說明 |
---|---|
AND | 多個條件必須都為TRUE(1),結(jié)果才是TRUE(1) |
OR | 任意一個條件為TRUE(1),結(jié)果為TRUE(1) |
NOT | 條件為TRUE(1),結(jié)果為FALSE(0) |
- NULL不能參與等號的比較
英語不及格的同學及英語成績 ( < 60 )
select后面跟的表示顯示哪些列,不帶名稱則會顯示全列。where后面的語句表示進行行篩選。
語文成績在 [80, 90] 分的同學及語文成績
- 也可以使用between…and…語句:
數(shù)學成績是 58 或者 59 或者 98 或者 99 分的同學及數(shù)學成績
- 或者優(yōu)雅的寫法:
姓孫的同學 及 孫某同學
- 模糊查詢:
語文成績好于英語成績的同學
總分在 200 分以下的同學
- 我們嘗試使用別名的方法:
發(fā)現(xiàn)報錯,所以我們要討論一下sql語句的執(zhí)行順序:
同時不能在篩選條件(where)里面做重命名!!!因為重命名都是最后一步
- 所以只能這么做:
語文成績 > 80 并且不姓孫的同學
孫某同學,否則要求總成績 > 200 并且 語文成績 < 數(shù)學成績 并且 英語成績 > 80
NULL 的查詢
- 創(chuàng)建一張表:
- 進行查找:
結(jié)果排序
語法:
– ASC 為升序(從小到大)
– DESC 為降序(從大到小)
– 默認為 ASC
注意:沒有 ORDER BY 子句的查詢,返回的順序是未定義的,永遠不要依賴這個順序
- 升序排序:
- 降序排序:
- null值一般最小(與數(shù)據(jù)庫類型有關(guān))
查詢同學各門成績,依次按 數(shù)學降序,英語升序,語文升序的方式顯示
– 多字段排序,排序優(yōu)先級隨書寫順序
由于默認排升序:
所以我們還可以這樣寫:
查詢同學及總分,由高到低
因為要排序所以先要有合適的數(shù)據(jù),所以這里order by后面可以跟別名
查詢姓孫的同學或者姓曹的同學數(shù)學成績,結(jié)果按數(shù)學成績由高到低顯示
篩選分頁結(jié)果
語法:
– 起始下標為 0
– 從 0 行開始,篩選 n 條結(jié)果SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT n;
– 從 s 行開始,篩選 n 條結(jié)果
SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT s, n;– 從 s 行開始,篩選 n 條結(jié)果,比第二種用法更明確,建議使用
SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT n OFFSET s;
- 第一種:
- 從表頭開始連續(xù)讀取三行:
- 第二種
- 第三種:
建議:對未知表進行查詢時,最好加一條 LIMIT 1,避免因為表中數(shù)據(jù)過大,查詢?nèi)頂?shù)據(jù)導致數(shù)據(jù)庫卡死
按id進行分頁,每頁3條記錄,分別顯示第1、2、3頁
- 實現(xiàn)分頁功能:
- 通過分頁能實現(xiàn)類似的這種成績分組的功能:
只有數(shù)據(jù)準備好了,才要進行顯示,limit的功能本質(zhì)是“顯示”,所以語句執(zhí)行的順序較靠后