【MySQL学习】DQL语言的学习 Data Query Language
DQL結(jié)構(gòu)化查詢語言
- 基礎(chǔ)查詢
- 基礎(chǔ)查詢1:查詢常量
- 基礎(chǔ)查詢2:查詢表達(dá)式運(yùn)行結(jié)果
- 基礎(chǔ)查詢3: 函數(shù)的返回值
- 基礎(chǔ)查詢4:返回表中單個列
- 基礎(chǔ)查詢5: 查詢返回多個列
- 基礎(chǔ)查詢6: 查詢返回所有列
- 練習(xí)
 
- 基礎(chǔ)查詢7:給列起別名
 
 
- 條件查詢
- 條件查詢1:關(guān)系表達(dá)式
- 條件查詢2:邏輯表達(dá)式
- 練習(xí)
 
- 條件查詢3:模糊查詢
- 練習(xí)
 
 
 
- 排序查詢
- 排序查詢1:單個列排序
- 排序查詢2:多個列排序
 
 
- 常見函數(shù)
- 常見函數(shù)1:字符函數(shù)
- 1.1 UPPER/LOWER 轉(zhuǎn)大/小寫函數(shù)
- 1.2 CONCAT 拼接字符串函數(shù)
- 1.3 SUBSTR 截取子字符串
- 1.4 LENGTH 參數(shù)字符串的字節(jié)數(shù)
- 1.5 INSTR 檢索目標(biāo)串在源串中第一次出現(xiàn)的索引位置
- 1.6 LPAD/RPAD 左填充和右填充
- 1.7 TRIM
- 1.8 REPLACE 取代
 
 
- 常見函數(shù)2:數(shù)學(xué)函數(shù)
- 2.1 CEIL 向上取整
- 2.2 FLOOR 向上取整
- 2.3 ROUND 四舍五入
- 2.4 RAND 取隨機(jī)數(shù)
- 2.5 ABS 取絕對值
- 2.6 MOD 取余數(shù)
 
 
- 常見函數(shù)3:日期函數(shù)
- 取系統(tǒng)時間
 
 
- 常見函數(shù)4:流程控制函數(shù)
- 4.1 判斷控制函數(shù)
- 4.2 多重判斷(區(qū)間類型)
- 4.3 多重判斷(等值類型)
 
 
- 常見函數(shù)5:其他函數(shù)
 
 
- 分組函數(shù)
- 分組函數(shù)1:AVG() 取平均值
- 分組函數(shù)2:SUM()求總和
- 分組函數(shù)3:MAX() 取最大值
- 分組函數(shù)4: MIN()取最小值
- 分組函數(shù)5: COUNT()統(tǒng)計(jì)行數(shù)
- 分組函數(shù)6:分組查詢子句 group by
 
 
- 連接查詢
- 連接查詢1: 內(nèi)連接
- 練習(xí):
 
- 連接查詢2: 外連接
 
 
- 子查詢
- 分頁查詢
基礎(chǔ)查詢
SELECT 開頭 查詢的內(nèi)容 FROM 表或者結(jié)果集select 查詢的結(jié)果是一個虛擬的表格,保存在客戶端的內(nèi)存中,這個虛擬的結(jié)果叫做查詢結(jié)果集
基礎(chǔ)查詢1:查詢常量
USE myemployees; SELECT 110; #### 查詢數(shù)值型:直接寫值,不需要寫單引號或者雙引號,加上引號也可以 SELECT '110'; SELECT '管理員'; #### 查詢字符型和日期型:必須要寫單引號或者雙引號小結(jié):既然如此,查詢常量的時候都加上單引號
基礎(chǔ)查詢2:查詢表達(dá)式運(yùn)行結(jié)果
SELECT 999 + 110; # 如果 + 兩端都是數(shù)值,那么就直接相加,結(jié)果集中是結(jié)果 # 如果 + 兩端有一端是字符,那么首先會將字符轉(zhuǎn)換為數(shù)值,如果轉(zhuǎn)化成功則相加,并且返回結(jié)果,如果轉(zhuǎn)化失敗,則變?yōu)?0 再加 SELECT 999 + 'abc'; # 這個例子是轉(zhuǎn)換失敗的例子 SELECT 999 + '123'; # 這個例子是轉(zhuǎn)化成功的例子 SELECT '999' + '110'; # 這個例子也是轉(zhuǎn)化成功的例子 SELECT 111 + NULL; # + 號兩端有一端是 NULL,那么返回結(jié)果就一定是 NULL:SELECT CONCAT('999','abc'); # 如果想執(zhí)行兩個字符串的拼接需要使用 CONCAT() 函數(shù)。基礎(chǔ)查詢3: 函數(shù)的返回值
SELECT VERSION(); # 返回當(dāng)前 MySQL 數(shù)據(jù)庫的版本信息 SELECT DATABASE(); # 返回當(dāng)前的數(shù)據(jù)庫的名稱基礎(chǔ)查詢4:返回表中單個列
SELECT 后面是列表 FROM 后面是表名,查詢單個列就只寫一個列名 SELECT employee_id FROM employees;基礎(chǔ)查詢5: 查詢返回多個列
SELECT 后面是列名(多個列名用逗號分隔) FROM 后面是表名(查詢多個列就寫多個列名 ) SELECT employee_id,first_name,last_name FROM employees;基礎(chǔ)查詢6: 查詢返回所有列
SELECT 后面是所有列名(用逗號分隔) FROM 后面是表名select * FROM 后面是表名 # 查詢的時候 select 后面寫 * 代表 查詢所有的列 SELECT * FROM employees; SELECTemployee_id,first_name,last_name,email,phone_number,job_id,salary,commission_pct,manager_id,department_id FROM employees; # P.S:在Java 里面是不允許寫成用 * 取所有列的,這個是規(guī)定練習(xí)
# 查所有員工的編號, 名字 ,和年薪 SELECTemployee_id,first_name,last_name,(salary * 12 * (1 + IFNULL(commission_pct,0))) FROM employees; /* salary 是月薪 commission_pct 是獎金系數(shù) IFNULL(a,b) # 這個函數(shù)的作用是判斷 a 是不是NUL,如果是的化則返回 默認(rèn)的 b */P.S:IFNULL(a,b)
- 這個函數(shù)的作用是判斷 a 是不是NUL,如果是的化則返回 默認(rèn)的 b
基礎(chǔ)查詢7:給列起別名
兩種形式,
P.S:
- 在列的別名中如果有特殊字符,則別名必須兩端加單引號
條件查詢
SELECT 列名 FROM 表名 WHERE 檢索條件執(zhí)行帶有 where 子句的查詢語句時,逐行檢索,匹配每一行的條件,
- 如果這一行的條件符合 where 子句的表達(dá)式,那么就會被提取出來,
- 如果條件不符合 where 子句,則這一行被過濾掉。
 結(jié)果就是結(jié)果集中保留的都是符合 where 子句的記錄
where 子句中可以寫那些形式:
關(guān)系運(yùn)算: 等于 =,大于 >, 小于 <,大于等于 >=,小于等于 <=,不等于 <> (!= 也可以,但是不推薦使用)
邏輯運(yùn)算符 : and, or ,not (&, | ,! 不推薦)
like,between and ,in, is null ,is not null
條件查詢1:關(guān)系表達(dá)式
# 查詢所有工資大于等于 10000 的員工信息 SELECT * FROM employees WHERE salary >= 10000; # 查詢所有隸屬 IT 部門的員工信息 SELECT * FROM employees WHERE department_id = 60; # 所有 manager_id 不是 103 的員工信息 SELECT * FROM employees WHERE manager_id <> 103;條件查詢2:邏輯表達(dá)式
# 所有工資在 15000 到 25000 之間的員工信息 , and與 運(yùn)算符兩端的表達(dá)式必須同時滿足條件才能滿足整個條件 SELECT * FROM employees WHERE salary >= 15000 AND salary <= 25000; SELECT * FROM employees WHERE salary >= 15000 AND salary <= 25000;# 所有 manager_id 是103或者 102 的員工信息 or或 運(yùn)算符兩端的表達(dá)式有一端滿足條件,整個表達(dá)式就滿足條件 SELECT * FROM employees WHERE manager_id =103 OR manager_id = 102 OR manager_id =114;練習(xí)
#工資大于 15000并且部門編號是60,或者 manager_id 是102 的員工信息, and 的優(yōu)先級高于 or SELECT * FROM employees WHERE manager_id = 102 OR salary > 5000 AND department_id = 60;# manager_id 不是103的所有員工的信息 SELECT * FROM employees WHERE manager_id <> 103; SELECT * FROM employees WHERE NOT(manager_id = 103); # 寫法二:用 NOT 來反轉(zhuǎn)整個的結(jié)果# 工資不在 10000到20000之間的員工信息 SELECT * FROM employees WHERE NOT(salary >= 10000 AND salary <= 20000);條件查詢3:模糊查詢
like模糊查詢
 所有名字以 e 開頭的員工信息:like 關(guān)鍵字代表像什么什么的樣子,必須和通配符配合
between and模糊查詢
 between and 模糊查詢,一個數(shù)值的區(qū)間查詢,包含邊界值,必須是小數(shù)在前,大數(shù)在后
in模糊查詢
 只要檢索條件匹配 in 后面任何一個條件,就會符合檢索條件
 若干值中只要匹配一個滿足條件,這個匹配的值可以是數(shù)值也可以是字符
is null和 is not null 模糊查詢
# 查詢出所有年底有獎金的員工信息 SELECT * FROM employees WHERE commission_pct IS NOT NULL; SELECT * FROM employees WHERE commission_pct IS NOT NULL;練習(xí)
# 1.查詢工資大于 12000 的員工姓名和工資 SELECT first_name,last_name,salary FROM employees WHERE salary > 12000;# 2.查詢員工號為 176 的員工的姓名、部門號和年薪 SELECT first_name,last_name,department_id,(salary * 12 * (1 + IFNULL(commission_pct,0))) AS '年薪' FROM employees WHERE employee_id = 176; SELECT first_name,last_name,department_id, (salary * 12 * (1 + IFNULL(commission_pct,0))) 年薪 FROM employees WHERE employee_id = 176;# 3.選擇工資不在 5000 到 12000的員工的姓名和工資 SELECT first_name,last_name,salary FROM employees WHERE NOT ( salary BETWEEN 5000 AND 12000); SELECT first_name,last_name,salary FROM employees WHERE salary NOT BETWEEN 5000 AND 12000;# 4.選擇在 20 或 50 號部門工作的員工姓名和部門號 SELECT first_name,last_name,department_id FROM employees WHERE department_id IN (20,50);# 5.選擇公司里面沒有管理者的員工姓名及 job_id SELECT first_name,last_name,job_id FROM employees WHERE manager_id IS NULL;# 6.選擇公司中有獎金的員工姓名,工資和獎金級別 SELECT first_name,last_name,salary,commission_pct FROM employees WHERE commission_pct IS NOT NULL;# 7.選擇員工姓名的第三個字母是 a 的員工姓名 SELECT first_name,last_name FROM employees WHERE first_name LIKE '__a%' OR last_name LIKE '__a%';# 8.選擇姓名中有字母 a ,也有 e 的員工姓名 SELECT first_name,last_name FROM employees WHERE first_name LIKE '%e%' AND first_name LIKE '%a%'; SELECT first_name,last_name FROM employees WHERE first_name LIKE '%e%a%' OR first_name LIKE '%a%e%';# 9.顯示出來 employees 表中 first_name 以 'e'結(jié)尾的員工信息 SELECT * FROM employees WHERE first_name LIKE '%e';# 10.顯示出來 employees 部門編號在 80-100之間的姓名和職位 SELECT first_name,last_name,job_id FROM employees WHERE department_id BETWEEN 80 AND 100;# 11.顯示出表 employees 的manager_id 是 100,101 ,110 的員工姓名,和職位 SELECT first_name,last_name,job_id FROM employees WHERE manager_id IN (100,101,110);排序查詢
排序查詢1:單個列排序
# 按照員工的工資升序排列,ASC 是按照列的升序排列,如果不寫默認(rèn)就是 ASC SELECT * FROM employees ORDER BY salary ASC; SELECT * FROM employees ORDER BY salary;# 按照員工的工資降序排列,DESC 是按照列的降序排列 SELECT * FROM employees ORDER BY salary DESC;# 按照員工的名字降序排列,DESC 是按照Z-A的降序排列 SELECT * FROM employees ORDER BY first_name DESC;排序查詢2:多個列排序
# 按照員工的工資降序排列 DESC 是降序排列,如果工資相同就按照名字的升序排列 # 按照多個列表的時候,用逗號進(jìn)行分隔各排序規(guī)則,在前面的就是高排序規(guī)則,寫在后面的就是低排序規(guī)則,各排序規(guī)則單獨(dú)制定升序還是降序 SELECT * FROM employees ORDER BY salary DESC,first_name ASC;常見函數(shù)
sql語句中的函數(shù)
 函數(shù)是一個有特定功能的方法和代碼塊,當(dāng)調(diào)用函數(shù)的時候,這個函數(shù)或者代碼塊就運(yùn)行,返回結(jié)果。
 函數(shù)有的有參數(shù),有的沒有參數(shù),但是都有返回值。
 單行函數(shù):
常見函數(shù)1:字符函數(shù)
1.1 UPPER/LOWER 轉(zhuǎn)大/小寫函數(shù)
# 轉(zhuǎn)大寫函數(shù) SELECT UPPER('abc'); SELECT UPPER(first_name) FROM employees; # 轉(zhuǎn)小寫函數(shù) SELECT LOWER('ABC'); SELECT LOWER(first_name) FROM employees;1.2 CONCAT 拼接字符串函數(shù)
# 拼接字符串函數(shù) SELECT UPPER(CONCAT('a','b','c')); SELECT CONCAT(first_name,'.',last_name) FROM employees;1.3 SUBSTR 截取子字符串
# 截取子字符串 在 MySql的字符串中,索引從`1`開始,從源串截取,第二個參數(shù)位置開始一直到字符串末尾 SELECT SUBSTR('hello world',7);截取子字符串,三個參數(shù)的形式, 第一個參數(shù)源串,第二個參數(shù)從這個位置開始截取,第三個參數(shù)是截取的長度 SELECT SUBSTR('hello world',7,2); # 截取所有員工名字中的前三個字母 SELECT SUBSTR(CONCAT(first_name,last_name),1,3) FROM employees; SELECT SUBSTR(first_name,1,3) FROM employees;1.4 LENGTH 參數(shù)字符串的字節(jié)數(shù)
# 獲取字符串的字節(jié)數(shù),如果是英文字母,一個字母一個字節(jié),如果是中文,一個漢字三個字節(jié) SELECT LENGTH('ABC'); SELECT LENGTH('你好啊');1.5 INSTR 檢索目標(biāo)串在源串中第一次出現(xiàn)的索引位置
# 獲取目標(biāo)串在源串中出現(xiàn)的第一次索引,返回 0 代表沒有找到目標(biāo)串 SELECT INSTR('one world one dream','one'); SELECT INSTR('a step forward, a civilization forward','cuikai');1.6 LPAD/RPAD 左填充和右填充
# LPAD 和 RPAD 左填充和右填充,源串加上填充串的長度是給出的第二個參數(shù) SELECT LPAD('崔凱',10,'*'); # 使用填充串將源串從左側(cè)開始填滿長度,這個長度是字符數(shù) SELECT RPAD('李瑞涵',10,'*');# 使用填充串將源串從右側(cè)開始填滿長度,這個長度是字符數(shù)1.7 TRIM
# 去掉兩端的空格,不能去掉中間的空格 SELECT TRIM(' 張學(xué)友 '); SELECT LENGTH(TRIM(' 張學(xué)友 '));1.8 REPLACE 取代
# 從源串中用新串替換所有要被取代的串,有幾個替換幾個 SELECT REPLACE('我不認(rèn)識蔡徐坤','蔡徐坤','劉德華');常見函數(shù)2:數(shù)學(xué)函數(shù)
2.1 CEIL 向上取整
ceil<— 天花板
SELECT CEIL(-2.6); # 選擇的是大于參數(shù)的最小整數(shù) SELECT CEIL(9.3);2.2 FLOOR 向上取整
floor<-- 地板
SELECT FLOOR(3.15); # 小于參數(shù)的最小整數(shù)2.3 ROUND 四舍五入
SELECT ROUND(-3,15); SELECT ROUND(3.75);2.4 RAND 取隨機(jī)數(shù)
SELECT RAND(); # 取 0-1之間的浮點(diǎn)數(shù)2.5 ABS 取絕對值
SELECT ABS(-3);2.6 MOD 取余數(shù)
SELECT MOD(9,2); # 相當(dāng)于 9 除以 2常見函數(shù)3:日期函數(shù)
取系統(tǒng)時間
SELECT NOW(); # 取系統(tǒng)時間,包括年月日時分秒SELECT CURTIME(); # 取系統(tǒng)時間,只有時分秒SELECT CURDATE(); # 取系統(tǒng)時間,只有年月日常見函數(shù)4:流程控制函數(shù)
4.1 判斷控制函數(shù)
IF 函數(shù)有三個參數(shù),
 第一個參數(shù)是條件表達(dá)式,表達(dá)式返回True,則顯示第二個參數(shù),表達(dá)式返回 False,則顯示第三個參數(shù)
4.2 多重判斷(區(qū)間類型)
相當(dāng)于 if-else
select * case when 條件表達(dá)式1 then 表達(dá)式1 when 條件表達(dá)式2 then 表達(dá)式2 ...... else 表達(dá)式 n end from xxxx; SELECT first_name,last_name , CASE WHEN salary > 2000 AND salary < 4000 THEN salary * 1.1 WHEN salary >= 4000 AND salary < 8000 THEN salary * 1.2 ELSE salary * 2.5 END '工資' FROM employees;
 P.S: 注意上圖框出來的 ,
4.3 多重判斷(等值類型)
相當(dāng)于 switch-case
select * case when 等值判斷 then 表達(dá)式 when 等值判斷 then 表達(dá)式 .... else 表達(dá)式n end from xxx; SELECT first_name,last_name , CASE WHEN job_id = 'AD_PRES' THEN salary * 1.1 WHEN job_id = 'AD_VP' THEN salary * 1.5 ELSE salary * 2.0 END '工資' FROM employees;常見函數(shù)5:其他函數(shù)
SELECT IFNULL('hello','ok'); SELECT IFNULL(NULL,'cuikai');分組函數(shù)
分組函數(shù)只能返回一行記錄,不要將分組函數(shù)和普通列放在一起查,除非這個列就是分組列
分組函數(shù)1:AVG() 取平均值
# AVG()取平均值的函數(shù) # 查看所有員工的平均工資 SELECT AVG(salary) FROM employees;分組函數(shù)2:SUM()求總和
# 查看所有員工的工資和 SELECT SUM(salary) FROM employees;分組函數(shù)3:MAX() 取最大值
# 查看工資最高是多少 SELECT MAX(salary) FROM employees;分組函數(shù)4: MIN()取最小值
# 查看工資最低的是多少 SELECT MIN(salary) FROM employees;分組函數(shù)5: COUNT()統(tǒng)計(jì)行數(shù)
# 員工信息表中有多少名員工的工資是超過 1000 SELECT COUNT(*) FROM employees WHERE salary > 10000; # 因?yàn)檫@里是統(tǒng)計(jì)行數(shù),也就是說任意一行都可以,但是防止隨機(jī)選擇的行中有 NULL,就在這里選擇安全的 *分組函數(shù)6:分組查詢子句 group by
# 查詢 IT 崗位所有員工的工資 SELECT AVG(salary) FROM employees WHERE job_id = 'IT_PROG';# 查詢所有崗位的員工的平均工資 # group by 后面的列就是分組列,列值相等的數(shù)據(jù)會被分到一組中 # 分組函數(shù)在沒有分組之前是對所全表數(shù)據(jù)進(jìn)行檢索,一旦分組,就會按照各個組分別解鎖的方法運(yùn)算 SELECT job_id, AVG (salary) FROM employees GROUP BY job_id; # 查詢每個崗位的員工平均工資大于 5000 # where 是過濾分組前的原表數(shù)據(jù) # having 是過濾分組后的組 SELECT job_id, AVG(salary),COUNT(*) FROM employees GROUP BY job_id HAVING AVG(salary) > 5000; SELECT job_id, AVG(salary),COUNT(*) FROM employees GROUP BY job_id HAVING AVG(salary) > 5000;P.S:
 where 是過濾分組前的原表數(shù)據(jù)
 having 是過濾分組后的組
連接查詢
多表連接查詢,當(dāng)需要的數(shù)據(jù)來自于多張表的時候需要多表連接,內(nèi)連接和外連接
 本文檔演示的是內(nèi)連接
連接查詢1: 內(nèi)連接
SQL92 版本
# 1、等值連接 # 兩表相連必須具備以下幾個條件: 1.倆個表各自擁有 一個列,這倆個列的含義一樣 2.內(nèi)連接必須要求兩張表中都有匹配記錄才能連接返回,如果一張表中有匹配另一張表沒有則不能返回SELECTemployees.first_name,employees.last_name,employees.job_id,jobs.job_title FROM employees,jobs WHERE employees.job_id = jobs.job_id;# 內(nèi)連接查詢的規(guī)范方式就是表起別名,表名點(diǎn)列名,列起別名 SELECT e.first_name fna ,e.last_name lna ,e.job_id jid ,j.job_title jti FROM employees e ,jobs j WHERE e.job_id = j.job_id;# 可以再加一個條件查詢一下 salary > 10000 SELECT e.first_name fna,e.last_name lna,e.job_id jid,j.job_title jti FROM employees e, jobs j WHERE e.job_id = j.job_id AND e.salary > 10000; # 2、非等值連接,非等值連接就是不需要各自擁有一個含義相同的列,可以讓一個表的列在另一個表的某個區(qū)間里。 SELECT e.first_name ,e.job_id,e.salary,j.grade FROM employees e,job_grades j WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal; # 3、自連接 ---> 一張表做出兩張表的效果# 查詢員工名和他的主管id及主管名稱 SELECT e.first_name ename,e.manager_id managerid,m.first_name managername FROM employees e,employees m WHERE e.manager_id = m.employee_id;SQL99 版本
# 1、等值連接 # 使用 inner_join 實(shí)現(xiàn)內(nèi)連接 # 表a (inner) join表b on 連接條件 SELECT e.first_name,e.last_name,j.job_title FROM employees e INNER JOIN jobs j ON e.job_id = j.job_id;# 要是在這里需要再加一條可以加上 where SELECT e.first_name,e.last_name,j.job_title FROM employees e INNER JOIN jobs j ON e.job_id = j.job_id WHERE e.salary > 10000; # 2、非等值連接 SELECT e.first_name,e.job_id,e.salary,j.grade FROM employees e INNER JOIN job_grades j ON e.salary BETWEEN j.lowest_sal AND j.highest_sal; # 3、自連接 SELECT e.first_name ename ,e.manager_id managerid,m.first_name managername FROM employees e INNER JOIN employees m ON e.manager_id = m.employee_id;練習(xí):
# 查出員工的名字,崗位編號、部門編號和部門名 select e.first_name,e.job_id, e.department_id,d.department_name from employees e, departments d where e.department_id = d.department_id;select e.first_name,e.job_id,e.department_id,d.department_name from employees e inner join departments d on e.department_id = d.department_id; # 查出員工的名字,崗位編號,部門編號、部門名稱和部門經(jīng)理的編號 select e.first_name,e.job_id,e.department_id,d.department_name, d.manager_id from employees e,departments d where e.department_id = d.department_id;select e.first_name,e.job_id,e.department_id,d.department_name,d.manager_id from employees e inner join departments d on e.department_id = d.department_id; # 查出員工的名字,崗位名稱,部門名稱 select e.first_name,j.job_title,d.department_name from employees e,jobs j,departments d where e.department_id = d.department_id and e.job_id = j.job_id;select e.first_name,j.job_title,d.department_name from jobs j inner join employees e on j.job_id = e.job_id inner join departments d on e.department_id = d.department_id;select e.first_name,j.job_title,d.department_name from jobs j inner join employees e on j.job_id = e.job_id inner join departments d on e.department_id = d.department_id;連接查詢2: 外連接
外連接分為:左外連,右外連,全外連
# 左外連接 # 看看那些部門有那些員工,那些部門沒有員工 # 左外連接首先返回左表全部記錄,然后使用連接條件匹配右表,有匹配的就返回,無匹配的就返回NULL SELECT e.first_name,d.department_name FROM departments d LEFT JOIN employees e ON e.department_id = d.department_id;子查詢
一個查詢語句的數(shù)據(jù)源是另一個查詢語句的查詢結(jié)果集。
#查看所有沒有員工的部門名稱 #第一步使用左外連接查詢出所有部門并連接員工表找到?jīng)]有員工的部門 SELECT e.first_name,d.department_name FROM departments d LEFT JOIN employees e ON e.department_id = d.department_id;#第二步,找到所有first_name is null的部門 SELECT tableone.department_id,tableone.department_name FROM(SELECT e.first_name,d.department_name,d.department_idFROM departments d LEFT JOIN employees eON e.department_id = d.department_id) AS tableone WHERE tableone.first_name IS NULL; #查詢出所有工資比 Adam 高的員工信息 # 1.找出 Adam 員工的工資 SELECT salary FROM employees WHERE first_name = 'Adam'; # 2.找到所有比 Adam 員工工資高的員工 SELECT first_name,salary FROM employees WHERE salary > (SELECT salary FROM employees WHERE first_name = 'Adam');分頁查詢
LIMIT 關(guān)鍵字后面需要跟兩個參數(shù),第一個參數(shù)是開始顯示的索引位置
# 一共有50條符合條件的記錄,一頁10條,想看第三頁 # 第一頁 1- 10,第二頁 11- 20,第三頁 21-30,。。。 SELECT * FROM employees; SELECT COUNT(*) FROM employees;# LIMIT 關(guān)鍵字后面需要跟兩個參數(shù),第一個參數(shù)是開始顯示索引位置,這個索引是從 0 開始 第二個參數(shù)是顯示多少條 SELECT * FROM employees LIMIT 20,10;# LIMIT 關(guān)鍵字后面需要跟兩個參數(shù),第一個參數(shù)是開始顯示的索引位置# 第一頁應(yīng)該是顯示從第一條到第十條的記錄,但是由于 LIMIT的索引從 0 開始,所以代碼如下 SELECT * FROM employees LIMIT 0,10;# 第二頁應(yīng)該是顯示從十一條到第二十條的記錄 SELECT * FROM employees LIMIT 10,10;# 第三頁應(yīng)該是顯示從第二十一條到第三十條的記錄; SELECT * FROM employees LIMIT 20,10;做分頁的時候:
 1.頁面尺寸(一頁顯示多少條記錄):pageSize
 2.當(dāng)前頁碼 currPage
 3.總記錄數(shù)(符合檢索條件的所有數(shù)據(jù)) totalCount
 計(jì)算:pageCount = totalCount / pageSize IF totalCount/pageSiZe == 0 ELSE INT(totalCount /PageSize) + 1
 計(jì)算:本頁第一條記錄的索引 INDEX = (currPage - 1) * pageSize
 下面這個題目中:
 pageSize = 8
 totalCount = 40
 currPage = 2
 ===>第二頁的第一條記錄的索引為: (2- 1) * 8 = 8,sql語句如下:
總結(jié)
以上是生活随笔為你收集整理的【MySQL学习】DQL语言的学习 Data Query Language的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: python大小写转换_Python字母
- 下一篇: 一级建造师考试备考各科知识点记忆技巧
