在我們做開發使用數據庫的過程中,增刪改查是基本操作,在這些操作中,查是重中之重,今天我們說一下查詢語句
這裏是我們接下來將要用到的數據表
1基本格式
select 查詢內容 from 從哪裏查;
– 查詢內容 字段名 列名
– 從哪裏查 表名
1.1 基本查詢,字段表名
– * 所有字段全部展示
– 不建議,如果採用select * 方式整個數據庫數據的時間非常長,浪費資源
select * from t_employees;
– 查詢指定的字段
select EMPLOYEE_ID, FIRST_NAME, LAST_NAME from t_employees;
1.2 查詢結果字段進行數據計算
– 查詢員工ID號,員工的名字(FristName LastName) 用戶年限
select EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY * 12
from t_employees;
– 這裏允許使用+ - * / 可以完成字段和字段直接的算術運算
– %在SQL語句中不是取餘,而是佔位符!!
1.3 去重查詢 distinct
– 查詢結果中存在相同內容,第二個數據不要
select distinct MANAGER_ID
from t_employees;
– 不去重
select MANAGER_ID
from t_employees;
1.4 字段別名
– 字段名 as ‘別名’
select EMPLOYEE_ID as 'ID', FIRST_NAME as '名',
LAST_NAME as '姓', SALARY * 12 as '年薪'
from t_employees;
2.排序查詢order by
規則 | 效果 |
---|---|
asc | 指定條件升序 |
desc | 指定條件降序 |
– 基本格式
select fieldName from tbName order by fieldName asc/desc;
– 在查詢結果展示中,按照執行的字段作爲標記完成升序和降序
2.1單一條件排序
select EMPLOYEE_ID, FIRST_NAME, SALARY
-- 查詢展示的字段有哪些
from t_employees -- 從哪裏查詢
order by SALARY asc ; -- order by 指定字段要求排序 升序
select EMPLOYEE_ID, FIRST_NAME, SALARY -- 查詢展示的字段有哪些
from t_employees -- 從哪裏查詢
order by SALARY desc ; -- order by 指定字段要求排序 降序
2.2 多字段條件排序
– 第一條件是工資降序,當第一條件出現一致情況下,使用第二條件進行二次排序
select EMPLOYEE_ID, FIRST_NAME, SALARY -- 查詢展示的字段有哪些
from t_employees -- 從哪裏查詢
order by SALARY desc, EMPLOYEE_ID desc; -- order by 指定字段要求排序 工資降序 ID降序
3. 條件查詢 where
基本格式
select fieldName from tbName where condition;
– 從指定數據表中,按照where之後指定條件,查詢對應的字段數據
– where條件是一個是一個boolean類型結果
3.1 等值判斷 =
– Java等於判斷是用的是 == 或者更嚴謹的情況,會使用equals
– 數據庫中使用 = 在where條件之後是一個等值判斷
– 查詢在員工表內容,工資等於11000 對應的id號,名,和工資
select EMPLOYEE_ID, FIRST_NAME, SALARY
from t_employees
where SALARY = 11000;
3.2 不等值判斷(> < >= <= != <>)
– 查詢在員工表內容,工資大於10000 對應的id號,名,和工資
select EMPLOYEE_ID, FIRST_NAME, SALARY
from t_employees
where SALARY > 10000;
– 查詢在員工表內容,工資大於10000 對應的id號,名,和工資
select EMPLOYEE_ID, FIRST_NAME, SALARY
from t_employees
where SALARY >= 10000;
– 查詢在員工表內容,部門ID不等於80 對應的id號,名,工資和部門ID
select EMPLOYEE_ID, FIRST_NAME, SALARY,
DEPARTMENT_ID
from t_employees
where DEPARTMENT_ID <> 80;
– 查詢在員工表內容,部門ID不等於80 對應的id號,名,工資和部門ID
select EMPLOYEE_ID, FIRST_NAME, SALARY, DEPARTMENT_ID
from t_employees
where DEPARTMENT_ID != 80;
3.3 邏輯判斷(and, or, not)
– 查詢在員工表內容,要求工資大於10000並且部門編號爲80 對應的ID號,名,工資和部門ID
select EMPLOYEE_ID, FIRST_NAME, SALARY, DEPARTMENT_ID
from t_employees
where SALARY > 10000 and DEPARTMENT_ID = 80;
– 查詢在員工表內容,要求工資小於2500或者部門編號爲90對應的ID號,名,工資和部門ID
select EMPLOYEE_ID, FIRST_NAME, SALARY,
DEPARTMENT_ID
from t_employees
where SALARY < 2500 or DEPARTMENT_ID = 90;
3.4 區間 between and
– 要求between min and max 在min <==> max範圍以內,而且要求小值之前,大值不然會報
– 錯,這裏區間範圍是包含指定的邊界
– 區間範圍
select EMPLOYEE_ID, FIRST_NAME, SALARY
from t_employees
where SALARY between 8000 and 10000;
3.5 NULL值判斷
– is null 指定當前的字段是null
– is not null 指定當前字段不是null
– 找出所有提成爲null的數據
select FIRST_NAME, COMMISSION_PCT
from t_employees
where COMMISSION_PCT is null;
– 找出所有提成不是null的數據
select FIRST_NAME, COMMISSION_PCT
from t_employees
where COMMISSION_PCT is not null;
3.6 枚舉查詢in
– 查詢部門編號爲60, 70, 90員工名字和對應部門編號
– in查詢效率較低,推薦使用多條件拼接完成查詢操作
select FIRST_NAME, DEPARTMENT_ID
from t_employees
where DEPARTMENT_ID in(70, 60, 90);
3.7 模糊查詢like
– LIKE
– _ 匹配一個字符
– % 匹配任意長度字符
– 查詢FIRST_NAME,要求FIRST_NAME字段D字母開頭後面有4個字符
select FIRST_NAME
from t_employees
where FIRST_NAME like 'D____';
– -- 查詢FIRST_NAME,要求FIRST_NAME字段帶有D字母就可以,而且不區分大小寫
select FIRST_NAME
from t_employees
where FIRST_NAME like '%D%';
3.8 分支結構查詢
case
when condition1 then ret1
when condition2 then ret2
when condition3 then ret3
end
– 從case開始,到end結束。滿足條件對應一個結果,類似於Java中的switch case
– 查詢姓名,工資已經對應工資劃分的等級LEVEL
select FIRST_NAME, SALARY,
case
when SALARY >= 10000 then 'A'
when SALARY >= 8000 and SALARY < 10000 then
'B'
when SALARY >= 6000 and SALARY < 8000 then
'C'
when SALARY >= 4000 and SALARY < 6000 then
'D'
else 'E'
end as 'LEVEL'
from t_employees;
4. 時間查詢
– 語法
select 時間函數([參數列表]);
– 查詢時間情況下,得到的是一個單列單表(虛表)
時間函數 | 功能描述 |
---|---|
sysdate() | 當前系統時間(年,月,日,時,分,秒) |
CURRENT_TIMESTAMP() | 當前系統時間(日,月,年,時,分,秒) |
curdate() | 當前日期 |
curtime() | 當前時間 |
week() | 指定日期是這一年的第幾周 |
hour() | 指定日期是今天第幾個小時 |
minite() | 指定日期是小時的第幾分鐘 |
second() | 指定日期是分鐘的第幾秒 |
select sysdate();
select CURRENT_TIMESTAMP();
select curdate();
select curtime();
select week('2019-11-23');
select now();
select second(sysdate());
select minute(sysdate());
select hour(sysdate());
5. 字符串應用
方法 | 功能描述 |
---|---|
concat(str1, str2, str3…) | 拼接多個字符串 |
insert(str, pos, len, newStr) | 在指定字符串位置pos,長度限制len,插入新字符串 |
lower(str) | 大寫轉小寫 |
upper(str) | 小寫轉大寫 |
substring(str,pos, len) | 指定字符串,從pos位置開始,長度限制len |
select concat('你好', ' MySQL', ' Oracle公司產
品');
select insert('ABCDEFG', 3, 3, '你好');
select upper('abcdefg');
select lower('ABCDEF');
select substring('ABCDEFG', 2, 5);
6.內置方法
方法 | 功能描述 |
---|---|
sum() | 指定字段一列總和 |
avg() | 指定字段一列平均值 |
max() | 指定字段一列中的最大值 |
min() | 指定子段一列中的最小值 |
count() | 指定字段有多少行 |
-- 工資總和
select sum(SALARY)
from t_employees;
-- 工資平均數
select avg(SALARY)
from t_employees;
-- 工資最大值
select max(SALARY)
from t_employees;
-- 工資最小值
select min(SALARY)
from t_employees;
-- 當前有多少員工計數
select count(*)
from t_employees;
-- 當前有多少員工計數
-- count(1) 蜜汁比count(*) 快一點
select count(1)
from t_employees;
-- 統計有多少人有績效
select count(COMMISSION_PCT)
from t_employees;