最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL常見語句圖文詳解(附詳細代碼)

 更新時間:2026年02月06日 10:53:48   作者:Tomasのq  
作為數(shù)據(jù)庫操作的核心工具,SQL在數(shù)據(jù)管理和查詢中扮演著至關重要的角色,這篇文章主要介紹了SQL常見語句的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

該篇演示SQL語句用的是MySQL,除此之外SQL server等數(shù)據(jù)庫也是使用sql語言,本篇主要是介紹sql語言,關于運用到mysql中具體使用會在后面更新一篇新的博客

該表格是我們下面基本語句舉例操作的原始表格

一、基礎語句

1.select語句

SELECT 關鍵字用于指定要查詢的列,可以使用*代表所有列;

FROM關鍵字用于指定要查詢的表;WHERE關鍵字用于指定查詢的條件。

SELECT column1, column2, ... FROM table_name WHERE condition;

eg:

查詢students表格中性別為男的所有列

查詢students表格中性別為男的姓名列和年齡列

這里可以用#注釋代碼,查詢的列名要用英文格式的逗號隔開

2.insert語句:用來增加行

table_name是要插入數(shù)據(jù)的表名;

column1、column2等是表中的列名,value1、value2等是要插入的值。

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

eg:

添加行的時候要注意添加數(shù)據(jù)的數(shù)值類型,是字符串還是數(shù)值,該不該帶引號這些問題

如果我們前面寫的列名,后面沒有匹配到,就比如前面我們寫了year但是后面我們數(shù)值上沒寫,這個insert就不能運行成功

但如果我們前面也不寫year這個列名,改行就能添加成功,沒寫數(shù)值的那個地方會自動填充null

這個意思就是寫insert語句的時候前面列名個數(shù)要和后面值個數(shù)是一一對應的

3.updata語句

table_name是要更新數(shù)據(jù)的表名,column1、column2等是要修改的列名,value1、value2等是要修改的值,WHERE子句是用于指定要更新的行的條件。

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE some_column = some_value;

set后是需要修改的內(nèi)容,where后面加條件確定是哪一行需要做出更新,這里我們就是把表中‘小薛’的年齡從20改成了21(ctrl+/鍵也能達到注釋的效果)

4.delete語句

table_name是要刪除數(shù)據(jù)的表名,WHERE子句是用于指定要刪除的行的條件。

注意:如果不指定條件相當于刪除表中所有數(shù)據(jù)

DELETE 
FROM table_name
WHERE some_column = some_value;

from后加表名,where后加條件確定是該表哪一行要刪除,不加where整個表都會被刪除

二、基本查詢

1.where子句

WHERE子句是結構化查詢語言(SQL)中用于篩選數(shù)據(jù)的關鍵字。通過WHERE子句,您可以指定一個或多個條件來限制從數(shù)據(jù)庫中檢索的數(shù)據(jù)行。

在上述中例子中我們就使用了where子句

SELECT * FROM table_name
WHERE some_column = some_value;

WHERE子句可以使用以下比較運算符:

=(等于)<(小于) >(大于)<=(小于或等于)>=(大于或等于)<>或!=(不等于)

還可以使用邏輯運算符(AND、OR和NOT)來組合多個條件

eg:
SELECT * FROM students WHERE sex = ‘男' and age > 23;

1)模糊搜索

在where子句中加上like或折rlike,like后加條件,但不是具體的條件,意為尋找這一類的信息

-- 多字符匹配
SELECT * FROM students WHERE clazz like 'xx%'
-- 單字符匹配
SELECT * FROM students WHERE stu_name LIKE '張_';

-- 多關鍵詞匹配:找姓名含“張”或“李”或“王”的學生
SELECT * FROM students WHERE name RLIKE '張|李|王'
-- 范圍匹配:找姓名含“張”且后面跟1-2個字符的學生(如“張三”“張三豐”)
SELECT * FROM students WHERE name RLIKE '張.{1,2}';

多字符匹配用%,通配符,意思為匹配任意多個字符,包括0個,

rlike,尋找名字里帶薛和錢的信息,|這里表示或

單字符匹配用_,只能匹配一個字符

{1,2}左右都是閉區(qū)間

2)in

返回選項中的內(nèi)容

這個也是多種情況,可以范圍滿足括號里要求的信息

select * from students where clazz in ('xx','xx','xx');

3)BETWEEN AND

返回年齡在22到24的學生,是區(qū)間

select * from students where age BETWEEN 22 AND 24;

2.order by子句

ORDER BY子句用于對查詢結果按照一個或多個列進行排序。它接受一個或多個列名或表達式作為參數(shù),并可指定每個列的排序方式(ASC:升序,DESC:降序)。

ASC,DESC跟在列名后,輸出的列就會按照順序列出

SELECT 列1,列2……
FROM table_name
ORDER BY 列名 ASC, 列名 ASC ...

SELECT 列1,列2……
FROM table_name
ORDER BY 列名  DESC, 列 DESC ...

這里我們需要注意的是,如果要求對兩列及以上進行排序,那輸出結果是優(yōu)先以第一個列先滿足排序要求,,就像這里的age我們設置的是降序,但是19在20上面是因為,stu_id是按照降序排列,20250103在20250104前面

換一種寫法,此時我們把age排序?qū)懬懊?/p>

就可以看出輸出結果是和之前不一樣的,先把年齡按照降序排列,當年齡一樣為20的時候也才會對stu_id的升序排列

3.group by子句

GROUP BY子句用于將查詢結果按照一個或多個列進行分組,并對每個組進行聚合計算(如COUNT計數(shù)、SUM求和、AVG求平均值,MAX求最大,MIN求最?。?。

SELECT column1, column2, ..., avg(column_name)
FROM table_name
GROUP BY column1, column2, ...

這里是按照major分組產(chǎn)生一個表格,并計算平均年齡

注意這個語句使用時要注意,select后面跟什么列group by后就要跟什么列,除了聚合列

嵌套where

嵌套where就是在原來選擇信息基礎上加上條件改變選擇那些信息,as是給這個新產(chǎn)生的表取一個名字

FROM 表名
GROUP BY column1, column2, ...) as t1
where 條件

4.having子句

HAVING子句用于對分組后的結果進行過濾,只返回符合條件的分組。它接受一個或多個聚合函數(shù)作為參數(shù),并可指定每個函數(shù)的過濾條件

SELECT column1, column2, ..., aggregate_function(column_name)
FROM table_name
GROUP BY column1, column2, ...
HAVING 條件;

加上having過濾一下信息,只輸出品平均年齡>=20

5.limit子句

LIMIT用于限制查詢結果集的行數(shù),其中,number是你想要返回的行數(shù)。

SELECT column1, column2, ...
FROM table_name
LIMIT 數(shù)字;

多行查詢

-- 多行查詢 從number1起 limit number2個
SELECT column1, column2, ...
FROM table_name
LIMIT number1,number2;

從第2個之后開始輸出下面4個

6.offsite子句

OFFSET用于指定查詢結果集的偏移量。

其中,number是你想要返回的行數(shù),offset_num是從查詢結果集的起始位置偏移的行數(shù)。

SELECT column1, column2, ...
FROM table_name
LIMIT 數(shù)字 OFFSET 數(shù)字;

offset 5,表示跳過前五行開始輸出,限制4個

三、數(shù)據(jù)連接

內(nèi)連接和外連接都是把多張表的數(shù)據(jù)拼在一起,他們的區(qū)別就在于如何處理匹配補上的行

1.內(nèi)連接(只返回表間都匹配的行):join或者inner join

SELECT 列名,列名
FROM (
表1
JOIN
表2
JOIN
表3
ON 連接點
);

select后面的列若是在兩以上都存在要寫清是哪個表格里面的列,join把獨立的表連接起來,on是表連接點

2.外連接

外連接又分為左外連接和右外連接以及全連接

left join(左表全保留,右表不匹配的補上null):

students在左邊,以students為準,所有同學都會輸出

right join(右表全保留,左表不匹配的補上null):

在scores表中添加一個信息,這個stu_id沒有對應的學生信息

這樣輸出即時students中沒有這個stu_id的學生也會輸出,但是會出現(xiàn)下面兩種情況,這是因為,我們select的表用一個stu_id列我們選擇輸出哪個表的stu_id有關,students表中可沒有20250501這個學號所以輸出當然是null,這一點容易混淆

full join(兩表的數(shù)據(jù)全顯示),但是我們的mysql是不支持full join的用法的,所以我們用union代替。union是有些復雜的相比于full join。

3.union 操作

先拼接再刪去重復行

例子幫助理解

-- 合并“成績≥90”和“成績≤60”的學生信息(UNION 自動去重)
SELECT s.stu_id, s.stu_name, sc.score, su.subject_name
FROM students s
JOIN scores sc ON s.stu_id = sc.stu_id
JOIN subjects su ON sc.subject_id = su.subject_id
WHERE sc.score >= 90
UNION
SELECT s.stu_id, s.stu_name, sc.score, su.subject_name
FROM students s
JOIN scores sc ON s.stu_id = sc.stu_id
JOIN subjects su ON sc.subject_id = su.subject_id
WHERE sc.score <= 60
ORDER BY score DESC;

union all操作

直接拼接結果,不做任何刪去重復行或者排序的操作

-- 添加一個student 張三 19 
SELECT name FROM students WHERE age = 20
UNION ALL
SELECT name FROM students WHERE age = 19;

 上述是一些比較基礎的sql語言,下面系統(tǒng)的介紹sql語言

四、sql分類

1.數(shù)據(jù)查詢語言(DQL,Data Query Language)

就是sql基礎語言,用來查詢信息,但不做改動,核心關鍵字有select,from,where,group by,having,order by,limit,jion等,具體使用方法見上文

2.數(shù)據(jù)操作語言(DML, Data Manipulation Language)

用來增/刪/改數(shù)據(jù)庫中的數(shù)據(jù)信息,但不改變表結構

核心關鍵詞有insert(新增),update(修改),delete(刪除),merge(合并,部分數(shù)據(jù)庫支持)參考上文,不過MySQL不支持merge語句這里不做敘述

DML語言使用后有可用commit(提交)確認修改或者rollback進行回滾(撤銷修改),關于提交其實這個操作,因為MySQL等常見數(shù)據(jù)庫是默認打開自動提交模式,所以這些語句執(zhí)行后是會自動提交的,這時候commit不用寫

3.數(shù)據(jù)定義語言(DDL, Data Definition Language)

定義/修改/刪除數(shù)據(jù)庫對象(表,索引,視圖,觸發(fā)器,數(shù)據(jù)庫等)的結構,在MySQL(8.0之前)中操作會直接生效(無需事物提交)

首先解釋一下無需事務提交的意思,MySQL中(8.0之前)DDL語句執(zhí)行后立即生效不能回滾

DML語句(insert,update……)語句可回滾,也就是我們執(zhí)行了DML語句后可以通過ROLLBACK進行對上面語句操作的撤回,DDL就無法撤回

但不是所有DDL的操作都不能回滾,大部分情況下是這樣的,但是有些數(shù)據(jù)庫中DDL語句是可以回滾的,例如SQL Server數(shù)據(jù)庫就是可以的,而我們的MySQL在8.0版本之后部分DDL可回滾

核心關鍵字:create(創(chuàng)建),alter(修改),drop(刪除),truncate(清空表),rename(重命名)。

-- 創(chuàng)建用戶表
CREATE TABLE users (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  age INT,
  phone VARCHAR(20) UNIQUE
);

-- 給用戶表新增email字段
ALTER TABLE users ADD COLUMN email VARCHAR(100);

-- 刪除用戶表
DROP TABLE users;

-- 清空用戶表(刪除所有數(shù)據(jù)且不可回滾)
-- TRUNCATE TABLE users;

刪之前:

刪除:

刷新后:

無users表

4.數(shù)據(jù)控制語言(DCL, Data Control Language)

管理數(shù)據(jù)庫的權限和事物,控制用戶對數(shù)據(jù)庫的訪問權限,事物提交/回滾等

核心關鍵詞有grant(授權),revoke(撤銷權限),commit(提交事務),rollback(回滾事務),savepoint(保存點),set transaction(設置事物屬性)

--創(chuàng)建用戶
CREATE USER '用戶名'@'主機名' IDENTIFIED BY '密碼'

-- 授予用戶對users表的查詢/插入權限
GRANT SELECT, INSERT ON users TO '用戶'@'主機名';

-- 撤銷用戶的插入權限
REVOKE INSERT ON users FROM '用戶'@'主機名';

-- 提交事務(確認DML操作)
COMMIT;

-- 回滾事務(撤銷未提交的DML操作)
ROLLBACK;

5.事物控制語言(TCL, Transaction Control Language )

部分sql分類中TCL會從DCL中獨立出來。專門聚焦事物管理(本質(zhì)是DCL的子集)

核心關鍵字有commit,rollback,savepoint

-- 開啟事務(部分數(shù)據(jù)庫需顯式聲明)
START TRANSACTION;
UPDATE users SET age = 26 WHERE id = 1;
-- 設置保存點
SAVEPOINT sp1;
DELETE FROM users WHERE id = 2;
-- 回滾到保存點(僅撤銷刪除操作,修改操作保留)
ROLLBACK TO sp1;
-- 提交最終修改
COMMIT;

總結 

到此這篇關于SQL常見語句的文章就介紹到這了,更多相關SQL常見語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Mysql如何通過ibd文件恢復數(shù)據(jù)

    Mysql如何通過ibd文件恢復數(shù)據(jù)

    這篇文章主要介紹了Mysql如何通過ibd文件恢復數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • mysql中的join和where優(yōu)先級順序解讀

    mysql中的join和where優(yōu)先級順序解讀

    這篇文章主要介紹了mysql中的join和where優(yōu)先級順序解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • MySQL中BETWEEN子句的用法詳解

    MySQL中BETWEEN子句的用法詳解

    這篇文章主要介紹了MySQL中BETWEEN子句的用法詳解,是MySQL入門學習中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • MySQL如何修改字段的默認值和空值

    MySQL如何修改字段的默認值和空值

    這篇文章主要介紹了MySQL如何修改字段的默認值和空值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • mysql8數(shù)據(jù)庫本地能連上但是遠程連不上

    mysql8數(shù)據(jù)庫本地能連上但是遠程連不上

    文章主要介紹解決數(shù)據(jù)庫遠程訪問權限問題的兩種方法:修改my.ini配置文件允許遠程連接,及檢查防火墻設置,發(fā)現(xiàn)公用網(wǎng)絡防火墻開啟后需關閉或切換為專用網(wǎng)絡以實現(xiàn)遠程訪問
    2025-09-09
  • Mysql數(shù)據(jù)庫手動及定時備份步驟

    Mysql數(shù)據(jù)庫手動及定時備份步驟

    最近剛好用到了數(shù)據(jù)庫備份,想著還有個別實習或者剛工作的小伙伴一個drop不小心刪表、刪庫,心內(nèi)慌得一批不知道該怎么辦,就打算跑路了,學會這個小技巧就不用跑路了
    2021-11-11
  • mysql修改自增主鍵數(shù)值無效的問題及解決

    mysql修改自增主鍵數(shù)值無效的問題及解決

    這篇文章主要介紹了mysql修改自增主鍵數(shù)值無效的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • MYSQL必知必會讀書筆記第三章之顯示數(shù)據(jù)庫

    MYSQL必知必會讀書筆記第三章之顯示數(shù)據(jù)庫

    MySQL是一種開放源代碼的關系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),MySQL數(shù)據(jù)庫系統(tǒng)使用最常用的數(shù)據(jù)庫管理語言--結構化查詢語言(SQL)進行數(shù)據(jù)庫管理。接下來通過本文給大家介紹MYSQL必知必會讀書筆記第三章之顯示數(shù)據(jù)庫,感興趣的朋友參考下吧
    2016-05-05
  • mysql 獲取當天發(fā)布的信息的語句

    mysql 獲取當天發(fā)布的信息的語句

    mysql 獲取當天發(fā)布的信息的實現(xiàn)語句,需要的朋友可以參考下。
    2010-03-03
  • Mysql數(shù)據(jù)庫時間查詢舉例詳解

    Mysql數(shù)據(jù)庫時間查詢舉例詳解

    在項目開發(fā)中,一些業(yè)務表字段經(jīng)常使用日期和時間類型,而且后續(xù)還會牽涉到這類字段的查詢,下面這篇文章主要給大家介紹了關于Mysql數(shù)據(jù)庫時間查詢的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-05-05

最新評論

鹤壁市| 久治县| 额敏县| 洪雅县| 安化县| 云南省| 南宫市| 赣榆县| 宁乡县| 乐至县| 平利县| 武隆县| 东平县| 临夏市| 五原县| 永泰县| 吉林市| 鄂伦春自治旗| 清徐县| 河源市| 麻江县| 万州区| 镇平县| 永和县| 炉霍县| 象山县| 拜城县| 搜索| 竹山县| 新沂市| 米泉市| 三明市| 阿瓦提县| 金乡县| 凤台县| 日喀则市| 鄂伦春自治旗| 西宁市| 五华县| 罗甸县| 台东县|