基本語法:select 查詢列表 from 表名 查詢列表可以是表中欄位、常量值、表達式、函數;查詢的結果是一個虛擬的表格。 註意: ①sql語言大小寫不敏感 ②關鍵字不能分行或略寫 ③一般書寫方式為換行縮進 一、基礎查詢 1.經典查詢(查詢表中的欄位) ①查詢單個欄位 select 欄位1 fro ...
基本語法:select 查詢列表 from 表名
查詢列表可以是表中欄位、常量值、表達式、函數;查詢的結果是一個虛擬的表格。
註意:
①sql語言大小寫不敏感
②關鍵字不能分行或略寫
③一般書寫方式為換行縮進
一、基礎查詢
1.經典查詢(查詢表中的欄位)
①查詢單個欄位
select 欄位1 from 表1;
②查詢多個欄位
select 欄位1,欄位2, . . .欄位n from表1;
③查詢所有欄位(用“”表示所有欄位或者用枚舉所有的欄位)
Select from 表1;
Select 欄位1,欄位2,欄位3,...,欄位last from 表1;
2.查詢常量值
select 520;
select ‘chenzui’;
3.查詢表達式
select 100/20;
4.查詢函數
select version();
5.起別名
①方式1用as
Select 100/20 as “結果”;
②方式2 用” ”空格
Select 100/20 結果;
6.去重distinct
SELECT DISTINCT department_id FROM employees;
7.mysql中+的功能(運算符)
①兩個都是數值型,做加法運算。Select 200+100;返回300。
②一個是字元型一個是數值型,將字元型轉換為數值型,若能轉換成功,則繼續運算,轉換失敗,將字元型轉換為0,繼續運算。
Select “120”+120;返回240;select “120aaa”+120;返回240;select “aaa120”+120;返回120。
③一方是null,結果返回null。select null+100;返回null。
二、條件查詢
語法:select 查詢列表 from 表名 where 篩序條件;
1.按條件表達式篩選
簡單條件運算符:>、<、=、 !=、<>、>=、<=
案例1 查詢工資大於1000的員工信息
Select * from employees where salary>1000;
案例2 查詢部門編號等於80,的員工名字和部門id
Select last_name,department_id from employees where department_id = 80;
2.邏輯表達式篩選
邏輯運算符
作用:用於連接條件表達式 && || ! and or not
and 或 && 兩個條件都為true,結果為true,否者返回false
or 或 || 只有一個條件為true,結果為true,否者為false
not 或 ! 連接條件本身為true,結果為false,否者為true
案例 查詢工資在10000-15000的員工名字和工資
Select last_name , salary from employees where salary>10000 and salary<15000;
3.模糊查詢
like、between and 、in、is null
①like 一般和通配符搭配使用
通配符:‘%’任意多個,包括0個,’_’任意單個。
案例1 查詢名字中包含”c”的員工信息
select * from employees where last_name like “%c%”;
案例2 查詢名字以a開頭第4個字母為z的員工信息
select * from employees where last_name like “a__z%”;
案例3 查詢第二個字元為””的員工名字
select last_name from employees where laset_name like “$_%”;
②between and 可以使sql語句更簡潔,包含臨界值,兩個臨界值不能調換順序
案例1 查詢員工編號在150-200之間的員工信息
select * from employees where employee_id between 150 and 120;
select * from employees where employee_id >=150 and employee_id <=120;
③in 判斷某段的值是否屬於in列表中的某一項,提高了代碼的簡潔度,in列表的值必須一致或者相容,in列表不支持通配符。
案例1 獲取工種編號為aaa、bbb、ccc中一個的員工信息
select * from employees where job_id in(“aaa”,’bbb’,’’ccc);
select * from employees where job_id=”aaa” or job_id = “bbb” or job_id = “ccc”;
④=或者<>不能判斷null值,is null和is not null 可以用於判斷null值
案例1 查詢沒有獎金的員工信息
select * from employees where commission_pct is null;
⑤<=>安全等於
查詢工資為10000的員工名字
Select last_name from employees where salary <=>10000;
⑥is null 和 <=>
is null:只可以判斷null值,可讀性較高
<=>:既可以判斷null值,又可以判斷普通數值,可讀性較差。
三、常見函數
1、單行函數
①字元函數:length(獲取位元組個數)、concat(拼接字元串)、upper(轉化成大寫)、lower(轉換為小寫)、substring、instr(返回字元串第一次出現的索引,不存在返回0)、trim(去除前後空格)、lpad(用指定字元實現左填充)、rpad(用指定的字元實現右填充)、replace(替換)
②數學函數
Round():四捨五入
Ceil():向上取整
Floor():向下取整
Truncate():截斷
Mod():取餘,mod(a,b) : a-a/bb
③日期函數
NOW():返回當前日期加時間
Curdate():返回當前日期
Curtime():返回當前時間
Str_to_date(字元類型,日期類型): 將字元類型轉換為日期類型
Date_format(日期類型,字元類型): 將日期類型轉換為字元類型;
④流程式控制制函數
if函數:其效果類似於if else
Case函數用法一[類似於switch用法]
語法:
Case 要判斷的欄位或者表達式
When 常量1 then 要顯示的值1或語句1;
When 常量2 then 要顯示的值2或語句2;
When 常量3 then 要顯示的值3或語句3;
…
Else 要顯示的值n或者語句n;
End
Case函數用法二[類似於多重if]
語法:
Case
When 條件1 then 要顯示的值1或語句1
When 條件2 then 要顯示的值2或語句2
…
Else 要顯示的值n或語句n
End
⑤其他函數
SELECT VERSION();
SELECT DATABASE();
SELECT USER();
2、分組函數(聚合函數、統計函數、組函數)
分類:
求和(sum)、avg(平均值)、max(最大值)、min(最小值)、count(計算個數)
特點:
①sum和avg一般處理數值型,max、min、count又可以處理任何類型
②分組函數都忽略null值
③可以和distinct搭配實現去重運算
④count()用於統計數量
⑤和分組函數一同查詢的欄位要求是group by後的欄位
案例1
select sum(salary) avg(salary) min(salary) max(salary) count(salary) from employees;
案例2 函數的適用性
SELECT SUM(last_name) ,AVG(last_name) FROM employees; 返回值是0,0
案例3 忽略null值
SELECT
SUM(commission_pct) ,AVG(commission_pct),SUM(commission_pct)/35,SUM(commission_pct)/107 FROM employees;
案例4 和distinct結合使用 會自動去重
SELECT SUM(DISTINCT salary),SUM(salary) FROM employees;
案例5 count()的使用
SELECT COUNT(salary) FROM employees;
SELECT COUNT() FROM employees;
SELECT COUNT(1) FROM employees;
案例6 和分組函數一同查詢的欄位有限制
SELECT AVG(salary),employee_id FROM employees;
四、排序查詢
語法:select 查詢列表 from 表名 [where 篩選條件] order by 排序的欄位或者表達式
1.排序函數的用法
①asc表示升序,可以省略,desc是降序
②order by可以支持單個欄位、別名、表達式、函數、多個欄位
③order by 子句在查詢語句最後面,除了limit子句
2.案例
select * from employees order by salary desc;
select * from employees where department_id >= 100 order by department_id;
SELECT last_name , salary12(1+IFNULL(commission_pct,0)) FROM employees ORDER BY salary12(1+IFNULL(commission_pct,0));
SELECT last_name , salary12(1+IFNULL(commission_pct,0))AS "年薪" FROM employees ORDER BY '年薪';
SELECT department_id,AVG(salary) FROM employees GROUP BY department_id ORDER BY AVG(salary);
SELECT last_name,salary FROM employees ORDER BY last_name DESC ,salary ASC;
五、group by
語法:select 欄位1,欄位2,… from 表名 [where 篩選條件] group by 欄位1,欄位2,..[having 篩選條件 limit 分頁條件];
查詢列表必須來自分組的欄位,保證邏輯的一致性。
使用方式:
①group by 和聚合函數配合使用得時候,分組後計算
Select avg(salary),last_name from employees group by department_id;
②與having配合使用得時候,分組後過濾;
Select department_id,min(salary) from employees group by department_id having salary>3000;
③group by中聚合函數同時和非聚合函數一起使用時,非聚合函數取第一個匹配到時的欄位內容。