搜尋
首頁資料庫mysql教程MySQL 文法整理介紹

MySQL 文法整理介紹

Apr 14, 2021 am 09:54 AM
mysql

MySQL 文法整理介紹

最近學了幾週的MySQL,這篇部落格專門來整理一下MySQL的基本文法.

先來看MySQL的最基本三大段語句,舉個例子:我想將下面instructor表中salary大於80000的教師名字找出

MySQL 文法整理介紹

相關免費學習推薦:mysql影片教學

#
select name  -- 这是最后筛选的元素,注意,在MySQL中一切结果都是以表的形式,哪怕这个表只有一个记录
from instructor -- from语句表示从哪个表中进行查询
where salary > 80000; -- where语句相当于选择语句,限定条件,找出所需的记录

MySQL 文法整理介紹
查詢結果如圖!這三條語句是MySQL中最重要的三條,基本上所有的查詢都離不這三條。但是想要滿足複雜的查詢,就必須要更多的語句來支援。

distinct:對結果去重

/*用法如下,假如我想在上表instructor中,找出所有系的名字,可以发现在dept_name中,有的系是出现了一次以上,
因此要对系的名字进行去重*/select distinct dept_name
from instructor; -- 这里不需要限定条件,因此不用where语句

* :表示當前表所有鍵,所謂鍵其實就是表的行字段,例如instructor表的ID ,name,dept_name等

/*类似上一个例子,我想找出instructor表中salary大于80000的教师,并显示这些老师的所有信息*/select *
from instructor
where salary > 80000; -- 其实不加分号也行,分号表示执行到此结束,接下来的语句不执行

當我們篩選條件不只一個呢,比如我想找出salary大於80000的教師,我還要指定是計算機系的教師呢,即我要找出電腦系中salary大於80000的教師,此時我們要用到and語句

select *
from instructor
where salary > 80000 and dept_name = 'Comp. Sci.';/*同样有and语句就有or语句,or表示或,即满足一个条件即可。比如我想找出工资小于60000或者大于80000的教师*/select *
from instructor
where salary > 80000 or salary <h2 id="span-style-color-rgb-font-size-px-接下來開始進行多個表之間的查詢-也是我們接下來的難點-先來補充一下鍵的基本概念-之前已經說了什麼是鍵-這裡說一下主鍵-也叫主碼-主鍵表示能唯一確定某一筆記錄的鍵-舉個例子-我們的學號就是唯一能確定我們在校園的身份-就算學校中有人與我重名-我也能透過學號將我們身份分開-由此可見-名字不是主鍵-當遇到重名-名字就不能唯一確定某個學生了-span"><span style="color: rgb(255, 160, 122); font-size: 16px;">接下來開始進行多個表之間的查詢,也是我們接下來的難點。先來補充一下鍵的基本概念,之前已經說了什麼是鍵,這裡說一下主鍵,也叫主碼,主鍵表示能唯一確定某一筆記錄的鍵。舉個例子,我們的學號就是唯一能確定我們在校園的身份,就算學校中有人與我重名,我也能透過學號將我們身份分開。由此可見,名字不是主鍵,當遇到重名,名字就不能唯一確定某個學生了。 </span></h2><p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/052/007b73b5402671007e13d9de7ee7de8d-2.png?x-oss-process=image/resize,p_40" class="lazy" alt="MySQL 文法整理介紹"><br> 這是teaches表,ID鍵表示老師的ID,course_id表示課程的id,semester表示開課的學期,假如我想找出教師都教了什麼課,並把教師名字和course_id顯示出來。 </p><pre class="brush:php;toolbar:false">/*这条语句可以实现,但是请问为什么可以实现呢?那是因为两个表都有共同的主键:ID,当然teaches不止这一个主
键,我们看键旁边有个key,都是主键。但是我们不用管其他键,只要关注ID键就可以了,因为这是两个表中共有的。这
里我还要特意提一下两个表查询,其实是一个表的一个记录去遍历另外一个表的记录,当找到某一条instruction的id等
于teaches的id,就将这条记录保存到结果表中*/
SELECT NAME,course_id
where instructor.`ID` = teaches.`ID`;

鋪墊了這麼就,我們來講一下nature join:自然連結。改操作很簡單,就是把兩個表中的主鍵相等的記錄保存,如果兩個表有多個相同的key鍵,那麼就要保證每個相同主鍵相同才能保存。

/*上述例子完全可以用自然连接来查询*/
SELECT NAME,course_id
FROM instructor NATURAL JOIN teaches;/*如果你想知道自然连接后的表长啥样,我满足你*/
SELECT * -- 显示结果表的所有键
FROM instructor NATURAL JOIN teaches;

MySQL 文法整理介紹
我們可以看到,表格的欄位明顯增加了,其實就是將兩個表的鍵整合在一起。如果你還不能完全理解自然連接,我再舉個例子,比如我們有個學生表
[ ‘徐小明 ,1號’,‘黃小珊 ,2號’],其中主鍵是學號。還有一個成績表
[‘1號,語文:87,數學:98’,‘2號,語文:94,數學:82’] ,其中學號也是這個表的主鍵。當我們想要列印學生表,只要將兩個表自然連接即可,自然連接過程中,會將同一個學好的記錄整合成一個記錄,最後變成
['1號,徐小明,語文:87 ,數學:98','2號,黃小珊,語文:94,數學:82'] 。其實自然連結就是笛卡兒積的優化版,大家可以自行了解笛卡兒積。

我們可以透過select來查詢變數或函數

SELECT 'dd';SELECT 10*20;SELECT NOW(),UNIX_TIMESTAMP();

這裡其實想讓大家注意,select語句後面的鍵,會成為結果的鍵名,知道這個後續對於我們的改名操作有很大幫助。例如剛剛這個例子:
MySQL 文法整理介紹

concat():這是連接兩個鍵的函數,用法類似python的printf

/*通过concat函数来连接那么和dept_name*/
SELECT NAME,CONCAT(NAME,' : ',dept_name)FROM instructor;

MySQL 文法整理介紹
不僅是鍵名,連鍵的記錄也會連結在一起。

as:給鍵或表改名

/*比如刚刚那个例子*/
SELECT NAME,CONCAT(NAME,' : ',dept_name) as 'name+dept'FROM instructor;/*或者给表改名*/
SELECT NAME
FROM instructor as i
WHERE i.salary > 70000; -- 注意改名后,要想引用该表的键,要加上引用符号:.

MySQL 文法整理介紹

#

讲了这么就查询,这里讲一下创建表:create table。其实这个命令一般用的很少,我更喜欢用鼠标点击来创建表,而不是敲代码来创建。

/*创建一个与student表一样结构的表,什么叫一样结构,就是ss_1表中键于student一样*/
CREATE TABLE ss_1 LIKE student;

刚刚例子中出现了like,其实like还可以用于字符匹配

/*like语句来进行字符匹配*/
SELECT dept_name
FROM department
WHERE building LIKE 'Watson%'; -- 这里用到%,类似于正则中的?,表示任意多个字符。这个查询是想找出building
-- 中含有Watson的记录。

order by:对结果表中的键进行排序,默认是升序,即记录从上往下逐个递增

/*order by 按照某个属性进行排序*/
/*这个查询是想找出物理系的老师,并按工资进行排序*/
SELECT NAME , salary
FROM instructor
WHERE dept_name = 'Physics'ORDER BY salary;/*既然有升序,那就有降序*/
SELECT NAME , salary
FROM instructor
WHERE dept_name = 'Physics'ORDER BY salary DESC; -- DESC表示降序
/*我们还可以对多个键进行排序*/
SELECT *
FROM instructor
ORDER BY salary DESC , NAME ASC; -- 这里是先对工资进行降序排序,当工资一样时,按英文首字母的ASC码值升序排
-- 序

MySQL 文法整理介紹
有没有想过为什么order by要在where语句后面呢?因为order by语句时针对结果表的,where语句之后才有结果表,这也与我之前强调MySQL查询结果一切都是表!哪怕这个表只有一个键甚至一条记录!

between and:选择区间内的记录

/*区间范围,注意是闭区间,即[90000 , 100000]*/
SELECT NAME
FROM instructor
WHERE salary BETWEEN 90000 AND 1000000;

当我们对查询多个条件时,有时候可以通过键匹配

/*类似于python的字典,里面的元素逐个对应*/
SELECT NAME,course_id
FROM instructor,teaches
WHERE (instructor.`ID`,dept_name) = (teaches.`ID`,'Biology');

下一篇博客将重点介绍多个表之间的查询,这也是重中之重,难点之一!

更多相关免费学习推荐:mysql教程(视频)

以上是MySQL 文法整理介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
解釋InnoDB緩衝池及其對性能的重要性。解釋InnoDB緩衝池及其對性能的重要性。Apr 19, 2025 am 12:24 AM

InnoDBBufferPool通過緩存數據和索引頁來減少磁盤I/O,提升數據庫性能。其工作原理包括:1.數據讀取:從BufferPool中讀取數據;2.數據寫入:修改數據後寫入BufferPool並定期刷新到磁盤;3.緩存管理:使用LRU算法管理緩存頁;4.預讀機制:提前加載相鄰數據頁。通過調整BufferPool大小和使用多個實例,可以優化數據庫性能。

MySQL與其他編程語言:一種比較MySQL與其他編程語言:一種比較Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

學習MySQL:新用戶的分步指南學習MySQL:新用戶的分步指南Apr 19, 2025 am 12:19 AM

MySQL值得學習,因為它是強大的開源數據庫管理系統,適用於數據存儲、管理和分析。 1)MySQL是關係型數據庫,使用SQL操作數據,適合結構化數據管理。 2)SQL語言是與MySQL交互的關鍵,支持CRUD操作。 3)MySQL的工作原理包括客戶端/服務器架構、存儲引擎和查詢優化器。 4)基本用法包括創建數據庫和表,高級用法涉及使用JOIN連接表。 5)常見錯誤包括語法錯誤和權限問題,調試技巧包括檢查語法和使用EXPLAIN命令。 6)性能優化涉及使用索引、優化SQL語句和定期維護數據庫。

MySQL:初學者的基本技能MySQL:初學者的基本技能Apr 18, 2025 am 12:24 AM

MySQL適合初學者學習數據庫技能。 1.安裝MySQL服務器和客戶端工具。 2.理解基本SQL查詢,如SELECT。 3.掌握數據操作:創建表、插入、更新、刪除數據。 4.學習高級技巧:子查詢和窗口函數。 5.調試和優化:檢查語法、使用索引、避免SELECT*,並使用LIMIT。

MySQL:結構化數據和關係數據庫MySQL:結構化數據和關係數據庫Apr 18, 2025 am 12:22 AM

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL:解釋的關鍵功能和功能MySQL:解釋的關鍵功能和功能Apr 18, 2025 am 12:17 AM

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

SQL的目的:與MySQL數據庫進行交互SQL的目的:與MySQL數據庫進行交互Apr 18, 2025 am 12:12 AM

SQL用於與MySQL數據庫交互,實現數據的增、刪、改、查及數據庫設計。 1)SQL通過SELECT、INSERT、UPDATE、DELETE語句進行數據操作;2)使用CREATE、ALTER、DROP語句進行數據庫設計和管理;3)複雜查詢和數據分析通過SQL實現,提升業務決策效率。

初學者的MySQL:開始數據庫管理初學者的MySQL:開始數據庫管理Apr 18, 2025 am 12:10 AM

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器