MySQL入門(二)

一.SQL是什麼?MySQL是什麼?

什麼是SQL?SQL(Structured Query Language)是結構化查詢語言的縮寫,用來訪問和操作數據庫系統。SQL語句既可以查詢數據庫中的數據,也可以添加、更新和刪除數據庫中的數據,還可以對數據庫進行管理和維護操作。不同的數據庫,都支持SQL,這樣,我們通過學習SQL這一種語言,就可以操作各種不同的數據庫。–廖雪峯<SQL教程>

MySQL是目前應用最廣泛的開源關係數據庫(RDBMS)。MySQL最早是由瑞典的MySQL AB公司開發,該公司在2008年被SUN公司收購,緊接着,SUN公司在2009年被Oracle公司收購,所以MySQL最終就變成了Oracle旗下的產品。–廖雪峯<SQL教程>

注意:下面所有sql語句用法都是基於這張students表生成,且基於Mysql這個數據庫系統.在這裏插入圖片描述

二.查詢語句

1.基本

查詢語句(即select 語句)是用來從一個或多個表中檢索信息。爲了使用SELECT 檢索表數據,必須至少給出兩條信息——想選擇什麼,以及從什麼地方選擇。現在我們來舉個例子,比如我們想從上表中檢索name列,也就是篩選出name列進行觀看.那麼我們將用以下代碼

Select name
from students;

結果展示:
在這裏插入圖片描述我們可以看到在展示區,只出現了name列,也就是我們篩選成功了.Select後面跟我們需要篩選列的名稱,如果需要多個列,添加逗號(即
Select name,id,gender).from 後面跟我們篩選列所在的表名

2.去重語句

我們發現gender列中只有M,F兩個屬性,也就是隻有男和女,然後我們現在想篩選gender列,但是不需要每行數據都予以顯示,就是我們只想要知道這幾個人中有幾個性別就行了,重複的數據只需要出現一次.那麼這時候我們就需要對我們之前的Select進行改進,如下

Select Distinct gender
From students;

結果如下:
在這裏插入圖片描述

3.前N個語句

現在我們又對這張表有了新的要求,比如我們只想要觀察前3行的成績(注意不是前3名,就列表的前3行),而不是觀察所有學生的成績,這時候又應該怎麼操作呢.我們需要添加Limit 語句,如下:

Select score
From students
Limit 3;

輸出結果:
在這裏插入圖片描述
當然這裏我們也可以指定行數 比如我們想看3,4,5行的成績這時候我們需要在後面加上offset,先寫代碼:

Select score
From students
Limit 3 Offset 2;

輸出結果:
在這裏插入圖片描述
這裏我們對代碼解讀一下limit後面跟的數據代表我們需要幾行數據,3,也就是意味着我們最終需要輸出3條數據.後面的Offset則是告訴我們數據從第幾行開始取(注意這裏行數是從第0行開始計算,第0行也就是我們平常所說的第1行,跟python的語句用法一致),然後取行數的時候是包含了這一起始行的.我們需要第3,4,5行,也就是第3行是起始行,所以offset後面我們跟上了數字2

4.CASE…END判斷語句

現在我們考慮這樣一種需求,學生成績是有評分的,大於等於90分的學生是A,小於90分大於等於60分的學生是B, 其餘的學生是C,那麼我們可以使用 case when 語句實現,寫起來也很簡單,看看下面的sql語句就知道了!

Select
(Case
when score>=90 then 'A'
when score< 60 then 'C'
when 60<= score < 90 then 'B'
End) as "評分"
from students;

輸出結果:
在這裏插入圖片描述
注意一下 這裏我們 新增一個語法 as, as 後面跟上自己想要新取的列名,就可以生成新的列.這裏我們發現 when 後面跟上我們需要添加的限制條件, then後面跟上在滿足此條件下的輸出結果.(也就是if函數)

三.篩選語句

1.where用法

現在假設我們需要對列進行篩選,比如我們希望觀測到所有大於85分成績的行,這裏我們需要加入where 這個新用法(注意where應該放在From後面)如下:

Select score, name
From students
Where score>85;

輸出結果:
在這裏插入圖片描述
需要注意的是如果使用order by 需要將其放在where後面.在SELECT 語句中,數據根據WHERE 子句中指定的搜索條件進行過濾。

2.運算符/通配符/操作符

在這裏插入圖片描述
上圖來自<SQL必知必會>

關於通配符:最常使用的通配符是百分號(%)。在搜索串中,%表示任何字符出現任意次數(類似於excel中*)。另一個有用的通配符是下劃線(_)。下劃線的用途與%一樣,但它只匹配單個字符,而不是多個字符(類似於excel中?)。方括號([])通配符用來指定一個字符集,它必須匹配指定位置(通配符的位置)的一個字符。若要使用通配符,我們需要在where句子中間加入 Like,如下

Select *
From students
where name like '%[小大]_'

輸出結果:
在這裏插入圖片描述
這裏我們解釋一下,首先%匹配任意字符且是任意數量,所以0數量也是可以匹配的,然後[]通配符是匹配方括號中任意一個字符,它也只能匹配單個字符,也就是在 小大 2個之間滿足任意一個即可(類似於or),最後_匹配任意字符但是數量爲1,也就是說[小大]後面必須再跟有任意一個字符才能匹配, 如果name=小, 那麼則不成立.

四.分組語句 GROUP BY

1.聚集函數

在講group by 之前我們先說一下聚集函數.聚集函數就是對某些行運行的函數,計算並返回一個值。
上圖上圖來自<SQL必知必會>
我一般的理解也就是sql自帶的一些內置函數,可以簡單實現一些運算.下面我們對sum函數進行舉例:

Select SUM(score) as totalscore
From students

輸出:
在這裏插入圖片描述
注意as就是代表我們新增了一列.

2.Group by 分組

現在我們來講group by 的用法,上面我們已經學會了聚合函數,現在比如我們想知道 所有女生的總分 和 所有男生的總分各是多少,這時候應該怎麼操作呢.也就是我們對gender進行了分組,分成了男,女兩組,然後在對這個分組後的數據進行求和,代碼如下:

Select gender, SUM(score) as totalscore
From students
Group by gender

輸出:
在這裏插入圖片描述

3.Having子句

有了上面的分組數據之後,我們希望對分組數據進行篩選.之前我們對已有的列進行篩選用的是where函數,但是在引入group by之後,也就是生成了分組之後,再在分組後面用where函數是不行的,這時候我們需要引入新的函數也就是Having,來替代where的功能.下面還是看例子,比如分組之後,我們希望篩選出總分大於420的性別,這時候我們需要這樣操作:

Select gender, SUM(score) as totalscore
From students
Group by gender
Having SUM(score)> 420

輸出:
在這裏插入圖片描述
注意:Having的時候需要放在Group by 後面
在這裏插入圖片描述
上圖來自<SQL必知必會>

作業

項目一

CREATE TABLE email 
(
ID INT NOT NULL PRIMARY KEY,
Email VARCHAR(255)
);
INSERT INTO email VALUES('1','[email protected]');
INSERT INTO email VALUES('2','[email protected]');
INSERT INTO email VALUES('3','[email protected]');
SELECT Email
FROM
    email
GROUP BY Email
HAVING COUNT(Email) > 1;

項目二

CREATE TABLE World
 (
name VARCHAR(50) NOT NULL,
continent VARCHAR(50) NOT NULL,
area INT NOT NULL,
population INT NOT NULL,
gdp INT NOT NULL
);
INSERT INTO World
  VALUES('Afghanistan','Asia',652230,25500100,20343000);
INSERT INTO World 
  VALUES('Albania','Europe',28748,2831741,12960000);
INSERT INTO World 
  VALUES('Algeria','Africa',2381741,37100000,188681000);
INSERT INTO World
  VALUES('Andorra','Europe',468,78115,3712000);
INSERT INTO World
  VALUES('Angola','Africa',1246700,20609294,100990000);
  Select name, population, area
  From World
  Where area > 3000000 Or (population > 25000000 AND gdp > 20000000);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章