DQL查詢資料
指定查詢字段
-- 查詢全部的學生
SELECT * FROM `student`
-- 查詢指定字段
SELECT `studentno`,`studentname`FROM`student`
- 可以給字段起别名,也可以給表起别名
-- 給結果起一個名字 AS
SELECT `studentno`AS 學号,`studentname`AS 學生姓名 FROM`student` AS s
-- 函數Concat(a,b)
SELECT CONCAT('姓名:',`studentname`)AS 新名字 FROM student
去重 distinct
- 查詢哪些同學參加了考試——有成績
資料庫的列
查詢系統版本
select version()
計算
select 100*3-1 as 計算結果
- 學員考試成績+1分檢視
SELECT `studentno`,`studentresult`+1 AS '提了1分' FROM result
資料庫中的表達式:文本值,列,NULL,函數,計算表達式,系統變量……
where條件子句
作用:檢索資料中符合條件的值
- 邏輯運算符
運算符 | 文法 | 描述 |
---|---|---|
and && | 邏輯與 | |
or | 邏輯或 | |
not ! | 邏輯非 |
模糊查詢
運算符 | 文法 | 描述 |
---|---|---|
is null | a is null | |
is not null | ||
between …and … | ||
like | a like b | sql比對,如果a比對b,則結果為真 |
in | a in(a1,a2…) | 假設a在a1,或者a2……結果為真 |
- %(代表0到任意個字元)
- _(一個字元)
SELECT studentNo,`studentname`FROM`student`
WHERE`studentname`LIKE'張%'
SELECT studentNo,`studentname`FROM`student`
WHERE`studentname`LIKE'張_'
聯表查詢
-
join
思路:
- 分析需求,分析查詢的字段來自哪些表
- 确定交叉點(這兩個表中哪個資料是相同的)
三種
- inner join
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM student AS s
INNER JOIN result AS r
WHERE s.`studentno`=r.`studentno`
- right join
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM `student` s
RIGHT JOIN `result` r
ON s.`studentno`=r.`studentno`
- left join
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM `student` s
LEFT JOIN `result` r
ON s.`studentno`=r.`studentno`
操作 | 描述 |
---|---|
inner join | 如果表中至少有一個比對,就傳回行 |
right join | 會從右表中傳回所有的值,即使左表中沒有比對 |
left join | 會從左表中傳回所有的值,即使右表中沒有比對 |
- join on 連接配接查詢
- where 等值查詢
自連接配接
自己的表和自己的表連接配接,核心:一張表拆為兩張一樣的表即可
分成兩個表後:
分頁和排序
排序一定要解除安裝分頁上面
-
分頁 limit
為什麼要分頁:
- 緩解資料庫壓力
-
好的使用者體驗
文法:limit 目前頁,頁面的大小
網頁應用:目前頁(n),總的頁數(資料總數/頁面大小),頁面的大小
limit 0,5 -- 1到5條資料
limit 1,5 -- 2到6條資料
- 排序 order by
- asc 升序
- desc 降序
子查詢
本質:在where嵌套語句中嵌套一個子查詢語句
順序:由裡及外
where SubjectNo=(
select SubjectNo from `subject`
where SubjectName=`資料庫結構-1`
)
Select小結