六、MySQL數據庫表_SELECT查詢

在我們日常操作數據庫中的數據的時候,無非就四種操作,增刪改查。當然,這四種操作也是我們後續經常使用到的,所以我單獨來去講述這個語句

一、認識SELECT

SELECT這個單詞啊,是選擇的意思,具體選擇什麼呢,其實是選擇要顯示的內容。

給出一個最簡單的SELECT語句,SELECT * FROM xxx表,這個的意思就是在xxx表中選擇出所有的列的內容。(*代表所有)

二、瞭解SELECT

SELECT 語句的使用格式

SELECT 字段1,字段2,字段3 FROM 什麼什麼表;

或者

SELECT * FROM 什麼什麼表;

當然,我推薦大家使用第一種,一個字段一個去寫,因爲 * 這個全查詢性能太差。但是也得結合業務。你說表裏面就四五個列,數據還不對,那沒有關係,如果一旦多了,千萬不要使用 * ,坑自己。

好,說了半天我們開始練習一下。先給它弄個表。

起名字叫t_student,有了表之後,我們開始學習SELECT。

三、使用SELECT

不好意思,忘記了。得先加一些數據,哈哈哈哈。(直接複製粘貼,弄個幾行夠用就好)

INSERT INTO t_student
(
    id,
    name,
    age,
    createDt,
    sex,
    hobby
) VALUES
(null, '張三', 12, '2020-05-30 19:11:12', 1, 2),
(null, '張四', 13, '2020-05-15 13:13:12', 2, 3),
(null, '張五', 14, '2020-05-21 18:12:12', 2, 2),
(null, '張六', 15, '2020-05-30 02:11:12', 1, 1)

1. 查詢這個表中的所有信息

上面這個是其中的一種方式。但這個方式是全表進行查詢,所有的字段都會顯示。

我們還有一種是列出所有的字段,我們再來看一下

當然,這個比較噁心,字段多的話,寫的麻煩。但是哈,有好處,就是當你數據量龐大的話,你用第二種列字段進行查找會比較快,不然用第一種 * 這種方法,全表查詢這個可不是鬧着玩的。希望大家儘量去使用第二種列字段的方式。具體原因我們後面講述數據庫優化的時候說。

2. 指定字段查詢(我們給一個業務需求,只查看名字和年齡)

是不是,我們只需要告訴數據庫,要查詢name,age 即可,其他的不需要展示出來。

3. WHERE 條件查詢(業務需求:查詢14歲以下的學生所有信息,不包括14)

我先來說一下這個WHERE條件語句如何去使用

WHERE 語句是將我們查詢到的結果集進行賽選,怎麼用呢?看下面

SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值

就是直接跟在我們上面講述的這個SELECT查詢後面,WHERE 什麼列,運算符(大於小於等於等)一個值。

簡單說到這裏,然後我們來實踐一下。

直接上我們的SQL,這裏就不和大家廢話了

可以看到我們的sql,從t_student檢索出所有信息,然後條件是什麼 age 也就是年齡(上面所說的列),< 數學中的小於號,小於多少呢,14

大家可以嘗試一下。對了,這個關鍵字很多啊,我建議大家直接看這裏,看看有啥關鍵字 -> 關鍵字

4. IN關鍵字查詢(業務需求:查找11歲、12歲的學生信息)

同樣,我們現在介紹一下IN關鍵字。

IN關鍵字是用在WHERE條件查詢裏面的,可以規定多個值的查詢檢索,那怎麼寫呢?看下面(NOT的意思需要往下看)

SELECT column_name(s)
FROM table_name
WHERE column_name [NOT] IN (value1,value2,...)

就是操作符變成了IN,然後呢,這個後面跟着的是一個小括號,括號中寫的是具體的值。好,大概知道了用法,我們來安排一下上面的實例

這裏我們可以看到啊,只有一個12歲的學生,沒有11歲的。

5. BETWEEN  AND 的範圍查詢(業務需求:查詢年齡是10歲至12歲的學生)

用法:同樣,這個BETWEEN  AND 是用在我們的WHERE語句後面的啊,但是寫法不一樣,我們來看一下(NOT的意思需要往下看)

SELECT column_name(s)
FROM table_name
WHERE column_name
[NOT] BETWEEN value1 AND value2

這個是字段BETWEEN xxx值 AND xxx值,這個值可以是文本,也可以是數字,當然也可以是日期。我們來用一下

這裏可以和大家說一下,這個是包括你要查看的,比如說我們查的是10到12,其中查出來的數據也一定包含10歲和12歲的。

除去這個數字,我們再來嘗試一下日期。我們來找一下創建日期在 2020-05-15 00:00:00 至 2020-05-25 23:59:59的學生

是的,也是沒有問題的。

6. like模糊查詢(業務需求:查詢姓氏是張的所有學生)

先來說一下like的用法,同樣啊,這個like也是用在WHERE條件查詢語句後面的,具體怎麼寫呢?(NOT的意思需要往下看)

SELECT column_name(s)
FROM table_name
WHERE column_name [NOT] LIKE pattern

就是字段 like 什麼什麼,當然啊,我們這個一般用作字符串,如果是其他的,比如數字啊啥的,我們是不用這個的。

然後,我們介紹一下通配符,MySQL數據庫中通配符有兩種,一個是 _ 一個是%,他倆區別就是,_ 這個是隻能通配一個字符,而%可以是多個字符。

我們來實踐一下子

除去_,我們再來用一下%

當然啊,這個通配符具體怎麼用看內個具體的業務,有的好比需要查找張什麼三,這時候我們就需要用到_這個了,我們SQL語句就是

當然,我們這個表中沒有這個張什麼三的人,所以啥也查不到。

7. NOT關鍵字查詢(業務需求,我們查找一下有愛好的同學)

NOT的用法這個就比較不固定了,可以和很多東西搭配。大家可以看一下IN、BETWEEN、LIKE這幾個關鍵字的用法,不難發現這些個前面都有一個NOT,這個就是“不是”的意思,很容易理解,我們來使用一下,這裏呢,我們再搭配一個關鍵字,IS。

SELECT column_name(s)
FROM table_name
WHERE column_name IS [NOT] pattern

有了這個用法,我們來實踐一下

我們爲了做對比,我們去掉NULL

大家可以去嘗試一下其他的那些。

8. AND OR 關鍵字查詢(業務需求:查找一下這個名字是張三和張四的人,或者是張七的人)

AND 這個其實我們上面用來着,表示的是和的這個意思,並且這個東西也能單獨去使用,用法:

SELECT *
FROM xxx表
WHERE 字段 = xxx [AND][OR] 字段 = xxx

可能大家剛開始學習有點懵,不要慌,我挨個去講述

首先是AND,我們來用一下,實現一下業務,我們先來查詢一下名字是張三的人

大家可以看到了,我們已經查看到了,然後我們在之前的這個條件下查詢一下張四的人

我們會發現,怎麼啥也沒有呢,這個我要說一下了,這裏的AND,是指條件的疊加,也就是在名字是張三的前提下,再去找名字是張四的人,這個就不對了是吧,一個人就一個名字,怎麼會又叫張三,又叫張四呢。所以這個我們用OR這個關鍵字。

是不是查詢到了。大家好好理解一下。

9. DISTINCT 關鍵字查詢(業務需求:查詢一下有多少種的內個愛好)

先來說一下這個DISTINCT的用法以及含義。

DISTINCT是表示去重複的意思。

在表中,可能會包含重複值。這並不成問題,不過,有時您也許希望僅僅列出不同(distinct)的值。

用法和之前的不同,我們來看一下

SELECT DISTINCT 列名稱 FROM 表名稱

是吧,這個東西是放在前面的,緊跟這個SELECT,我們來看一下怎麼用

是不是,哈哈哈,查出來了我們呢,去掉這個DISTINCT再試試

不難發現,2和2重複了。雖然說這個關鍵詞可以去掉重複,但是啊,效率低,我是很少用,但也不能說沒有用處,看情況吧。

10. ORDER BY 關鍵字查詢(業務需求:我們查詢出所有的學生,按照創建日期進行排序,從早到晚或者從晚到早)

廢話不多說,先來說一下ORDER BY ,這個關鍵字是一起使用的,連着用啊,不是和上面的BETWEEN AND一樣分開的。這個ORDER BY是值排序的意思,別的先不說,我們先來看一下怎麼用。

我們可以看到,我們按照這個創建日期進行排序,這個是按照默認排序的,從早到晚,我們稱這個排序方式爲:升序

這個可以理解成從小到大進行排序,當然啊,日期這個東西不分大小,只分先後,那就是從先有的,然後到後來的。

但是如果我們查找的是從大到小的呢?我們再看來

只需要加一個DESC即可,然後再來看我們的結果集,和上面的到過來了。這個排序方式我們叫:倒序

這裏再說幾個知識點,數據庫默認的排序是升序,也就是你要是不說,他就按照升序排,其實它後面還有一個關鍵字,就是ASC,只不過省略了。我們再看

是不是。是OK的,大家可以自己試試看,然後就是這個排序,可以多個排序,可以既按照日期,還能按照興趣排序,我們再來看一下。

只要用,隔開即可,我是平時開發中用到最多的就是按照一個去進行排序,很少能碰到多個的。

11. LIMIT 關鍵字查詢(業務需求,查詢所有的同學們,但是隻顯示出前兩條)

limit這個關鍵字也是單獨去使用的,當然了啊,這個也是有用法的,我們來看一下

SELECT column_name(s)
FROM table_name
LIMIT number;

或者

SELECT column_name(s)
FROM table_name
LIMIT number, number

這個limit就是將我們查詢到的結果集進行選取,選取前多少條記錄,或者是將插敘到的結果集進行分組,取第幾組(可以這樣去理解)。

然後我們來使用一下。

是不是,我們將所有的結果集查詢到,然後我們limit 2,limit 3,一個現實了其中的兩條,一個顯示了三條。

然後我們用一下另外一種。

通過這三個我們可以比對出來,limit 0,2 就是查詢出來第一條、第二條,limit 1,2 查詢出來的是第二條,第三條,limit 2,2查詢出來的是第三條,第四條。

通過這個我們可以簡單分析出來,2就是我們要查詢到的記錄數總數是多少,前面的就是從多少個開始查詢。

另外說一下,我們以後用到分頁,也是會用到這個東西,比如說我們查詢10個,第一次就是查詢的是limit 0,10 ,下一次就是從10開始往後查詢,也查詢10個,所以就是limit 10,10,以此類推,limit 20,10.....

12. GROUP BY 分組查詢(業務需求:統計一下各個性別的同學總數)

說這個之前我先和大家說一下,這個GROUP BY是一個難點,而且是一個比較靈活的查詢方式,所以這個要多練習,其他的也是。

GROUP BY 這個是連着一起使用的,當然,可以直接單獨使用,和ORDER BY類似。但是作用不一樣,GROUP BY是指分組的意思

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

這個就是我們的這個查詢語句的方式。我們來看一下具體使用

我們可以看到,出錯誤了,我們來看一下google是如何翻譯的

額。可能大家看中午可能也不是那麼明白,這裏我來說,它說這個缺少聚合的列,也就是說,我們不能直接這麼查詢,我們可以這樣

我們按照id進行分組,這樣,我們是不是就查詢到了,但是不符合我們的業務需求,這裏呢,提前和大家說一下,我們的這個GROUP BY 的用法,一般是和聚合函數一起使用的,單獨去使用這個GROUP BY 是沒有任何意義的。所以我們來再改造一下

我們可以看到啊,性別是1的人數是2,性別是2的人數也是2。

然後我再來說一下這個分組查詢,它是去從整個表進行檢索出所有的列,按照性別進行分組,當然,我們這個就兩個性別,1 或者2,。然後sql語句查詢的是所有的數量,和性別這個列,這樣就統計出每一個性別,它的數量和具體的性別是啥。

這個GROUP BY可能還是有一點懵,不要緊,我們後面一講說到這個聚合函數的時候,還會去講述,先了解。

 

今天這個比較長,大家一定要動手去練習一下,一定要去練習。

大家有不懂的或者想問的,可以私信我,或者可以留評論,或者加我QQ,2100363119,我會給大家進行解答。

最近我弄了一個QQ羣,大家可以加一下,平時討論一下技術,或者聊聊家常。歡迎大家加入。

QQ羣:1108075065

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章