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