MySQL數據庫查詢語句

在我們做開發使用數據庫的過程中,增刪改查是基本操作,在這些操作中,查是重中之重,今天我們說一下查詢語句
這裏是我們接下來將要用到的數據表
數據表

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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章