MySQL DQL語言的筆記

##DQL語言的學習

###進階1:基礎查詢   

    語法:
    SELECT 要查詢的東西
    【FROM 表名】;

    類似於Java中 :System.out.println(要打印的東西);
    特點:
    ①通過select查詢完的結果 ,是一個虛擬的表格,不是真實存在
    ② 要查詢的東西 可以是常量值、可以是表達式、可以是字段、可以是函數

###進階2:條件查詢

    條件查詢:根據條件過濾原始表的數據,查詢到想要的數據
    語法:
    select 
        要查詢的字段|表達式|常量值|函數
    from 
        表
    where 
        條件 ;

    分類:
    一、條件表達式
        示例:salary>10000
        條件運算符:
        > < >= <= = != <>
    
    二、邏輯表達式
    示例:salary>10000 && salary<20000
    
    邏輯運算符:

        and(&&):兩個條件如果同時成立,結果爲true,否則爲false
        or(||):兩個條件只要有一個成立,結果爲true,否則爲false
        not(!):如果條件成立,則not後爲false,否則爲true

    三、模糊查詢
    示例:last_name like 'a%'

###進階3:排序查詢     

    語法:
    select
        要查詢的東西
    from
        表
    where 
        條件
    
    order by 排序的字段|表達式|函數|別名 【asc|desc】

    
###進階4:常見函數    

一、單行函數 

     1、字符函數
        concat拼接
        substr截取子串
        upper轉換成大寫
        lower轉換成小寫
        trim去前後指定的空格和字符
        ltrim去左邊空格
        rtrim去右邊空格
        replace替換
        lpad左填充
        rpad右填充
        instr返回子串第一次出現的索引
        length 獲取字節個數
        
    2、數學函數
        round 四捨五入
        rand 隨機數
        floor向下取整
        ceil向上取整
        mod取餘
        truncate截斷
    3、日期函數
        now當前系統日期+時間
        curdate當前系統日期
        curtime當前系統時間
        str_to_date 將字符轉換成日期
        date_format將日期轉換成字符
    4、流程控制函數
        if 處理雙分支
        case語句 處理多分支
            情況1:處理等值判斷
            情況2:處理條件判斷
        
    5、其他函數
        version版本
        database當前庫
        user當前連接用戶


二、分組函數

        sum 求和
        max 最大值
        min 最小值
        avg 平均值
        count 計數
    
        特點:
        1、以上五個分組函數都忽略null值,除了count(*)
        2、sum和avg一般用於處理數值型
            max、min、count可以處理任何數據類型
        3、都可以搭配distinct使用,用於統計去重後的結果
        4、count的參數可以支持:
            字段、*、常量值,一般放1
    
           建議使用 count(*)


##進階5:分組查詢    

    語法:
    select 查詢的字段,分組函數
    from 表
    group by 分組的字段
    
    
    特點:
    1、可以按單個字段分組
    2、和分組函數一同查詢的字段最好是分組後的字段
    3、分組篩選
            針對的表    位置            關鍵字
    分組前篩選:    原始表        group by的前面        where
    分組後篩選:    分組後的結果集    group by的後面        having
    
    4、可以按多個字段分組,字段之間用逗號隔開
    5、可以支持排序
    6、having後可以支持別名

##進階6:多表連接查詢

    笛卡爾乘積:如果連接條件省略或無效則會出現
    解決辦法:添加上連接條件
    
一、傳統模式下的連接 :等值連接——非等值連接


    1.等值連接的結果 = 多個表的交集
    2.n表連接,至少需要n-1個連接條件
    3.多個表不分主次,沒有順序要求
    4.一般爲表起別名,提高閱讀性和性能
    
二、sql99語法:通過join關鍵字實現連接

    含義:1999年推出的sql語法
    支持:
    等值連接、非等值連接 (內連接)
    外連接
    交叉連接
    
    語法:
    
    select 字段,...
    from 表1
    【inner|left outer|right outer|cross】join 表2 on  連接條件
    【inner|left outer|right outer|cross】join 表3 on  連接條件
    【where 篩選條件】
    【group by 分組字段】
    【having 分組後的篩選條件】
    【order by 排序的字段或表達式】
    
    好處:語句上,連接條件和篩選條件實現了分離,簡潔明瞭!

    
三、自連接

案例:查詢員工名和直接上級的名稱

sql99

    SELECT e.last_name,m.last_name
    FROM employees e
    JOIN employees m ON e.`manager_id`=m.`employee_id`;

sql92

    
    SELECT e.last_name,m.last_name
    FROM employees e,employees m 
    WHERE e.`manager_id`=m.`employee_id`;


##進階7:子查詢

含義:

    一條查詢語句中又嵌套了另一條完整的select語句,其中被嵌套的select語句,稱爲子查詢或內查詢
    在外面的查詢語句,稱爲主查詢或外查詢

特點:

    1、子查詢都放在小括號內
    2、子查詢可以放在from後面、select後面、where後面、having後面,但一般放在條件的右側
    3、子查詢優先於主查詢執行,主查詢使用了子查詢的執行結果
    4、子查詢根據查詢結果的行數不同分爲以下兩類:
    ① 單行子查詢
        結果集只有一行
        一般搭配單行操作符使用:> < = <> >= <= 
        非法使用子查詢的情況:
        a、子查詢的結果爲一組值
        b、子查詢的結果爲空
        
    ② 多行子查詢
        結果集有多行
        一般搭配多行操作符使用:any、all、in、not in
        in: 屬於子查詢結果中的任意一個就行
        any和all往往可以用其他查詢代替


##進階8:分頁查詢

應用場景:

    實際的web項目中需要根據用戶的需求提交對應的分頁查詢的sql語句

語法:

    select 字段|表達式,...
    from 表
    【where 條件】
    【group by 分組字段】
    【having 條件】
    【order by 排序的字段】
    limit 【起始的條目索引,】條目數;

特點:

    1.起始條目索引從0開始
    
    2.limit子句放在查詢語句的最後
    
    3.公式:select * from  表 limit (page-1)*sizePerPage,sizePerPage
    假如:
    每頁顯示條目數sizePerPage
    要顯示的頁數 page

##進階9:聯合查詢

引入:
    union 聯合、合併

語法:

    select 字段|常量|表達式|函數 【from 表】 【where 條件】 union 【all】
    select 字段|常量|表達式|函數 【from 表】 【where 條件】 union 【all】
    select 字段|常量|表達式|函數 【from 表】 【where 條件】 union  【all】
    .....
    select 字段|常量|表達式|函數 【from 表】 【where 條件】

特點:

    1、多條查詢語句的查詢的列數必須是一致的
    2、多條查詢語句的查詢的列的類型幾乎相同
    3、union代表去重,union all代表不去重
 

 

  •  

基礎查詢

一、語法
select查詢列表
from表名;
二、特點
1、查詢列表可以是字段、常量、表達式、函數,也可以是多個
2、查詢結果是- -個虛擬表
三、示例
1、查詢單個字段
select字段名from 表名;
2、查詢多個字段
select字段名,字段名from表名;
3、查詢所有字段
select * from表名

4、查詢常量
select常量值;
注意:字符型和日期型的常量值必須用單引號引起來,數值型不需要
5、查詢函數
select函數名(實參列表) ;
6、查詢表達式
select 100/1234;

7、起別名
①as
②空格
8、去重
select distinct字段名from 表名:

9、+
作用:做加法運算
select數值+數值;直接運算
select字符+數值;先試圖將字符轉換成數值,如果轉換成功,則繼續運算;否則轉換成0,再做運算
select nul1+值;結果都爲null

10、[補充] concat函數
功能:拼接字符
select concat(字符1,字符2,字符...:
11、[補充] ifnul1函數
功能:判斷某字段或表達式是否爲null,如果爲null返回指定的值,否則返回原本的值
select ifnull (comission. pct,0) from employees;

12、[補充] isnu11函數
功能:判斷某字段或表達式是否爲null,如果是,則返回1,否則返回0

條件查詢

一、語法
select查詢列表
from表名
where
篩選條件
二、篩選條件的分類
1、簡單條件運算符
> <= <> !=>= <= <=>安全等於
2、邏輯運算符
&& and
|I or
! not
3、模糊查詢
like:一般搭配通配符使用,可以判斷字符型或數值型
通配符: %任意多個字符,_任意單個字符
between and
in
is null /is not mull:用於判斷nul1值

is null PK <=>
                         普通類型的數值           null值                  可讀性
    is null                     否                        是                          是
    <=>                       是                        是                          否

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