1. 程式人生 > 其它 >MySQL(day 3)

MySQL(day 3)

技術標籤:個人學習感想mysql

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)*/
image-20210104205945249

語法: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 NuLLa is null
Between anda between B and C
likea like B,SQL匹配
INa 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;
--涉及多表查詢

總結

  1. SELECT 查詢的資料
  2. FROM 表
  3. 聯接方式 JOIN 聯接的表 ON 交叉條件
  4. 多張表查詢從兩張表開始

from a left join b 以a為基準查詢;

from a right join b 以b為基準

from a INNER join b 表中至少有一個匹配就返回行


1.5.2 自連線(瞭解)

自己的表與自己的表連線,核心是一張表拆成兩張表

在這裡插入圖片描述