1. 程式人生 > 其它 >Mysql的指定查詢、模糊查詢、SELECT結構

Mysql的指定查詢、模糊查詢、SELECT結構

4、DQL查詢資料(重點)

Data Query Language : 資料查詢語言

  • 使用頻率高

4.2 指定查詢欄位

-- 查詢全部的學生,select 欄位 from 表
SELECT * FROM student
-- 查詢指定欄位----起別名
SELECT `SNO` AS 學號,`SNAME` AS 學生姓名 FROM student

-- 也可以給欄位起別名
SELECT `SNO` AS 學號,`SNAME` AS 學生姓名 FROM student AS S1
-- 函式 Concat(a,b)
SELECT CONCAT('姓名: ',SNAME) AS 新名字 FROM student
-- 結果展示:如下圖

有時候,列明不是那麼的見名知意,

我們起別名: 使用AS

  • 欄位名 AS 別名1
  • 表名 AS 別名2
去重 DISTINCT

去除SELECT查詢出來的結果中重複的資料,重複的資料只顯示一條

-- 查詢那些同學參加了考試
SELECT * FROM result -- 全部考試成績

-- 查詢成績
SELECT DISTINCT `GRADE` FROM result

一些自帶的可以查詢的東西,瞭解下

SELECT VERSION() -- 查詢系統版本(函式)

SELECT 100+3-1 AS 計算結果 -- 用來計算(表示式)

SELECT @@auto_increment_increment -- 查詢自增的步長(變數)
-- 學員的考試成績 +1 檢視
SELECT `SNO`,`result`+1 AS '提分後' FROM result

資料庫中的表示式:文字值,列,函式,NULL,計算表示式,系統變數

select 表示式 from 表

4.3、where條件子句

作用:檢索資料中符合條件的資料

搜尋的條件是由一個或者多個表示式組成,結果為布林值

邏輯運算子

運算子 語法 描述
&& and a and b a && b 邏輯與
|| or a or b a || b 邏輯或
! Not not a !a 邏輯非(取反)

儘量使用英文字母

+++

程式碼展示
-- where
SELECT `sno` AS '學號',`grade` AS '成績'
FROM SC
where grade >= 95 AND grade <= 100
-- 上面的例子儘量使用 AND 不要使用 && 
-- 模糊查詢
SELECT sno,`grade`
FROM SC 
WHERE grade between 95 and 100

-- c除了1000號學生的成績
SELECT sno,`grade`
FROM SC
WHERE NOT sno = 1000
-- 或者是下面的這種方式
SELECT sno,`grade`
FROM SC
WHERE sno != 1000

-- 多個條件查詢
-- 成績在95~100之間且學號不是1002的學生
SELECT sno,`grade`
FROM SC 
WHERE grade between 90 AND 100 AND sno != 1002

模糊查詢:比較運算子

運算子 語法 描述
IS NULL a is null 如果操作符為null,結果為真
IS NOT NULL a is not null 如果操作符不為null,結果為真
BETWEEN a BETWEEN b and c 若 a 在 b 和 c 之間,則結果為真
like a like b SQL匹配,如果a匹配b,則結果為真
IN a in (a1,a2,a3......) 假設 a 在a1,或者a2其中的某個值,則結果為真
-- 模糊查詢
-- 查詢姓劉的同學
SELECT `sno`,`sname`
FROM `student` 
WHERE sname LIKE '劉%';

-- 查詢姓劉的同學,名字後面只有一個字
SELECT `sno`,`sname`
FROM `student` 
WHERE sname LIKE '劉_';

-- 查詢姓劉的同學,名字後面只有2個字
SELECT `sno`,`sname`
FROM `student` 
WHERE sname LIKE '劉__';

-- 查詢名字中間有 ‘嘉’字的同學
SELECT `sno`,`sname`
FROM `student` 
WHERE sname LIKE '%嘉%';

-- -----------IN-------------------------------------
-- 查詢指定的學員資訊--1001 1002 1003
SELECT `sno`,`sname`
FROM `student`
WHERE sno IN ('1001','1002','1003');

-- 查詢在北京的人
SELECT sno ,sname
FROM `student`
WHERE `address` IN ('北京');

-- 查詢地址為空的學生
SELECT `sno`,`sname`
FROM `student`
WHERE `address` = ' ' OR `address` IS NULL

-- 查詢有出生日期的同學,意思就是出生日期不為空
SELECT `sno`,`sname`
FROM `student`
WHERE `bornDate` IS NOT NULL

4.4、 聯表查詢

JOIN對比

---------------------聯表查詢--------------------------
-- 1、分析需求<分析需要的資料來自那幾個表>
-- 2、確定使用什麼查詢  上面的7種
-- 3、使用共同的屬性來連線屬性

-- 查詢參加考試的同學資訊及成績
SELECT s.sno,`sname`,`cno`,`grade`
FROM student AS 's'
INNER JOIN SC AS 'r' -- 連線兩個表並取別名
ON s.sno = r.sno

-- Right JOIN 
SELECT s.sno,`sname`,`cno`,`grade`
FROM student AS 's'  -- 取別名可以 一個空格解決
RIGHT JOIN SC AS 'r' -- 連線兩個表並取別名
ON s.sno = r.sno

-- LIFT JOIN
SELECT s.sno,`sname`,`cno`,`grade`
FROM student AS 's'  -- 取別名可以 一個空格解決
LEFT JOIN SC AS 'r' -- 連線兩個表並取別名
ON s.sno = r.sno

-- 左表和右表的位置
-- 是由LIGHT JOIN 前後的位置決定的,join之前的就是左表,後邊就是右表
操作 描述
INNER JOIN(並集) 如果表中至少有一個匹配就返回行<元組>,
LEFT JOIN 會從左表中返回所有的值,即使在右表中沒有匹配到。-----例子:kuangshen同學沒有考試,會有記錄,但是成績為NULL
RIGHT JOIN 會從右表中返回所有的值,即使在左表中沒有匹配到。
-- 查詢缺考的同學
SELECT s.sno,`sname`,`cno`,`grade`
FROM student AS 's'  
LEFT JOIN SC AS 'r'
ON s.sno = r.sno
WHERE grade IS NULL;

join <連線的表>on <判斷的條件> 是連線查詢

WHERE 等值查詢

-- 思考:查詢參加考試的同學的所有資訊,包括使用科目資訊
SELECT s.sno,`sname`,`cname`,`grade`
FROM student s 
Right Join sc r   -- 第一次連線
ON r.sno = s.sno
Inner JOIN course sub   -- 第二次連線
ON  r.cno = sub.cno

-- 假設存在一種多張表查詢,慢慢來,先查詢兩張表再慢慢增加

4.6、自連線以及聯表查詢

自連線: 瞭解

自己的表和自己的表連線,核心:一張表拆成兩個一樣的表來即可

父表

categoryid categoryName
2 資訊科技
3 軟體開發
5 美術設計

子表

pid categoryid categoryName
3 4 資料庫
2 8 辦公資訊
3 6 Web開發
5 7 ps技術

操作:查詢父類對應的子類關係

父類 子類
資訊科技 辦公資訊
軟體開發 資料庫
美術設計 web開發
軟體開發 ps技術
-- 查詢父子資訊
SELECT a.`categoryName` AS '父欄目',b.`categoryName` AS '子欄目'
FROM `category` AS a,`category` AS b
WHERE a.`categoryid` = b.`pid`;

-- 查詢學員所屬的年級,學號,學生姓名,年級名稱
SELECT s.`sno`,`sname`,`gradeName`
FROM student s
INNER JOIN `SC` g
ON S.`GRADEID` = G.`GRADEID`;

-- 查詢科目所屬的年級(科目名稱,年級名稱)
SELECT c.`cno`,`gradeName`
FROM Course c
INNER JOIN `SC` g
ON c.`cno` = g.`cno`;

-- 查詢參加資料庫-1 考試的同學資訊,學號,學生姓名,科目名,分數
SELECT 
FROM student s
INNER JOIN `SC` g
ON s.sno = g.sno  -- 連線學生表和成績表
INNER JOIN course c
ON g.cno = c.cno   -- 連線科目表和 前面已經連線的表
WHERE c.cno = '資料庫-1';

select完整的語法結構: