進階1:基礎(chǔ)查詢
/*
語法:
select 查詢列表 from 表名;
類似于:System.out.println(打印東西);
特點:
1、查詢列表可以是:表中的字段、常量值、表達式、函數(shù)
2、查詢的結(jié)果是一個虛擬的表格
*/
USE myemployees;
1.查詢表中的單個字段
SELECT last_name FROM employees;
2.查詢表中的多個字段
SELECT last_name,salary,email FROM employees;
3.查詢表中的所有字段
方式一:
SELECT
employee_id,
first_name,
last_name,
phone_number,
last_name,
job_id,
phone_number,
job_id,
salary,
commission_pct,
manager_id,
department_id,
hiredate
FROM
employees ;
方式二:
SELECT * FROM employees;
4.查詢常量值
SELECT 100;
SELECT 'john';
5.查詢表達式
SELECT 100%98;
6.查詢函數(shù)
SELECT VERSION();
7.起別名
/*
①便于理解
②如果要查詢的字段有重名的情況,使用別名可以區(qū)分開來
*/
方式一:使用as
SELECT 100%98 AS 結(jié)果;
SELECT last_name AS 姓,first_name AS 名 FROM employees;
方式二:使用空格
SELECT last_name 姓,first_name 名 FROM employees;
案例:查詢salary,顯示結(jié)果為 out put
SELECT salary AS "out put" FROM employees;
8.去重
案例:查詢員工表中涉及到的所有的部門編號
SELECT DISTINCT department_id FROM employees;
9.+號的作用
/*
java中的+號:
①運算符,兩個操作數(shù)都為數(shù)值型
②連接符,只要有一個操作數(shù)為字符串
mysql中的+號:
僅僅只有一個功能:運算符
select 100+90; 兩個操作數(shù)都為數(shù)值型,則做加法運算
select '123'+90;只要其中一方為字符型,試圖將字符型數(shù)值轉(zhuǎn)換成數(shù)值型
如果轉(zhuǎn)換成功,則繼續(xù)做加法運算
select 'john'+90; 如果轉(zhuǎn)換失敗,則將字符型數(shù)值轉(zhuǎn)換成0
select null+10; 只要其中一方為null,則結(jié)果肯定為null
*/
案例:查詢員工名和姓連接成一個字段,并顯示為 姓名
SELECT CONCAT('a','b','c') AS 結(jié)果;
SELECT
CONCAT(last_name,first_name) AS 姓名
FROM
employees;
1. 下面的語句是否可以執(zhí)行成功
SELECT last_name , job_id , salary AS sal
FROM employees;
2.下面的語句是否可以執(zhí)行成功
SELECT * FROM employees;
3.找出下面語句中的錯誤
SELECT employee_id , last_name,
salary * 12 AS "ANNUAL SALARY"
FROM employees;
4.顯示表departments的結(jié)構(gòu),并查詢其中的全部數(shù)據(jù)
DESC departments; #顯示表結(jié)構(gòu)
SELECT * FROM departments;
5.顯示出表employees中的全部job_id(不能重復(fù))
SELECT DISTINCT job_id FROM employees;
6.顯示出表employees的全部列,各個列之間用逗號連接,列頭顯示成OUT_PUT
SELECT
IFNULL(commission_pct,0) AS 獎金率,
commission_pct
FROM
employees;
-------------------------------------------
SELECT
CONCAT(first_name,',',last_name,',',job_id,',',IFNULL(commission_pct,0)) AS out_put
FROM
employees;
進階2:條件查詢
/*
語法:
select
查詢列表
from
表名
where
篩選條件;
分類:
一、按條件表達式篩選
簡單條件運算符:> < = != <> >= <=
二、按邏輯表達式篩選
邏輯運算符:
作用:用于連接條件表達式
&& || !
and or not
&&和and:兩個條件都為true,結(jié)果為true,反之為false
||或or: 只要有一個條件為true,結(jié)果為true,反之為false
!或not: 如果連接的條件本身為false,結(jié)果為true,反之為false
三、模糊查詢
like
between and
in
is 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 '_';
2.between and
/*
①使用between and 可以提高語句的簡潔度
②包含臨界值
③兩個臨界值不要調(diào)換順序
*/
案例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值,又可以判斷普通的數(shù)值,可讀性較低
isnull():是返回1,不是返回0.
select isnull(comp) from employees;
select * from employ where like '1__'; #可以判斷數(shù)值型
暫定以下內(nèi)容
查詢工資大于 12000 的員工姓名和工資
SELECT CONCAT(first_name,last_name),salary
FROM employees
WHERE salary > 12000;
查詢員工號為 176 的員工的姓名和部門號和年薪
SELECT CONCAT(first_name,last_name),department_id,salary12+IFNULL(commission_pct,0)2
FROM employees
WHERE job_id = 176;
選擇工資不在 5000 到 12000 的員工的姓名和工資
SELECT CONCAT(first_name,last_name),salary
FROM employees
WHERE salary < 5000 AND salary > 12000;
選擇在 20 或 50 號部門工作的員工姓名和部門號
SELECT CONCAT(first_name,last_name),manager_id
FROM employees
WHERE manager_id = 20 OR manager_id = 50;
選擇公司中沒有管理者的員工姓名及 job_id
SELECT CONCAT(first_name,last_name),job_id
FROM employees
WHERE manager_id IS NULL;
選擇公司中有獎金的員工姓名,工資和獎金級別
SELECT CONCAT(first_name,last_name),salary,hiredate
FROM employees
WHERE hiredate IS NOT NULL;
選擇員工姓名的第三個字母是 a 的員工姓名
SELECT CONCAT(first_name,last_name) AS 姓名
FROM employees
WHERE CONCAT(first_name,last_name) LIKE '__a%';
選擇姓名中有字母 a 和 e 的員工姓名
SELECT CONCAT(first_name,last_name)
FROM employees
WHERE CONCAT(first_name,last_name) LIKE '%a%' AND '%e%';
顯示出表 employees 表中 first_name 以 'e'結(jié)尾的員工信息
SELECT *
FROM employees
WHERE first_name LIKE '%e';
顯示出表 employees 部門編號在 80-100 之間 的姓名、職位
SELECT CONCAT(first_name,last_name),job_id
FROM employees
WHERE job_id BETWEEN 80 AND 100;
顯示出表 employees 的 manager_id 是 100,101,110 的員工姓名、職位
SELECT CONCAT(first_name,last_name),job_id
FROM employees
WHERE manager_id IN(100,101,110);
進階3:排序查詢
/*
語法:
select 查詢列表
from 表名
【where 篩選條件】
order by 排序的字段或表達式;
特點:
1、asc代表的是升序,可以省略
desc代表的是降序
2、order by子句可以支持 單個字段、別名、表達式、函數(shù)、多個字段
3、order by子句在查詢語句的最后面,除了limit子句
*/
1、按單個字段排序
SELECT * FROM employees ORDER BY salary DESC;
SELECT * FROM employees ORDER BY salary ASC;
2、添加篩選條件再排序
案例:查詢部門編號>=90的員工信息,并按員工編號降序
SELECT *
FROM employees
WHERE department_id>=90
ORDER BY employee_id DESC;
3、按表達式排序
案例:查詢員工信息 按年薪降序
SELECT ,salary12(1+IFNULL(commission_pct,0))
FROM employees
ORDER BY salary12*(1+IFNULL(commission_pct,0)) DESC;
4、按別名排序
案例:查詢員工信息 按年薪升序
SELECT ,salary12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 ASC;
5、按函數(shù)排序
案例:查詢員工名,并且按名字的長度降序
SELECT LENGTH(last_name),last_name
FROM employees
ORDER BY LENGTH(last_name) DESC;
6、按多個字段排序
案例:查詢員工信息,要求先按工資降序,再按employee_id升序
SELECT *
FROM employees
ORDER BY salary DESC,employee_id ASC;
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的員工信息,并先按郵箱的字節(jié)數(shù)降序,再按部門號升序
SELECT *,LENGTH(email)
FROM employees
WHERE email LIKE '%e%'
ORDER BY LENGTH(email) DESC,department_id ASC;