MySQL(day 3)
阿新 • • 發佈:2021-01-06
MySQL(day 3)
1.DQL (Date Query Language)
1.1 指定查詢欄位
SELECT * FROM student; --查詢全部學生
/* select 欄位 from 表*/
SELECT `StudentNo`,`studentName` FROM student;--查詢指定欄位
SELECT `studentno` As 學號,`studentname` As 學生姓名 From student As s;--可以給欄位取別名,也可以給表取別名;
SELECT CONCAT('姓名:',studentname) As 新名字 From student;
/* 函式 Concat(a,b)*/
語法:SELECT 欄位,…FROM 表
1.2 去重查詢
SELECT * FROM result;--查詢全部從result中 SELECT `studentNo` FROM result;--查詢那些同學參加了考試 SELECT DISTINCT `studentNo` FROM result;--發現重複資料,去重 SELECT VERSION;--查詢系統版本 SELECT 100*3-1 As 計算結果; SELECT @@auto_increment;--查詢自增步長 SELECT `studentno`
,`studentResult`+1 AS `提分後` FROM result;--學員考試成績+1後結果;
1.3 where 條件子句
作用:檢索資料中符合條件的值;
SELECT `studentNo`,`studentResult` From result WHERE StudentResult>=95 && StudentResult<=100;
--查詢考試成績在5-100分之間
SELECT `studentNo`,`studentresult` From result WHERE studentresult BETWEEN 95 AND 100;
--模糊查詢(區間)
SElect `studentNo`,`studentResult` FRom result WHERE StudentNo!=1000;
--除學號1000之外的學生成績
SElect studentNo,`studentResult` FRom result WHERE NOT StudentNo=1000;--除學號1000之外的學生成績
1.4模糊查詢
比較運算子
運算子 | 語法 |
---|---|
IS NuLL | a is null |
Between and | a between B and C |
like | a like B,SQL匹配 |
IN | a in (a1,a2,a3…),a為a1,a2…其中一個為真 |
1.4.1 like 語句
SELECT `studentNo`,`studentname` FROM `student` WHERE studentname LIKE '劉%';
--查詢姓劉的同學,like結合,%(代表0到任意字元),_(代表一個字元)
SELECT `studentno`,`studentname` FROM `student` WHERE studentname LIKE '劉_';
--查詢姓劉的同學,名字後面只有一個字
SELECT `studentno`,`studentname` FROM `student` WHERE studentname LIKE '劉__';
--查詢姓劉的同學,名字後面只有兩個字
SELECT `studentno`,`studentname` FROM `student` WHERE studentname like '%嘉%';
--查詢名字中間有嘉字的同學 %嘉%
1.4.2 in語句
SELECT `studentno`,`studentname` FROM `student` WHERE studentNo in(1001,1002,1003);
--查詢1001,1002,1003號學員
SELECT `studentno`,`studentname` FROM `student` WHERE address in('XX','xxxxx');
--查詢在XXX的學生
SELECT `studentno`,`studentname` FROM `student` WHERE address = '' OR adress is NULL;
--查詢地址為空的學生
SELECT `studentno`,`studentname` FROM `student` WHERE `BornDate` is not null;
--查詢出身日期不為空的同學
SELECT `studentNo`,`studentname` FROM `student` WHERE `BornDate` is null;
--查詢出生日期為空的同學
注:in(具體的一個或多個值),與like語句不相容;
1.5聯表查詢
1.5.1(join)
join (連線的表) on (判斷的條件) 連線查詢
where 等值查詢
思路:分析查詢的欄位來自那些表(連線查詢);確定使用哪種查詢,確定交叉點(兩個表中資料相同的);判斷條件
SELECT s.studentNo,studentName,SubjectNo,StudentResult
FROM student AS s
INNER JOIN result AS r
on /*(where)*/ s.studentNo = r.studentNo;
--
SELECT s.studentNo,studentname,SubjectNo,StudentResult
FROM student AS s --AS可以省略
LEFT JOIN result r
on s.studentNo = r.studentNo;
--
SELECT s.studentNo,studentname,SubjectNo,StudentResult
FROM student AS s --AS可以省略
RIGHT JOIN result r
on s.studentNo = r.studentNo;
--
SELECT s.studentNo,studentname,SubjectNo,StudentResult
FROM student AS s --AS可以省略
LEFT JOIN result r
on s.studentNo = r.studentNo
WHERE StudentResult is null;
--查詢缺考的學生
思考題
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-XoxGoIj2-1609852786302)(C:\Users\q3315\AppData\Roaming\Typora\typora-user-images\image-20210105111117538.png)]
SELECT s.studentNo,studentname,SubjectNo,StudentResult
FROM student s
RIGHT JOIN result r
on s.studentNo = r.studentNo
INNER JOIN `subject` sub --再連線一張表
on r.SubjectNo = sub.subject;
--涉及多表查詢
總結
- SELECT 查詢的資料
- FROM 表
- 聯接方式 JOIN 聯接的表 ON 交叉條件
- 多張表查詢從兩張表開始
from a left join b 以a為基準查詢;
from a right join b 以b為基準;
from a INNER join b 表中至少有一個匹配就返回行
1.5.2 自連線(瞭解)
自己的表與自己的表連線,核心是一張表拆成兩張表
在這裡插入圖片描述