日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

常见查询语句

發布時間:2024/5/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常见查询语句 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

條件查詢

/*

語法:
select
查詢列表
from
表名
where
篩選條件;

分類:
一、按條件表達式篩選

簡單條件運算符:> < = != <> >= <=二、按邏輯表達式篩選 邏輯運算符: 作用:用于連接條件表達式&& || !and or not&&和and:兩個條件都為true,結果為true,反之為false ||或or: 只要有一個條件為true,結果為true,反之為false !或not: 如果連接的條件本身為false,結果為true,反之為false三、模糊查詢likebetween andinis null

*/
#一、按條件表達式篩選

#案例1:查詢工資>12000的員工信息

SELECT
*
FROM
employees
WHERE
salary>12000;

#案例2:查詢部門編號不等于90號的員工名和部門編號
SELECT
last_name,
department_id
FROM
employees
WHERE
department_id<>90;

#二、按邏輯表達式篩選

#案例1:查詢工資z在10000到20000之間的員工名、工資以及獎金
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary>=10000 AND salary<=20000;
#案例2:查詢部門編號不是在90到110之間,或者工資高于15000的員工信息
SELECT
*
FROM
employees
WHERE
NOT(department_id>=90 AND department_id<=110) OR salary>15000;
#三、模糊查詢
/*
like

between and
in
is null|is not null

/
#1.like
/
特點:
①一般和通配符搭配使用
通配符:
% 任意多個字符,包含0個字符
_ 任意單個字符
*、

#案例1:查詢員工名中包含字符a的員工信息

select
*
from
employees
where
last_name like ‘%a%’;#abc
#案例2:查詢員工名中第三個字符為e,第五個字符為a的員工名和工資
select
last_name,
salary
FROM
employees
WHERE
last_name LIKE ‘__n_l%’;

#案例3:查詢員工名中第二個字符為_的員工名

SELECT
last_name
FROM
employees
WHERE
last_name LIKE ‘_KaTeX parse error: Expected group after '_' at position 1: _?%' ESCAPE '’;
#2.between and
/*
①使用between and 可以提高語句的簡潔度
②包含臨界值
③兩個臨界值不要調換順序

*/

#案例1:查詢員工編號在100到120之間的員工信息

SELECT
*
FROM
employees
WHERE
employee_id >= 120 AND employee_id<=100;
#----------------------
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 120 AND 100;

#3.in
/*
含義:判斷某字段的值是否屬于in列表中的某一項
特點:
①使用in提高語句簡潔度
②in列表的值類型必須一致或兼容
③in列表中不支持通配符

*/
#案例:查詢員工的工種編號是 IT_PROG、AD_VP、AD_PRES中的一個員工名和工種編號

SELECT
last_name,
job_id
FROM
employees
WHERE
job_id = ‘IT_PROT’ OR job_id = ‘AD_VP’ OR JOB_ID =‘AD_PRES’;

#------------------

SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN( ‘IT_PROT’ ,‘AD_VP’,‘AD_PRES’);

#4、is null
/*
=或<>不能用于判斷null值
is null或is not null 可以判斷null值

*/

#案例1:查詢沒有獎金的員工名和獎金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL;

#案例1:查詢有獎金的員工名和獎金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NOT NULL;

#----------以下為×
SELECT
last_name,
commission_pct
FROM
employees

WHERE
salary IS 12000;

#安全等于 <=>

#案例1:查詢沒有獎金的員工名和獎金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct <=>NULL;

#案例2:查詢工資為12000的員工信息
SELECT
last_name,
salary
FROM
employees

WHERE
salary <=> 12000;

#is null pk <=>

IS NULL:僅僅可以判斷NULL值,可讀性較高,建議使用
<=> :既可以判斷NULL值,又可以判斷普通的數值,可讀性較低

#1. 顯示系統時間(注:日期+時間)
SELECT NOW();

#2. 查詢員工號,姓名,工資,以及工資提高百分之20%后的結果(new salary)

SELECT employee_id,last_name,salary,salary*1.2 “new salary”
FROM employees;
#3. 將員工的姓名按首字母排序,并寫出姓名的長度(length)

SELECT LENGTH(last_name) 長度,SUBSTR(last_name,1,1) 首字符,last_name
FROM employees
ORDER BY 首字符;

#4. 做一個查詢,產生下面的結果
<last_name> earns monthly but wants <salary*3>
Dream Salary
King earns 24000 monthly but wants 72000

SELECT CONCAT(last_name,’ earns ‘,salary,’ monthly but wants ',salary*3) AS “Dream Salary”
FROM employees
WHERE salary=24000;

分組查詢

#1.查詢各job_id的員工工資的最大值,最小值,平均值,總和,并按job_id升序

SELECT MAX(salary),MIN(salary),AVG(salary),SUM(salary),job_id
FROM employees
GROUP BY job_id
ORDER BY job_id;

#2.查詢員工最高工資和最低工資的差距(DIFFERENCE)
SELECT MAX(salary)-MIN(salary) DIFFRENCE
FROM employees;
#3.查詢各個管理者手下員工的最低工資,其中最低工資不能低于6000,沒有管理者的員工不計算在內
SELECT MIN(salary),manager_id
FROM employees
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING MIN(salary)>=6000;

#4.查詢所有部門的編號,員工數量和工資平均值,并按平均工資降序
SELECT department_id,COUNT(),AVG(salary) a
FROM employees
GROUP BY department_id
ORDER BY a DESC;
#5.選擇具有各個job_id的員工人數
SELECT COUNT() 個數,job_id
FROM employees
GROUP BY job_id;

排序查詢

#1.查詢員工的姓名和部門號和年薪,按年薪降序 按姓名升序

SELECT last_name,department_id,salary12(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 DESC,last_name ASC;

#2.選擇工資不在8000到17000的員工的姓名和工資,按工資降序
SELECT last_name,salary
FROM employees

WHERE salary NOT BETWEEN 8000 AND 17000
ORDER BY salary DESC;

#3.查詢郵箱中包含e的員工信息,并先按郵箱的字節數降序,再按部門號升序

SELECT *,LENGTH(email)
FROM employees
WHERE email LIKE ‘%e%’
ORDER BY LENGTH(email) DESC,department_id ASC;

分組查詢

語法:

select 查詢列表
from 表
【where 篩選條件】
group by 分組的字段
【order by 排序的字段】;

特點:
1、和分組函數一同查詢的字段必須是group by后出現的字段
2、篩選分為兩類:分組前篩選和分組后篩選
針對的表 位置 連接的關鍵字
分組前篩選 原始表 group by前 where

分組后篩選 group by后的結果集 group by后 having

問題1:分組函數做篩選能不能放在where后面
答:不能

問題2:where——group by——having

一般來講,能用分組前篩選的,盡量使用分組前篩選,提高效率

3、分組可以按單個字段也可以按多個字段
4、可以搭配著排序使用

#1.查詢公司員工工資的最大值,最小值,平均值,總和

SELECT MAX(salary) 最大值,MIN(salary) 最小值,AVG(salary) 平均值,SUM(salary) 和
FROM employees;
#2.查詢員工表中的最大入職時間和最小入職時間的相差天數 (DIFFRENCE)

SELECT MAX(hiredate) 最大,MIN(hiredate) 最小,(MAX(hiredate)-MIN(hiredate))/1000/3600/24 DIFFRENCE
FROM employees;

SELECT DATEDIFF(MAX(hiredate),MIN(hiredate)) DIFFRENCE
FROM employees;

SELECT DATEDIFF(‘1995-2-7’,‘1995-2-6’);

#3.查詢部門編號為90的員工個數

SELECT COUNT(*) FROM employees WHERE department_id = 90;

#引入:查詢每個部門的員工個數

SELECT COUNT(*) FROM employees WHERE department_id=90;
#1.簡單的分組

#案例1:查詢每個工種的員工平均工資
SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id;

#案例2:查詢每個位置的部門個數

SELECT COUNT(*),location_id
FROM departments
GROUP BY location_id;

#2、可以實現分組前的篩選

#案例1:查詢郵箱中包含a字符的 每個部門的最高工資

SELECT MAX(salary),department_id
FROM employees
WHERE email LIKE ‘%a%’
GROUP BY department_id;

#案例2:查詢有獎金的每個領導手下員工的平均工資

SELECT AVG(salary),manager_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY manager_id;

#3、分組后篩選

#案例:查詢哪個部門的員工個數>5

#①查詢每個部門的員工個數
SELECT COUNT(*),department_id
FROM employees
GROUP BY department_id;

#② 篩選剛才①結果

SELECT COUNT(*),department_id
FROM employees

GROUP BY department_id

HAVING COUNT(*)>5;

#案例2:每個工種有獎金的員工的最高工資>12000的工種編號和最高工資

SELECT job_id,MAX(salary)
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING MAX(salary)>12000;

#案例3:領導編號>102的每個領導手下的最低工資大于5000的領導編號和最低工資

manager_id>102

SELECT manager_id,MIN(salary)
FROM employees
GROUP BY manager_id
HAVING MIN(salary)>5000;

#4.添加排序

#案例:每個工種有獎金的員工的最高工資>6000的工種編號和最高工資,按最高工資升序

SELECT job_id,MAX(salary) m
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING m>6000
ORDER BY m ;

#5.按多個字段分組

#案例:查詢每個工種每個部門的最低工資,并按最低工資降序

SELECT MIN(salary),job_id,department_id
FROM employees
GROUP BY department_id,job_id
ORDER BY MIN(salary) DESC;

常見函數

#進階4:常見函數

/*

概念:類似于java的方法,將一組邏輯語句封裝在方法體中,對外暴露方法名
好處:1、隱藏了實現細節 2、提高代碼的重用性
調用:select 函數名(實參列表) 【from 表】;
特點:
①叫什么(函數名)
②干什么(函數功能)

分類:
1、單行函數
如 concat、length、ifnull等
2、分組函數

功能:做統計使用,又稱為統計函數、聚合函數、組函數

常見函數:
一、單行函數
字符函數:
length:獲取字節個數(utf-8一個漢字代表3個字節,gbk為2個字節)
concat
substr
instr
trim
upper
lower
lpad
rpad
replace

數學函數: round ceil floor truncate mod日期函數: now curdate curtime year month monthname day hour minute second str_to_date date_format 其他函數: version database user 控制函數 if case

*/

#一、字符函數

#1.length 獲取參數值的字節個數
SELECT LENGTH(‘john’);
SELECT LENGTH(‘張三豐hahaha’);

SHOW VARIABLES LIKE ‘%char%’

#2.concat 拼接字符串

SELECT CONCAT(last_name,’_’,first_name) 姓名 FROM employees;

#3.upper、lower
SELECT UPPER(‘john’);
SELECT LOWER(‘joHn’);
#示例:將姓變大寫,名變小寫,然后拼接
SELECT CONCAT(UPPER(last_name),LOWER(first_name)) 姓名 FROM employees;

#4.substr、substring
注意:索引從1開始
#截取從指定索引處后面所有字符
SELECT SUBSTR(‘李莫愁愛上了陸展元’,7) out_put;

#截取從指定索引處指定字符長度的字符
SELECT SUBSTR(‘李莫愁愛上了陸展元’,1,3) out_put;

#案例:姓名中首字符大寫,其他字符小寫然后用_拼接,顯示出來

SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),’_’,LOWER(SUBSTR(last_name,2))) out_put
FROM employees;

#5.instr 返回子串第一次出現的索引,如果找不到返回0

SELECT INSTR(‘楊不殷六俠悔愛上了殷六俠’,‘殷八俠’) AS out_put;

#6.trim

SELECT LENGTH(TRIM(’ 張翠山 ')) AS out_put;

SELECT TRIM(‘aa’ FROM ‘aaaaaaaaa張aaaaaaaaaaaa翠山aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa’) AS out_put;

#7.lpad 用指定的字符實現左填充指定長度

SELECT LPAD(‘殷素素’,2,’*’) AS out_put;

#8.rpad 用指定的字符實現右填充指定長度

SELECT RPAD(‘殷素素’,12,‘ab’) AS out_put;

#9.replace 替換

SELECT REPLACE(‘周芷若周芷若周芷若周芷若張無忌愛上了周芷若’,‘周芷若’,‘趙敏’) AS out_put;

#二、數學函數

#round 四舍五入
SELECT ROUND(-1.55);
SELECT ROUND(1.567,2);

#ceil 向上取整,返回>=該參數的最小整數

SELECT CEIL(-1.02);

#floor 向下取整,返回<=該參數的最大整數
SELECT FLOOR(-9.99);

#truncate 截斷

SELECT TRUNCATE(1.69999,1);

#mod取余
/*
mod(a,b) : a-a/b*b

mod(-10,-3):-10- (-10)/(-3)*(-3)=-1
*/
SELECT MOD(10,-3);
SELECT 10%3;

#三、日期函數

#now 返回當前系統日期+時間
SELECT NOW();

#curdate 返回當前系統日期,不包含時間
SELECT CURDATE();

#curtime 返回當前時間,不包含日期
SELECT CURTIME();

#可以獲取指定的部分,年、月、日、小時、分鐘、秒
SELECT YEAR(NOW()) 年;
SELECT YEAR(‘1998-1-1’) 年;

SELECT YEAR(hiredate) 年 FROM employees;

SELECT MONTH(NOW()) 月;
SELECT MONTHNAME(NOW()) 月;

#str_to_date 將字符通過指定的格式轉換成日期

SELECT STR_TO_DATE(‘1998-3-2’,’%Y-%c-%d’) AS out_put;

#查詢入職日期為1992–4-3的員工信息
SELECT * FROM employees WHERE hiredate = ‘1992-4-3’;

SELECT * FROM employees WHERE hiredate = STR_TO_DATE(‘4-3 1992’,’%c-%d %Y’);

#date_format 將日期轉換成字符

SELECT DATE_FORMAT(NOW(),’%y年%m月%d日’) AS out_put;

#查詢有獎金的員工名和入職日期(xx月/xx日 xx年)
SELECT last_name,DATE_FORMAT(hiredate,’%m月/%d日 %y年’) 入職日期
FROM employees
WHERE commission_pct IS NOT NULL;

#四、其他函數

SELECT VERSION();
SELECT DATABASE();
SELECT USER();

#五、流程控制函數
#1.if函數: if else 的效果

SELECT IF(10<5,‘大’,‘小’);

SELECT last_name,commission_pct,IF(commission_pct IS NULL,‘沒獎金,呵呵’,‘有獎金,嘻嘻’) 備注
FROM employees;

#2.case函數的使用一: switch case 的效果

/*
java中
switch(變量或表達式){
case 常量1:語句1;break;

default:語句n;break;

}

mysql中

case 要判斷的字段或表達式
when 常量1 then 要顯示的值1或語句1;
when 常量2 then 要顯示的值2或語句2;

else 要顯示的值n或語句n;
end
*/

/*案例:查詢員工的工資,要求

部門號=30,顯示的工資為1.1倍
部門號=40,顯示的工資為1.2倍
部門號=50,顯示的工資為1.3倍
其他部門,顯示的工資為原工資

*/

SELECT salary 原始工資,department_id,
CASE department_id
WHEN 30 THEN salary1.1
WHEN 40 THEN salary1.2
WHEN 50 THEN salary*1.3
ELSE salary
END AS 新工資
FROM employees;

#3.case 函數的使用二:類似于 多重if
/*
java中:
if(條件1){
語句1;
}else if(條件2){
語句2;
}

else{
語句n;
}

mysql中:

case
when 條件1 then 要顯示的值1或語句1
when 條件2 then 要顯示的值2或語句2
。。。
else 要顯示的值n或語句n
end
*/

#案例:查詢員工的工資的情況
如果工資>20000,顯示A級別
如果工資>15000,顯示B級別
如果工資>10000,顯示C級別
否則,顯示D級別

SELECT salary,
CASE
WHEN salary>20000 THEN ‘A’
WHEN salary>15000 THEN ‘B’
WHEN salary>10000 THEN ‘C’
ELSE ‘D’
END AS 工資級別
FROM employees;

總結

以上是生活随笔為你收集整理的常见查询语句的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。