注意點mysql
select 指定表.字段 from 表1,表2正則表達式
四則運算包括加減乘除sql
select 字段1 四則運行符號 字段2 from 表名稱數據庫
語法:select 函數(字段1) from 表名稱函數
統計函數code
比較運算符 | 介紹 |
---|---|
<,<=,>,>=,=,!= | 小於,小於等於,大於,大於等於,等於,不等於 |
in(set) | 成員運算,看值有沒有再列表裏面 |
like | 模糊查找:%表明零個或多個字符,_表明一個字符 |
is null | 判斷是否爲空 |
between A and B | 顯示某個區間:A-B 包括A和B |
邏輯運算符 | 介紹 |
and | 且,多個條件同時知足 |
or | 或者,知足多個條件其中一條 |
not | 不成立 |
binaryregexp
區分大小寫對象
語法:select 段落 from 代表 where binary 字段....................................排序
分組it
語法
select....from 表名
where .......
group by 字段名稱 #若是這裏有多個字段,A,B,用,鏈接表示具備相同字段A以及相同字段B進行分組
having 判斷內容
注意:
排序
語法:默認爲升序
ord by 字段名稱
固定升序或者降序
多個條件排序主次關係
ord by 主字段,次字段
限制顯示記錄
對於單頁表操做
limit start count
對於多頁操做
分頁原理:先查詢總數據條數 設爲a
肯定每頁數量b
總頁數爲c = a / b 若是除不盡則須要加1 例如 10 / 3 正確頁數爲4
查詢語句的起始位置爲s = 當前頁數d 減去1 乘以每頁數量
即 s = (d - 1) * b
limit s b
語法 :where 字段名稱 regexp '正則表達式'
注意:正則表達式不包括特殊字符如\w
語法:select *from 表1,表2
他會把多個表每行與另外個表通通匹配上,其中會有一些髒數據,咱們能夠用裏面值的關係進行鏈接
其本質就是笛卡爾積查詢
區別是把,變成 join
且不能用where,要先用on根據裏面值的關係拼接好了再用 where
左表中記錄的不管是否有匹配關係都所有顯示,右表中僅顯示匹配成功的記錄
語法:select *from 表1 left join,表2
右表中記錄的不管是否有匹配關係都所有顯示,左表中僅顯示匹配成功的記錄
語法:select *from 表1 right join 表2
不管是否匹配成功,兩邊表中的記錄都要所有顯示
select *from 表1 full join 表2
注意:mysql 不支持
咱們要引入union
union 只能用於字段數量相同的兩個表 會自動去除重複的記錄
union all 則保留全部記錄
select from dept left join emp on dept.id=emp.dept_id
union
select from dept right join emp on dept.id=emp.dept_id;
能夠完成全外鏈接
在三表以及三表以上查詢的時候,表1 join 表2 join 表三,其意思是表1與表2鏈接後的表再與表3進行鏈接
若是三表鏈接時候沒有用join而是用,
進行鏈接表示同時查詢3個表
將查找後的內容做爲查找的值或者查找的對象,
若是要做爲一個表看成查找對象,要對於查找後的表進行重命名語法以下
select .... from (select ....from .......) as 新名字
"查詢平均年齡大於25的部門名稱 子查詢方式: 平均年齡大於25的部門id有哪些? 先要求出每一個部門的平年齡! 篩選出平均年齡大於25的部門id 拿着部門id 去查詢部門表查詢" select name from dept where id in (select dept_id from emp group by dept_id having avg(age) > 25); "多表查詢方式: 先把數據拼接到一塊兒 在加以篩選" select dept.name from emp inner join dept on emp.dept_id = dept.id group by dept.name having avg(age) >25;
xists 後跟子查詢 子查詢有結果是爲True 沒有結果時爲False
爲true時外層執行 爲false外層不執行
select *from emp where exists (select *from emp where salary > 1000); #查看exists 的返回結果: 只有 0 和 1 select (exists (select *from emp where salary > 10000)); #一個查詢結果也是一個表 既然是表就能連接起來 #綜合練習: "查詢每一個部門工資最高的員工信息 先查詢每一個部門的最高工資 將查詢結果與員工表聯合起來 在加條件判斷部門id相同而且 最高工資相同 則顯示" select *from emp inner join (select dept_id,max(salary) m from emp group by dept_id) t2 on emp.dept_id = t2.dept_id where emp.salary = t2.m;