MySQL:DQL 數據查詢語句盤點

本篇內容包括:DQL 的簡介、SELECT 語句、WHERE 條件語句、JOIN 連接查詢(多表查詢)和分組、過濾、排序、分頁、子查詢的使用。

一、DQL 簡介

DQL(Data QueryLanguage)語句,即數據查詢語句

常用的語句關鍵字有:SELECT、FROM、WHERE、ORDER BY、HAVING、ASC|DESC


二、SELECT 語句

1、SELECT 語句

SELECT [ALL | DISTINCT]
{* | table.* | [table.field1[as alias1] [,table.field[as alias2]][,...]]}
FROM table_name [as table_alias]
[left | right | inner join table_name2]  #聯合查詢
[WHERE ...]     	# 指定結果需滿足的條件
[GROUP BY ...]    # 指定結果按照哪幾個字段來分組
[HAVNG ...]    		# 過濾分組的記錄必須滿足的次要條件
[ORDER BY ...]    # 指定查詢記錄按一個或多個條件排序
[LIMIT { [offset,]row_count  |  row_count OFFSET offset}];  #指定查詢的記錄從哪條至哪條

PS:

  • []括號代表可選的;
  • {}括號代表必須的;
  • #為MySQL語句中的注釋符,也可以用 /**/

指定查詢字段:

  • 查詢表中所有的數據列結果,采用"*"符號 :SELECT * FROM 表名;

  • 可指定查詢的結果數據列:SELECT 字段1,字段2,.... FROM 表名;

  • 如需要區分連接查詢時兩個表有同名的字段:SELECT 表1.字段1,表2.字段2,字段3,.... FROM 表1,表2;

2、AS 子句

SELECT StudentNo AS "學號" FROM student;	 			 # 可給數據列取一個新別名
SELECT a.StudentNo FROM student AS a;					 	# 可給表取一個新別名
SELECT Phone+1 AS Tel FROM student;							# 可把經計算或總結的結果用另外一個新名稱來代替

3、DISTINCT 子句

SELECT DISTINCT 字段名1,字段名2...  FROM 表名			#掉SELECT查詢返回的記錄結果中重復的記錄(所有返回列的值都相同),只返回一條

PS:ALL 關鍵字是默認的(不加DISTINCT默認ALL),返回所有的記錄,與DISTINCT相反。

4、使用表達式的列

表達式一般由文本值、列值、NULL、函數和操作符等組成

應用場景:

  1. SELECT語句返回結果列中使用
  2. SELECT語句的ORDER BY 、HAVING等子句中使用
  3. DML語句中的WHERE條件語句中使用表達式

PS:需要避免SQL返回結果中包含".“,”*"和括號等干擾開發語言程序


三、WHERE 條件語句

1、WHERE 條件語句

用于檢索數據表中符合條件的記錄,搜索條件可由一個或多個邏輯表達式組成,結果一般為真或假。

搜索條件的組成:

  1. 邏輯操作符
  2. 比較操作符

2、邏輯操作符

操作符名稱語法描述
AND&&a AND ba && b邏輯與,同時為真,結果才為真
OR 或``
NOT!NOT a!a邏輯非,若操作數為假,結果則為真

3、比較操作符

操作符名稱語法描述
IS NULLa IS NULL若操作數為NULL,則結果為真
IS NOT NULLa IS NOT NULL若操作數不為NULL,則結果為真
BETWEENa BETWEEN b and c若a范圍在b與c之間,則結果為真
LIKEa LIKE bSQL模式匹配,若a匹配b,則結果為真
INa IN (a1,a2,a3,…)若a等于a1,a2,a3,…中的某一個,則結果為真

PS:1. 數值數據類型的記錄之間才能進行算數運算;2. 相同數據類型的數據之間才能進行比較。

4、BETWEEN AND 范圍查詢子句

SELECT 字段1,字段2,.... FROM 表名 WHERE 字段X BETWEEN 值1 AND 值2				# 根據一個范圍值來檢索,等同于>=和<=聯合使用

5、LIKE 模糊查詢子句

在 WHERE 子句中,使用 LIKE 關鍵字進行模糊查詢

  • %一起使用,表示匹配 0 或任意多個字符
  • _一起使用,表示匹配單個字符
  • 如果需要顯示%或者_,可以使用轉義字符\,也可以用ESCAPE關鍵字自定義轉義符,如:

6、IN范圍查詢

在 WHERE 子句中使用 IN 關鍵字進行范圍查詢

SELECT 字段列1,字段2,...FROM 表名 WHERE 字段X IN (值1,值2,值3...)

查詢的字段X的值,至少與括號中的一個值相同,多個值之間用英文逗號隔開

7、NULL空值條件查詢

  • NULL代表"無值"
  • 區別于零值0和空字符串""
  • 只能出現在定義允許為NULL的字段
  • 須使用IS NULL 或 IS NOT NULL比較操作符去比較

四、JOIN 連接查詢(多表查詢)

1、JOIN 連接查詢

如需要多張數據表進行查詢,則可通過連接運算符實現多個查詢

分類包括內連接和外連接

2、內連接(inner join)

在表中至少一個匹配時,則返回記錄

SELECT 字段1,字段2,... FROM table_1
INNER JOIN table_2 
ON table_1.字段X = table_2.字段Y;

3、等值連接

SELECT 字段1,字段2,.... FROM table_1,table_2 
WHERE table_1.字段X =table_2.字段Y;
  • 與單表查詢類似,都是SELECT語句
  • 把多個表放在FROM后,并用逗號隔開
  • 可使用AS關鍵字取別名,便于引用
  • 如無重名查詢字段則可省略數據表的指定

4、非等值連接

SELECT 字段1,字段2,.... FROM table_1,table_2 ;
  • 返回記錄數為兩表記錄數的乘積

5、自連接

SELECT 字段1,字段2,.... FROM 表1 別名1,表1 別名2;
  • 數據表與自身進行連接

6、外連接(out join)——左連接

從左表(table_1)中返回所有的記錄,即便在右表(table_2)中沒有匹配的行

SELECT 字段1,字段2,... FROM table_1
LEFT JOIN table_2 
ON table_1.字段X =table_2.字段Y;

7、外連接(out join)——右連接

從右表(table_2)中返回所有的記錄,即便在左表(table_1)中沒有匹配的行

SELECT 字段1,字段2,... FROM table_1
RIGHT JOIN table_2 
ON table_1.字段X =table_2.字段Y;

8、不同的SQL JOIN對比

操作符名稱描述
INNER JOIN (JOIN)如果表中至少有一個匹配,則返回行
LEFT JOIN無論右表是否有匹配,都會返回左表的所有行
RIGHT JOIN無論左表是否有匹配,都會返回右表的所有行

9、full join

mysql 不支持 full join,使用 left joinright join。可以相當與左右鏈接的結果

select * from t1 left join t2 on t1.id = t2.id
union
select * from t1 right join t2 on t1.id = t2.id

五、分組、過濾、排序、分頁

1、GROUP BY 語句

  • 對所有數據進行分組統計。分組的依據字段可以有多個,并依次分組
  • 與HAVING結合使用,進行分組后的數據篩選
  • GROUP BY的語句順序在WHERE后面,ORDER BY 的前面
  • 通常在對數據使用計算統計的時候,會用到GROUP BY分組

2、HAVING 語句

過濾分組的記錄必須滿足的次要條件。SELECT語句中,在GROUP BY分組之后再進行條件篩選,就不能使用WHERE,而是在GROUP BY后面通過HAVING進行分組后的條件篩選。HAVING的作用等同于WHERE。

3、ORDER BY 語句

ORDER BY 列名1 ASC/DESC[,列名2 ASC/DESC,...]
  • SELECT 語句查詢得到的結果,按某些字段進行排序
  • DESCASC搭配使用,默認為 ASC
  • ASC 為升序排列,DESC 為降序排列

4、LIMIT

分頁顯示,對用戶體驗、網絡傳輸、查詢壓力上都有好處

LIMIT[m,]n 或 LIMIT n OFFSET m
  • 限制 SELECT 返回結果的行數
  • m 指定第一個返回記錄行的偏移量(顯示的起始位置)
  • n 指定返回記錄行的最大數目(顯示行數)
  • m 不指定則偏移量為 0,從第一條開始返回前 n 條記錄
  • 在MySQL中,顯示每頁的行數可以使用 LIMIT (頁碼-1)*行數,行數

六、子查詢

在查詢語句中的WHERE條件子句中,又嵌套了另外一個查詢語句

  • 嵌套查詢可由多個子查詢組成,求解的方式是由里及外
  • 子查詢返回的結果一般都是集合,故而建議使用IN關鍵字

例如:

SELECTstudentno "學號",studentname "姓名"
FROMstudent
WHEREstudentno IN (SELECTstudentnoFROMresultWHEREsubjectno =(SELECTsubjectnoFROM`subject`WHEREsubjectname = '高等數學-2')AND studentresult >= 80)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535523.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535523.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535523.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL:DML 數據操作語句盤點

本篇內容包括&#xff1a;DML 的簡介、INSERT 命令、UPDATE 命令、DELETE 命令以及 TRUNCATE 命令的使用。 一、DML 簡介 DML&#xff08;Data Manipulation Language&#xff09;語句&#xff0c;即數據操作語句&#xff0c;用于操作數據庫對象中所包含的數據。 常用關鍵字包…

MySQL:DDL 數據定義語句盤點

本篇內容包括&#xff1a;DDL 的簡介、SHOW 查看語句、CREATE 創建語句、ALTER 修改語句以及 DROP 刪除語句的使用。 一、DDL 簡介 DDL&#xff08;Data Definition Language&#xff09;&#xff0c;即數據定義語句&#xff0c;功能就是定義數據庫DATabase、表table、索引ind…

MySQL:DCL 數據控制語句盤點

本篇內容包括:DCL 簡介、GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT、LOCK命令的使用。 一、DCL 簡介 DCL&#xff08;Data Control Language&#xff09;語句&#xff0c;即數據控制語句&#xff0c;用于設置或更改數據庫用戶或角色權限的語句 常用關鍵字包括&#xff1a;…

oracle遷移父子數據

現有需求如下&#xff0c;業務組織單元表中id字段數據在另外一個系統全部重復&#xff0c;但需要將此業務單元組織導入另一系統 業務組織單元表Isc_Specialorg_Unit 表中存在ID字段為子節點數據&#xff0c;parent_id為父節點數據&#xff0c;orgpath為組織路徑 現在做如下操…

批量更新數據庫數據

"update isc22.isc_user t set t.saphrid "&E1&"where t.id "&B1&";"

oracle控制文件

控制文件是數據庫里面非常重要的一類文件,它記錄了當前實例連接的數據庫的結構和行為&#xff0c;并維護數據庫的一致性。 初始化參數文件中描述其位置&#xff0c;很小的:二進制文件,一般不要超過100mmount讀open一直在用 控制文件只能連接一個database丟失要恢復 …

oracle表空間

概念 表空間和數據文件 ●表空間是邏輯存儲概念&#xff0c;一個表空間是一個或多個數據文件的邏輯集合 ●存儲對象(表、索引)邏輯的存儲在表空間上&#xff0c;而存儲對象的數據物理的存放在數據文件上 ●數據庫至少需要一個叫做system的表空間&#xff0c;也就是系統表空間 ●…

oracle日志

日志分類 redo log files聯機日志或重做日志 archived log files歸檔日志 1184198alert log files 告警日志 trace files user_ _dump_ _dest 用戶信息日志如跟蹤會話日志 background dump_ dest進程日志還有其他一-些不常用的日志 v$database的log_mode 數據庫歸檔模式…

MySQL:分庫分表知識點盤點

本篇內容包括&#xff1a;數據庫瓶頸、分庫分表以及分庫分表相關問題 一、數據庫瓶頸 不管是IO瓶頸&#xff0c;還是CPU瓶頸&#xff0c;最終都會導致數據庫的活躍連接數增加&#xff0c;進而逼近甚至達到數據庫可承載活躍連接數的閾值。在業務Service來看就是&#xff0c;可用…

oracle的sga

sga SGA的管理 ■有三種方式&#xff1a; ●8i:SGA的總大小由所有內存組件大小之和決定&#xff0c;不能直接定義SCA大小。對內部組件大小的修改必須在數據庫重起 后 才能生為&#xff0c;所以叫做SGA的靜態管理。 ●9i&#xff…

MySQL:日志知識點盤點

本篇內容包括&#xff1a;binlog&#xff08;二進制日志&#xff09;、redo log 以及 undo log 一、binlog&#xff08;二進制日志&#xff09; binlog 用于記錄數據庫執行的寫入性操作(不包括查詢)信息&#xff0c;以二進制的形式保存在磁盤中。binlog是mysql的邏輯日志&…

ROWNUM的使用

一個偽列看起來像是一個表中的列&#xff0c;但實際上并不保存在表中。你可以查詢&#xff0c; 但是不能插入&#xff0c;修改和刪除其中的值。一個偽列也類似于一個沒有參數的函 數。但是在典型情況下&#xff0c;在結果集中可以為每一行返回相同的值&#xff0c;而偽列通 常為…

MySQL:主從相關知識點盤點

本篇內容包括&#xff1a;MySQL 主從復制簡介、主從復制的原理以及主從搭建 一、MySQL 主從復制簡介 在實際的生產中&#xff0c;為了解決Mysql的單點故障已經提高MySQL的整體服務性能&#xff0c;一般都會采用**「主從復制」**。 比如&#xff1a;在復雜的業務系統中&#x…

oracle導出expdp

expdp/impdp 是 oracle 10g 版本后推出的服務器端工具--數據泵&#xff0c;作用是為了將數據庫中的邏輯對象&#xff0c;比如表、用戶、全庫、表空間進 行導入&#xff0c;導出 命令解析 ATTACH ATTACH [[schema_name.]job_name] schema_name 表示用戶名,job_name 表示導出的作…

oracle導入impdp

expdp/impdp 是 oracle 10g 版本后推出的服務器端工具--數據泵&#xff0c;作用是為了將數據庫中的邏輯對象&#xff0c;比如表、用戶、全庫、表空間進 行導入&#xff0c;導出REMAP_DATAFILE 該選項用于將源數據文件名轉變為目標數據文件名, 在不同平臺之間搬移表空間時可能需…

oracle高水位線

ORACLE在邏輯存儲上分4個粒度: 表空間, 段, 區 和 塊. 1.1 塊: 是粒度最小的存儲單位,現在標準的塊大小是8K,ORACLE每一次I/O操作也是按塊來操作的,也就是說當ORACLE從數據文件讀數據時,是讀取多少個塊,而不是多少行. 每一個Block里可以包含多個row. 1.2 區:…

oracle檢查點

檢 查 點 概述 ■l當修改數據時&#xff0c;需要首先將數據讀入內存中&#xff08;Buffer Cache&#xff09;&#xff0c;修改數據的同時&#xff0c;Oracle會記錄重做信息&#xff08;Redo&#xff09;用于恢復。因 為有了重做信息的存在&#xff0c;Oracle不需要在提交時…

文獻翻譯:Java theory and practice: Fixing the Java Memory Model, Part 2

Java theory and practice: Fixing the Java Memory Model, Part 2 譯&#xff1a;Java 理論與實踐&#xff1a;修復 Java 內存模型&#xff0c;第 2 部分 翻譯自&#xff1a;http://www.ibm.com/developerworks/library/j-jtp03304/&#xff08;原文寫于2004年3月&#xff0…

oracle的buffercache

LRU空閑或者干凈的鏈&#xff0c;可以從這里找到未修改的數據LRUW臟鏈&#xff0c;一個臟塊同時掛到了lruw和檢查點隊列&#xff0c;LRUW分冷端和熱端&#xff0c;冷端即為更新頻率較低的一端&#xff0c;熱端為更新頻率較高的一端&#xff0c;dbwn寫入數據文件時從冷端開始寫入…

oracle的undo

Undo段中區的狀態free expiredinactiveactive 顯示UNDO區信息 SELECT extent_ id, bytes&#xff0c; status FROM dba_ _undo_ _extentsWHERE segment_ name SYSSMU1S ; 圖解一一個事務的操作流程 Undo段的組成:段頭、回滾塊 事務ID …