查詢DQL

進階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 '__%' ESCAPE '';

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 salary
12*(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;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容