久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL之SQL語法及SQL解析順序源碼分析

158次閱讀
沒有評論

共計 2280 個字符,預計需要花費 6 分鐘才能閱讀完成。

這篇“MySQL 之 SQL 語法及 SQL 解析順序源碼分析”文章的知識點大部分人都不太理解,所以丸趣 TV 小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“MySQL 之 SQL 語法及 SQL 解析順序源碼分析”文章吧。

SQL(Structured Query Language)是一種標準,作為一種訪問【關系型數據庫的標準語言】。許多數據庫產品,如 Oracle,DB2,SQL Server,PostgreSQL,MySQL 都支持它。近幾年的 NoSQL 最初是宣稱不再需要 SQL,后來也不得不修正為 Not Only SQL,來擁抱 SQL。

目前比較典型的版本是 SQL 92 標準。包括 MySql 在內的其他數據庫,在 SQL 92 或 SQL 99 這些標準基礎之上,還擴展了一些自己的 SQL 語句,如 MySQL 中的 limit 關鍵字。

SQL 語言分類

DDL

數據定義語言,用來定義數據庫對象,數據庫,表,列等。如 create,alter,drop 等

DML

數據操作語言,用來對數據庫中的表的記錄進行更新。如 insert,update,delete 等

DCL

數據控制語言,用來定義數據庫的訪問權限,安全級別等。如 grant 等

DQL:

數據查詢語言,用來查詢。如 select,from,where 等

 SQL 語法順序和解析順序

#  語法順序
SELECT DISTINCT
 select_list 
 left_table   join_type 
JOIN  right_table  ON  join_condition 
WHERE
 where_condition 
GROUP BY
 group_by_list 
HAVING
 having_condition 
ORDER BY
 order_by_condition 
LIMIT  limit_number 
#  解析順序
FROM  left_table 
ON  join_condition 
 join_type  JOIN  right_table  --  這一步和上一步,會循環執行
WHERE  where_condition  --  這一步會循環執行,多個條件從左往右
GROUP BY  group_by_list 
HAVING  having_condition 
SELECT --  分組之后才執行 SELECT
DISTINCT  select_list 
ORDER BY  order_by_condition 
LIMIT  limit_number  --  這一步是 MySQL 獨有的語法,前面都是 SQL92 標準

FROM

對 FROM 的左表和右表計算笛卡爾積,產生虛表 VT1

select * from seller join product;

ON

產生虛表 VT1 后,通過 ON 關鍵字進行篩選,只有符合 join_condition 條件的才會被篩選到虛表 VT2

select * from seller s join product p on s.id = p.id;

OUTER JOIN

LEFT (OUTER) JOIN : 會返回左表(保留表)中全部記錄以及右表中滿足 ON 條件的記錄

RIGHT (OUTER) JOIN : 同理

INNTER JOINT : 只返回左右兩表中滿足 ON 條件的記錄

  若指定了 OUTER JOIN(LEFT JOIN,RIGHT JOIN),那么保留表中未匹配 ON 條件的行,就會作為外部行,添加到虛表 VT2 中,形成虛表 VT3。

select * from seller s right join product p on s.id = p.id;

若 FROM 子句,包含不止 2 個表,則會對上一個 join 連接產生的結果 VT3,和下一個表重復執行上面的步驟

WHERE

根據 where 條件過濾

GROUP BY

對結果進行分組

-- mysql 8  默認開啟了  only_full_group_by
select version(),@@sql_mode;
--  需要把這個選項關掉,set global sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION 
set session sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION 
--  后執行 group by  正常
select * from user group by name;

HAVING

對分組的結果,進行 having 條件過濾

SELECT

選取指定的列

DISTINCT

針對某列去重
注意 DISTINCT 一定要 SELECT 的第一列,加在后面無效

--  下面無效
select id, distinct name from user;
--  下面有效
select distinct name from user;

distinct 后加多列,則是將多列拼接在一起來去重

若想根據某一列去重,并顯示出整行的數據,可以用 GROUP BY

ORDER BY

排序

LIMIT

分頁

注意:對于 select 中的列的別名,只有在 order by 中才能使用,由上面的 SQL 解析順序可知

以上就是關于“MySQL 之 SQL 語法及 SQL 解析順序源碼分析”這篇文章的內容,相信大家都有了一定的了解,希望丸趣 TV 小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-13發表,共計2280字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 沅江市| 云龙县| 安义县| 大悟县| 宝丰县| 修武县| 尚义县| 宁陕县| 巴塘县| 班玛县| 尚志市| 南平市| 将乐县| 临汾市| 上饶县| 遂川县| 广宁县| 竹北市| 渭南市| 桐庐县| 祥云县| 临澧县| 长沙县| 黄骅市| 曲松县| 奇台县| 乌海市| 文昌市| 贵州省| 东台市| 靖江市| 奉节县| 吉水县| 邵东县| 夹江县| 革吉县| 东宁县| 略阳县| 霸州市| 类乌齐县| 巩留县|