MySQL學習筆記(4) —— DQL

DQL(Data Query Language)數據查詢語言

用來查詢數據庫中表的記錄(數據)。關鍵字:select, where 等數據庫

select * from 表名;函數

語法:spa

select
    字段列表
from
    表名列表
where
    條件列表
group by
    分組字段
having
    分組以後的條件
order by
    排序
limit
    分頁限定

基礎查詢

1、多個字段的查詢

select 字段名1,字段名2,... from 表名;3d

注意:code

若是查詢全部字段,能夠用 * 來代替字段列表

2、去除重複

distinctblog

eg: SELECT DISTINCT 列名 FROM 表名;排序

多列名時,保證每行對應列名處徹底同樣才能夠去除索引

3、計算列

通常可使用四則運算計算一些列的值。it

eg:SELECT name,math,english,math+english FROM 表名;
math + english便是運算,而且新建別名class

IFNULL(表達式1,表達式2):NULL參與的運算,計算結果都爲NULL

表達式1:哪一個字段須要判斷爲NULL
 表達式2:替換爲哪一個值

SELECT name,math,english,math+ IFNULL(english,0) FROM 表名;

4、起別名

SELECT name,math,english,math+ IFNULL(english,0) AS 總分 FROM 表名;
image.png

AS 也能夠省略,必定要有空格

條件查詢

1.where字句後跟條件

2.運算符

  • 、< 、<= 、>= 、= 、<>(不等於)
    BETWEEN...AND...
    IN( 集合)
    LIKE:模糊查詢
    佔位符:
    _:單個任意字符
      %:多個任意字符

    IS NULL
    and 或 &&
    or 或 ||
    not 或 !

-- 查詢年齡大於20歲

SELECT * FROM student WHERE age > 20;
        
        SELECT * FROM student WHERE age >= 20;
        
        -- 查詢年齡等於20歲
        SELECT * FROM student WHERE age = 20;
        
        -- 查詢年齡不等於20歲
        SELECT * FROM student WHERE age != 20;
        SELECT * FROM student WHERE age <> 20;
        
        -- 查詢年齡大於等於20 小於等於30
        
        SELECT * FROM student WHERE age >= 20 &&  age <=30;
        SELECT * FROM student WHERE age >= 20 AND  age <=30;
        SELECT * FROM student WHERE age BETWEEN 20 AND 30;
        
        -- 查詢年齡22歲,18歲,25歲的信息
        SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
        SELECT * FROM student WHERE age IN (22,18,25);
        
        -- 查詢英語成績爲null
        SELECT * FROM student WHERE english = NULL; -- 不對的。null值不能使用 = (!=) 判斷
    
        SELECT * FROM student WHERE english IS NULL;
        
        -- 查詢英語成績不爲null
        SELECT * FROM student WHERE english  IS NOT NULL;

LIKE的模糊查詢例子

-- 查詢姓馬的有哪些? like
        SELECT * FROM student WHERE NAME LIKE '馬%';
        
        -- 查詢姓名第二個字是化的人
        SELECT * FROM student WHERE NAME LIKE "_化%";
        
        -- 查詢姓名是3個字的人
        SELECT * FROM student WHERE NAME LIKE '___';
            
                -- 查詢姓名中包含德的人
        SELECT * FROM student WHERE NAME LIKE '%德%';

一.排序查詢

語法:order by 字句
    order by 排序字段1 排序方式1,排序字段2 排序方式2,..排序字段n 排序方式n;
排序字段:目標列
排序方式:
    ASC:升序,默認
    DESC:降序
注意:
    若是有多個排序條件,則只有前面條件值同樣時,才執行後面的條件

二.聚合函數

將一列數據做爲一個總體,進行縱向的計算(排除了非空的值

SELECT 聚合函數(列名) FROM 表名;

若是把null歸入計算,要把null的值替換後再計算
解決方案:

①:IFNULL函數
    SELECT 聚合函數(IFNULL(列名,替換後的值)) FROM 表名;
②:使用不包含NULL的列進行計算

一、count:計算個數

1. 通常選擇非空的列:主鍵
2. count(*):通常不推薦寫 * ,通常寫主鍵

二、max:計算最大值

三、min:計算最小值

四、sum:計算和

五、avg:計算平均值

三.分組查詢

語法:
group by 分組字段;

注意:

1.分組以後查詢的字段:分組字段、聚合函數
2.

where 和 having的區別

where:在分組以前限定,若是不知足條件,不參與分組
having:在分組以後限定,若是不知足條件,不會被查詢出來(意味着,having有時候在分組後基礎上再篩選)

where:後面不能夠跟聚合函數
having:後能夠進行聚合函數的判斷
image.png
簡化寫法,在聚合函數後取一個別名,判斷時用別名(通常取英文)進行判斷
image.png

四.分頁查詢

語法:

<kbd>limit 開始的索引, 每頁的條數;(僅僅在MySQL語句)

公式:開始的索引 = (當前的頁碼-1)* 每頁顯示的條數

分頁操做時一個MySQL的「方言」

相關文章
相關標籤/搜索