MySQL 简单查询记录(二)
生活随笔
收集整理的這篇文章主要介紹了
MySQL 简单查询记录(二)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#查詢工資大于12000的員工
SELECT * FROM `employees` WHERE salary > 12000
#查詢部門編號(hào)不為90的員工姓名和部門
SELECT CONCAT(`first_name`,`last_name`) AS 姓名 ,`department_id` FROM `employees` WHERE `department_id` <> 90
#查詢工資在10000到20000的員工名、工資及獎(jiǎng)金
SELECT `last_name`,`salary`,`commission_pct` AS 獎(jiǎng)金 FROM employees WHERE salary >= 10000 AND salary <= 20000;
SELECT `last_name`,`salary`,`commission_pct` AS 獎(jiǎng)金 FROM employees WHERE salary BETWEEN 10000 AND 20000;
#查詢部門編號(hào)不是在90到110之間的,或者工資高于15000的員工信息
SELECT * FROM employees WHERE department_id < 90 OR department_id > 110 OR salary > 15000
SELECT * FROM employees WHERE NOT (department_id >= 90 AND department_id <= 110) OR salary > 15000
SELECT * FROM employees WHERE department_id NOT BETWEEN 90 AND 110 OR salary > 15000
#查詢員工名中包含字符a的員工信息
SELECT * FROM employees WHERE `last_name` LIKE '%a%'
#查詢員工名中第三個(gè)字符為n,第五個(gè)字符為l的員工名和工資
SELECT `last_name`,`salary` FROM employees WHERE `last_name` LIKE "__n_l%";
#查詢員工名中第二個(gè)字符為_的員工名 通過\轉(zhuǎn)義或者使用 ESCAPE 自定義轉(zhuǎn)義字符
SELECT `last_name` FROM employees WHERE `last_name` LIKE "_\_%";
SELECT `last_name` FROM employees WHERE `last_name` LIKE "_!_%" ESCAPE "!";
#查詢員工編號(hào)在100到120之間的員工信息
SELECT * FROM `employees` WHERE `employee_id` BETWEEN 100 AND 120
#查詢員工的工種編號(hào)是 IT_PROG、AD_VP、AD_PRES中的一個(gè)員工名和工種編號(hào)
SELECT * FROM `employees` WHERE `job_id` IN ('IT_PROG','AD_VP','AD_PRES');
#查詢沒有獎(jiǎng)金的員工名和獎(jiǎng)金率
SELECT `last_name`,`commission_pct` FROM `employees` WHERE `commission_pct` IS NULL
SELECT `last_name`,`commission_pct` FROM `employees` WHERE `commission_pct` <=> NULL
#查詢工資等于12000的員工 使用安全等于
SELECT * FROM `employees` WHERE salary <=> 12000
#查詢員工號(hào)為176的員工姓名和部門號(hào)和年薪
SELECT employee_id,last_name,department_id,salary*12*(1+IFNULL(commission_pct,0)) FROM employees WHERE employee_id = 176
#查詢沒有獎(jiǎng)金,且工資小于18000的salary,last_name
SELECT salary,last_name FROM employees WHERE commission_pct IS NULL AND salary < 18000
#查詢employees表中,job_id不為'IT'或者工資為12000的員工信息
SELECT * FROM employees WHERE job_id <> 'IT' OR salary = 12000
#查詢departments中涉及到哪些位置編號(hào)
SELECT DISTINCT location_id FROM departments;
#查詢員工的姓名和部門號(hào)和年薪,按年薪降序 按名字升序
SELECT last_name,department_id,salary*12*(1+IFNULL(commission_pct,0)) 年薪 FROM employees ORDER BY 年薪 DESC , last_name ASC
#選擇工資不在8000到17000的員工的姓名和工資,按工資降序
SELECT last_name,salary FROM employees WHERE salary<8000 OR salary >17000 ORDER BY salary DESC
SELECT last_name,salary FROM employees WHERE salary NOT BETWEEN 8000 AND 17000 ORDER BY salary DESC
#查詢郵箱中包含e的員工信息,并先按郵箱的字節(jié)數(shù)降序,再按部門號(hào)升序
SELECT * FROM employees WHERE email LIKE "%e%" ORDER BY LENGTH(email) DESC,department_id ASC
#常用函數(shù) 單行函數(shù)
#1、length() 獲取參數(shù)值的字節(jié)個(gè)數(shù)
SELECT LENGTH('joih'); #4
SELECT LENGTH('測試'); #6
#2、concat() 拼接字符串
SELECT CONCAT(last_name,"_",first_name) FROM employees;
#3、upper、大寫 lower小寫
SELECT UPPER('joih');
#示例:將姓變大寫、名變小寫、然后拼接
SELECT CONCAT(UPPER(last_name),LOWER(first_name)) AS 姓名 FROM employees;
#4、substr 截取字符 索引從1開始
#截取從指定索引處后面所有字符
SELECT SUBSTR("李莫愁愛上了陸展元",7) AS out_put #陸展元
#截取從指定索引處指定字符長度的字符
SELECT SUBSTR("李莫愁愛上了陸展元",1,3) AS out_put #李莫愁
#案例:姓名中首字符大寫,其他字符小寫然后用_拼接 顯示出來
SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),"_",LOWER(SUBSTR(last_name,2))) AS out_put FROM employees
#5、instr 第一次出現(xiàn)索引的位置 不存在返回0
SELECT INSTR("楊不悔愛上了殷六俠",'殷六俠');
#6、trim 去掉前后空格
SELECT TRIM(" 張翠山 ") AS out_put
SELECT TRIM('a' FROM "a張翠山a") AS out_put
#7、lpad 左填充 rpad 右填充
SELECT LPAD("殷素素",2,"*") AS out_put
SELECT RPAD("殷素素",12,"ab") AS out_put
#8、replace 替換
SELECT REPLACE("張無忌愛上了周芷若","周芷若","趙敏") AS out_put;
#常用函數(shù) 數(shù)學(xué)函數(shù)
#1、round 四舍五入
SELECT ROUND(1.5) #2
SELECT ROUND(1.5,2) #1.50 保留兩位小數(shù)
#2、ceil 向上取整 返回>=該參數(shù)的最小整數(shù)
SELECT CEIL(4.01) #5
SELECT CEIL(-4.01) #-4
#3、floor 向下取整 返回<=該參數(shù)的最大整數(shù)
SELECT FLOOR(4.01) #4
SELECT FLOOR(-4.01) #-5
#4、truncate 截?cái)?SELECT TRUNCATE(1.6991,1); #1.6
#5、mod 取余 mod(a,b) ==> a-a/b*b
SELECT MOD(10,3)
SELECT 10%3
#常用函數(shù) 日期函數(shù)
#1、now 返回當(dāng)前系統(tǒng)日期+時(shí)間
SELECT NOW();
#2、curdate 返回當(dāng)前系統(tǒng)日期不包含時(shí)間
SELECT CURDATE();
#3、curtime 返回當(dāng)前系統(tǒng)時(shí)間不包含日期
SELECT CURTIME();
#4、可以獲取指定的部分,年月日時(shí)分秒
SELECT YEAR(NOW()) #2018
SELECT YEAR("1993-1-1") #1993
SELECT MONTH(NOW()) #6
SELECT MONTHNAME(NOW()) #June
SELECT DAY(NOW())
SELECT HOUR(NOW())
SELECT MINUTE(NOW())
SELECT SECOND(NOW())
#5、str_to_date 將字符通過指定的格式轉(zhuǎn)換成日期
SELECT STR_TO_DATE("6/23/2018","%m/%d/%Y"); #2018-06-23
SELECT * FROM employees WHERE hiredate = '1992-4-3'
SELECT * FROM employees WHERE hiredate = STR_TO_DATE('4-3 1992',"%m-%d %Y");
#6、date_format 將日期轉(zhuǎn)換成字符串
SELECT DATE_FORMAT("1992-01-04","%Y年%m月%d日");
#案例 查詢有獎(jiǎng)金的員工名和入職日期(xx年/xx月 xx日)
SELECT last_name,DATE_FORMAT(hiredate,'%Y年/%m月/%d日') FROM employees WHERE commission_pct IS NOT NULL
#7、datediff 返回兩個(gè)日期相差的天數(shù)
SELECT DATEDIFF("2018-6-23","2018-6-21") #2
#常用函數(shù) 流程控制
#1、if()函數(shù)
SELECT IF(2>1,"大","小"); #大
SELECT last_name,commission_pct,IF(commission_pct IS NULL,"無獎(jiǎng)金","有獎(jiǎng)金") AS 備注 FROM employees;
#2、case 情況一
#案例:查詢員工的工資,要求
#部門號(hào)=30,顯示的工資為1.1
#部門號(hào)=40,顯示的工資為1.2
#部門號(hào)=50,顯示的工資為1.3
#其他部門顯示原工資
SELECT salary 原始工資,department_id,
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END AS 新工資 FROM employees
#case 情況二
#查詢員工的工資情況
#如果工資大于20000,顯示A級(jí)別
#如果工資大于15000,顯示B級(jí)別
#如果工資大于10000,顯示C級(jí)別
#否則顯示D級(jí)別
SELECT salary 工資,
CASE
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
ELSE 'D'
END AS 工資級(jí)別 FROM employees
#單行函數(shù)測試
#1、顯示系統(tǒng)時(shí)間(注:日期+時(shí)間)
SELECT NOW();
#2、查詢員工號(hào)、姓名、工資、以及工資提高百分之20%后的結(jié)果(new salary)
SELECT employee_id,last_name,salary,salary*1.2 AS 'new salary' FROM employees
#3、將員工的姓名按首字母排序,并寫出姓名的長度
SELECT SUBSTR(last_name,1,1) AS 首字符,LENGTH(last_name) AS 長度 FROM employees ORDER BY 首字符 ASC
#4、拼接
SELECT CONCAT(last_name," earns ",salary,' monthly but wants ',salary*3) AS "Dream Salary" FROM employees WHERE salary=24000;
#5、使用case-when,按照下面的條件
#job gread
#AD_PRES A
#ST_MAN B
#IT_PROG C
#SA_REP D
#ST_CLERK E
SELECT last_name,job_id AS job,CASE job_id
WHEN 'AD_PRES' THEN 'A'
WHEN 'ST_MAN' THEN 'B'
WHEN 'IT_PROG' THEN 'C'
WHEN 'SA_REP ' THEN 'D'
WHEN 'ST_CLERK' THEN 'E'
END AS gread FROM employees WHERE job_id = 'AD_PRES';
#常用函數(shù) 分組函數(shù)
SELECT SUM(salary) AS 總和, MAX(salary) AS 最大工資, MIN(salary) AS 最小工資, ROUND(AVG(salary),2) AS 平均工資, COUNT(salary) AS 個(gè)數(shù) FROM employees
SELECT SUM(DISTINCT salary),SUM(salary) FROM employees;
SELECT COUNT(DISTINCT salary),COUNT(salary) FROM employees;
#查詢員工工資的最大值、最小值、平均值、總和
SELECT MAX(salary),MIN(salary),ROUND(AVG(salary),2),SUM(salary) FROM employees
#查詢員工表中的最大入職日期和最小的入職日期相差的天數(shù)
SELECT DATEDIFF(MAX(hiredate),MIN(hiredate)) AS DIFFRENCE FROM employees;
#查詢部門編號(hào)為90的員工個(gè)數(shù)
SELECT COUNT(*) AS 個(gè)數(shù) FROM employees WHERE department_id = '90'
#查詢每個(gè)部門的平均工資
SELECT AVG(salary),department_id FROM employees GROUP BY department_id;
#查詢每個(gè)工種的最高工資
SELECT MAX(salary),job_id AS 工種 FROM employees GROUP BY job_id;
#查詢每個(gè)位置上的部門個(gè)數(shù)
SELECT COUNT(*),location_id FROM departments GROUP BY location_id;
#查詢郵箱中包含a字符的,每個(gè)部門的平均工資
SELECT AVG(salary),department_id FROM employees WHERE email LIKE "%a%" GROUP BY department_id
#查詢有獎(jiǎng)金的每個(gè)領(lǐng)導(dǎo)手下員工的最高工資
SELECT MAX(salary),manager_id FROM employees WHERE commission_pct IS NOT NULL GROUP BY manager_id;
#查詢哪個(gè)部門的員工個(gè)數(shù)大于>2 having添加分組后的篩選條件
SELECT department_id,COUNT(*) FROM employees GROUP BY department_id HAVING COUNT(*) > 2;
#查詢每個(gè)工種有獎(jiǎng)金的員工的最高工資>12000的工種編號(hào)和最高工資
SELECT MAX(salary),job_id FROM employees WHERE commission_pct IS NOT NULL GROUP BY job_id HAVING MAX(salary)>12000
#查詢領(lǐng)導(dǎo)編號(hào)>102的每個(gè)領(lǐng)導(dǎo)手下的最低工資>5000的領(lǐng)導(dǎo)編號(hào)是哪個(gè),及最低工資
SELECT MIN(salary),manager_id FROM employees WHERE manager_id > 102 GROUP BY manager_id HAVING MIN(salary)>5000
#按員工姓名的長度分組,查詢每一組的個(gè)數(shù),篩選員工個(gè)數(shù)>5的有哪些
SELECT COUNT(*),LENGTH(last_name) FROM employees GROUP BY LENGTH(last_name) HAVING COUNT(*) > 5
#查詢每個(gè)部門每個(gè)工種的員工的平均工資 部門不為空 平均工資大于10000 降序顯示
SELECT AVG(salary),department_id,job_id FROM employees WHERE department_id IS NOT NULL GROUP BY department_id,job_id HAVING AVG(salary)>10000 ORDER BY AVG(salary) DESC
#查詢各個(gè)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 ASC
#查詢員工最高工資和最低工資的查詢
SELECT MAX(salary)-MIN(salary) difference FROM employees;
#查詢各個(gè)管理者手下員工的最低工資,其中最低工資不低于6000,沒有管理者的員工不計(jì)算在內(nèi)
SELECT MIN(salary),manager_id FROM employees WHERE manager_id IS NOT NULL GROUP BY manager_id HAVING MIN(salary) >= 6000
#查詢所有部門的編號(hào),員工的數(shù)量和工資的平均值,并按平均工資降序
SELECT department_id,COUNT(*),AVG(salary) FROM employees GROUP BY department_id ORDER BY AVG(salary) DESC
#選擇具有各個(gè)job_id的員工人數(shù)
SELECT COUNT(*),job_id FROM employees GROUP BY job_id
#一、sql92標(biāo)準(zhǔn) 連接查詢(內(nèi)連接)
#1.等值連接
#案例1:查詢女神名和對(duì)應(yīng)的男神名
SELECT NAME,boyName FROM beauty,boys WHERE beauty.`boyfriend_id` = boys.`id`;
#案例2:查詢員工名對(duì)應(yīng)的部門名
SELECT last_name,department_name FROM employees,departments WHERE employees.`department_id` = departments.`department_id`;
#查詢員工名,工種號(hào),工種名
SELECT e.last_name,e.job_id,j.job_title FROM employees AS e,jobs AS j WHERE e.`job_id` = j.`job_id`;
#查詢有獎(jiǎng)金的員工名、部門名
SELECT last_name,department_name,commission_pct FROM employees e,departments d WHERE e.`department_id`=d.`department_id` AND e.`commission_pct` IS NOT NULL
#查詢城市名中第二個(gè)字符為o的部門名和城市名
SELECT d.`department_name`,l.city FROM departments d,locations l WHERE d.`location_id` = l.location_id AND l.city LIKE "_o%"
#查詢每個(gè)城市的部門個(gè)數(shù)
SELECT COUNT(*),l.city FROM departments d,locations l WHERE d.`location_id`=l.`location_id` GROUP BY l.city;
#查詢有獎(jiǎng)金的每個(gè)部門名和部門領(lǐng)導(dǎo)編號(hào)和該部門的最低工資
SELECT d.department_name,d.manager_id,MIN(e.salary) FROM employees e,departments d WHERE e.`department_id` = d.`department_id` AND e.`commission_pct` IS NOT NULL GROUP BY d.`department_name`,d.manager_id;
#查詢每個(gè)工種的工種名和員工的個(gè)數(shù),并按員工的個(gè)數(shù)降序
SELECT job_title,COUNT(*) AS 人數(shù) FROM employees e,jobs j WHERE e.`job_id`=j.`job_id` GROUP BY job_title ORDER BY 人數(shù) DESC;
#查詢員工名,部門名和所在的城市
SELECT e.last_name,d.department_name,l.city FROM employees e,departments d,locations l WHERE e.`department_id` = d.`department_id` AND d.`location_id` = l.`location_id` AND l.`city` LIKE 's%' ORDER BY d.`department_name` DESC
#2.非等值連接
#查詢員工的工資和工資級(jí)別
SELECT e.salary,j.grade_level FROM employees e,job_grades j WHERE e.`salary` BETWEEN j.lowest_sal AND j.highest_sal;
#3.自連接 查詢員工名和上級(jí)的名稱
SELECT e.employee_id,e.last_name,m.employee_id,m.last_name FROM employees e,employees m WHERE m.employee_id = e.manager_id
#顯示員工表的最大工資,工資平均值
SELECT MAX(salary),AVG(salary) FROM employees
#查詢員工表中的employee_id,job_id,last_name,按department_id降序,salary升序
SELECT employee_id,job_id,last_name,department_id FROM employees ORDER BY department_id DESC ,salary ASC
#查詢員工表的job_id中包含a和e的,并且a在e前面
SELECT job_id FROM employees WHERE job_id LIKE "%a%e%"
#顯示當(dāng)前日期,以及去掉前后空格,截取字符串函數(shù)
SELECT TRIM('字符' FROM NOW())
#顯示所有的員工姓名,部門號(hào),和部門名稱
SELECT e.`last_name`,e.`department_id`,d.department_name FROM employees e,departments d WHERE e.`department_id` = d.department_id;
#查詢90號(hào)部門員工的job_id和90號(hào)部門的location_id
SELECT job_id,location_id FROM employees e,departments d WHERE e.`department_id` = d.`department_id` AND e.`department_id` = 90 ;
#查詢所有有獎(jiǎng)金的員工的last_name,department_name,location_id,city
SELECT e.last_name,d.department_name,d.location_id,l.city FROM employees e,departments d,locations l WHERE e.`department_id` = d.`department_id` AND d.`location_id` = l.`location_id` AND e.`commission_pct` IS NOT NULL
#查詢每個(gè)工種、每個(gè)部門的部門名、工種名和最低工資
SELECT e.job_id,d.`department_name`,j.job_title,MIN(e.`salary`) FROM employees e,departments d,jobs j WHERE e.`department_id` = d.`department_id` AND e.`job_id` = j.job_id GROUP BY e.job_id,d.`department_name`
#查詢每個(gè)國家下的部門個(gè)數(shù)大于2的國家編號(hào)
SELECT l.`country_id`,COUNT(*) FROM departments d,locations l WHERE d.`location_id` = l.`location_id` GROUP BY country_id HAVING COUNT(*) > 2
#選擇指定員工的姓名,員工號(hào),以及他的管理者的姓名和員工號(hào)。
SELECT e.`last_name`,e.`employee_id`,m.last_name,m.employee_id FROM employees e,employees m WHERE e.`employee_id` = m.`manager_id`
總結(jié)
以上是生活随笔為你收集整理的MySQL 简单查询记录(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SLAMTEC—思岚科技CES之行完美收
- 下一篇: 数据库基础教程