##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 否 是 是
<=> 是 是 否