MySQL DQL语言的笔记
##DQL語言的學習
###進階1:基礎查詢? ?
? ? 語法:
?? ?SELECT 要查詢的東西
?? ?【FROM 表名】;
?? ?類似于Java中 :System.out.println(要打印的東西);
?? ?特點:
?? ?①通過select查詢完的結(jié)果 ,是一個虛擬的表格,不是真實存在
?? ?② 要查詢的東西 可以是常量值、可以是表達式、可以是字段、可以是函數(shù)
###進階2:條件查詢
? ? 條件查詢:根據(jù)條件過濾原始表的數(shù)據(jù),查詢到想要的數(shù)據(jù)
?? ?語法:
?? ?select?
?? ??? ?要查詢的字段|表達式|常量值|函數(shù)
?? ?from?
?? ??? ?表
?? ?where?
?? ??? ?條件 ;
?? ?分類:
?? ?一、條件表達式
?? ??? ?示例:salary>10000
?? ??? ?條件運算符:
?? ??? ?> < >= <= = != <>
?? ?
?? ?二、邏輯表達式
?? ?示例:salary>10000 && salary<20000
?? ?
?? ?邏輯運算符:
?? ??? ?and(&&):兩個條件如果同時成立,結(jié)果為true,否則為false
?? ??? ?or(||):兩個條件只要有一個成立,結(jié)果為true,否則為false
?? ??? ?not(!):如果條件成立,則not后為false,否則為true
?? ?三、模糊查詢
?? ?示例:last_name like 'a%'
###進階3:排序查詢?? ??
? ? 語法:
?? ?select
?? ??? ?要查詢的東西
?? ?from
?? ??? ?表
?? ?where?
?? ??? ?條件
?? ?
?? ?order by 排序的字段|表達式|函數(shù)|別名 【asc|desc】
?? ?
###進階4:常見函數(shù)? ??
一、單行函數(shù)?
? ? ?1、字符函數(shù)
?? ??? ?concat拼接
?? ??? ?substr截取子串
?? ??? ?upper轉(zhuǎn)換成大寫
?? ??? ?lower轉(zhuǎn)換成小寫
?? ??? ?trim去前后指定的空格和字符
?? ??? ?ltrim去左邊空格
?? ??? ?rtrim去右邊空格
?? ??? ?replace替換
?? ??? ?lpad左填充
?? ??? ?rpad右填充
?? ??? ?instr返回子串第一次出現(xiàn)的索引
?? ??? ?length 獲取字節(jié)個數(shù)
?? ??? ?
?? ?2、數(shù)學函數(shù)
?? ??? ?round 四舍五入
?? ??? ?rand 隨機數(shù)
?? ??? ?floor向下取整
?? ??? ?ceil向上取整
?? ??? ?mod取余
?? ??? ?truncate截斷
?? ?3、日期函數(shù)
?? ??? ?now當前系統(tǒng)日期+時間
?? ??? ?curdate當前系統(tǒng)日期
?? ??? ?curtime當前系統(tǒng)時間
?? ??? ?str_to_date 將字符轉(zhuǎn)換成日期
?? ??? ?date_format將日期轉(zhuǎn)換成字符
?? ?4、流程控制函數(shù)
?? ??? ?if 處理雙分支
?? ??? ?case語句 處理多分支
?? ??? ??? ?情況1:處理等值判斷
?? ??? ??? ?情況2:處理條件判斷
?? ??? ?
?? ?5、其他函數(shù)
?? ??? ?version版本
?? ??? ?database當前庫
?? ??? ?user當前連接用戶
二、分組函數(shù)
? ? ? ? sum 求和
?? ??? ?max 最大值
?? ??? ?min 最小值
?? ??? ?avg 平均值
?? ??? ?count 計數(shù)
?? ?
?? ??? ?特點:
?? ??? ?1、以上五個分組函數(shù)都忽略null值,除了count(*)
?? ??? ?2、sum和avg一般用于處理數(shù)值型
?? ??? ??? ?max、min、count可以處理任何數(shù)據(jù)類型
?? ? ? ?3、都可以搭配distinct使用,用于統(tǒng)計去重后的結(jié)果
?? ??? ?4、count的參數(shù)可以支持:
?? ??? ??? ?字段、*、常量值,一般放1
?? ?
?? ??? ? ? 建議使用 count(*)
##進階5:分組查詢? ??
? ? 語法:
?? ?select 查詢的字段,分組函數(shù)
?? ?from 表
?? ?group by 分組的字段
?? ?
?? ?
?? ?特點:
?? ?1、可以按單個字段分組
?? ?2、和分組函數(shù)一同查詢的字段最好是分組后的字段
?? ?3、分組篩選
?? ??? ??? ?針對的表?? ?位置?? ??? ??? ?關鍵字
?? ?分組前篩選:?? ?原始表?? ??? ?group by的前面?? ??? ?where
?? ?分組后篩選:?? ?分組后的結(jié)果集?? ?group by的后面?? ??? ?having
?? ?
?? ?4、可以按多個字段分組,字段之間用逗號隔開
?? ?5、可以支持排序
?? ?6、having后可以支持別名
##進階6:多表連接查詢
?? ?笛卡爾乘積:如果連接條件省略或無效則會出現(xiàn)
?? ?解決辦法:添加上連接條件
?? ?
一、傳統(tǒng)模式下的連接 :等值連接——非等值連接
?? ?1.等值連接的結(jié)果 = 多個表的交集
?? ?2.n表連接,至少需要n-1個連接條件
?? ?3.多個表不分主次,沒有順序要求
?? ?4.一般為表起別名,提高閱讀性和性能
?? ?
二、sql99語法:通過join關鍵字實現(xiàn)連接
?? ?含義:1999年推出的sql語法
?? ?支持:
?? ?等值連接、非等值連接 (內(nèi)連接)
?? ?外連接
?? ?交叉連接
?? ?
?? ?語法:
?? ?
?? ?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 排序的字段或表達式】
?? ?
?? ?好處:語句上,連接條件和篩選條件實現(xiàn)了分離,簡潔明了!
?? ?
三、自連接
案例:查詢員工名和直接上級的名稱
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語句,稱為子查詢或內(nèi)查詢
?? ?在外面的查詢語句,稱為主查詢或外查詢
特點:
?? ?1、子查詢都放在小括號內(nèi)
?? ?2、子查詢可以放在from后面、select后面、where后面、having后面,但一般放在條件的右側(cè)
?? ?3、子查詢優(yōu)先于主查詢執(zhí)行,主查詢使用了子查詢的執(zhí)行結(jié)果
?? ?4、子查詢根據(jù)查詢結(jié)果的行數(shù)不同分為以下兩類:
?? ?① 單行子查詢
?? ??? ?結(jié)果集只有一行
?? ??? ?一般搭配單行操作符使用:> < = <> >= <=?
?? ??? ?非法使用子查詢的情況:
?? ??? ?a、子查詢的結(jié)果為一組值
?? ??? ?b、子查詢的結(jié)果為空
?? ??? ?
?? ?② 多行子查詢
?? ??? ?結(jié)果集有多行
?? ??? ?一般搭配多行操作符使用:any、all、in、not in
?? ??? ?in: 屬于子查詢結(jié)果中的任意一個就行
?? ??? ?any和all往往可以用其他查詢代替
##進階8:分頁查詢
應用場景:
?? ?實際的web項目中需要根據(jù)用戶的需求提交對應的分頁查詢的sql語句
語法:
?? ?select 字段|表達式,...
?? ?from 表
?? ?【where 條件】
?? ?【group by 分組字段】
?? ?【having 條件】
?? ?【order by 排序的字段】
?? ?limit 【起始的條目索引,】條目數(shù);
特點:
?? ?1.起始條目索引從0開始
?? ?
?? ?2.limit子句放在查詢語句的最后
?? ?
?? ?3.公式:select * from ?表 limit (page-1)*sizePerPage,sizePerPage
?? ?假如:
?? ?每頁顯示條目數(shù)sizePerPage
?? ?要顯示的頁數(shù) page
##進階9:聯(lián)合查詢
引入:
?? ?union 聯(lián)合、合并
語法:
?? ?select 字段|常量|表達式|函數(shù) 【from 表】 【where 條件】 union 【all】
?? ?select 字段|常量|表達式|函數(shù) 【from 表】 【where 條件】 union 【all】
?? ?select 字段|常量|表達式|函數(shù) 【from 表】 【where 條件】 union ?【all】
?? ?.....
?? ?select 字段|常量|表達式|函數(shù) 【from 表】 【where 條件】
特點:
?? ?1、多條查詢語句的查詢的列數(shù)必須是一致的
?? ?2、多條查詢語句的查詢的列的類型幾乎相同
?? ?3、union代表去重,union all代表不去重
?
?
- ?
基礎查詢
一、語法
select查詢列表
from表名;
二、特點
1、查詢列表可以是字段、常量、表達式、函數(shù),也可以是多個
2、查詢結(jié)果是- -個虛擬表
三、示例
1、查詢單個字段
select字段名from 表名;
2、查詢多個字段
select字段名,字段名from表名;
3、查詢所有字段
select * from表名
4、查詢常量
select常量值;
注意:字符型和日期型的常量值必須用單引號引起來,數(shù)值型不需要
5、查詢函數(shù)
select函數(shù)名(實參列表) ;
6、查詢表達式
select 100/1234;
7、起別名
①as
②空格
8、去重
select distinct字段名from 表名:
9、+
作用:做加法運算
select數(shù)值+數(shù)值;直接運算
select字符+數(shù)值;先試圖將字符轉(zhuǎn)換成數(shù)值,如果轉(zhuǎn)換成功,則繼續(xù)運算;否則轉(zhuǎn)換成0,再做運算
select nul1+值;結(jié)果都為null
10、[補充] concat函數(shù)
功能:拼接字符
select concat(字符1,字符2,字符...:
11、[補充] ifnul1函數(shù)
功能:判斷某字段或表達式是否為null,如果為null返回指定的值,否則返回原本的值
select ifnull (comission. pct,0) from employees;
12、[補充] isnu11函數(shù)
功能:判斷某字段或表達式是否為null,如果是,則返回1,否則返回0
條件查詢
一、語法
select查詢列表
from表名
where
篩選條件
二、篩選條件的分類
1、簡單條件運算符
> <= <> !=>= <= <=>安全等于
2、邏輯運算符
&& and
|I or
! not
3、模糊查詢
like:一般搭配通配符使用,可以判斷字符型或數(shù)值型
通配符: %任意多個字符,_任意單個字符
between and
in
is null /is not mull:用于判斷nul1值
is null PK <=>
? ? ? ? ? ? ? ? ? ? ? ? ?普通類型的數(shù)值? ? ? ? ? ?null值? ? ? ? ? ? ? ? ? 可讀性
? ? is null? ? ? ? ? ? ? ? ? ? ?否? ? ? ? ? ? ? ? ? ? ? ? 是? ? ? ? ? ? ? ? ? ? ? ? ? 是
? ? <=>? ? ? ? ? ? ? ? ? ? ? ?是? ? ? ? ? ? ? ? ? ? ? ? 是? ? ? ? ? ? ? ? ? ? ? ? ? 否
總結(jié)
以上是生活随笔為你收集整理的MySQL DQL语言的笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java文件名特殊字符_Java 8:用
- 下一篇: shell 脚本比较字符串相等_shel