1. 程式人生 > 實用技巧 >MySQL(3):SELECT語法

MySQL(3):SELECT語法

一,資料庫語句

資料庫資料是通過DML語句管理資料庫資料,包括:

  • INSERT (新增資料語句)
  • UPDATE (更新資料語句)
  • DELETE (刪除資料語句)

1:INSERT (新增資料語句)

INSERT INTO 表名[(欄位1,欄位2,欄位3,...)] VALUES('值1','值2','值3')

注意 :

1,欄位或值之間用英文逗號隔開;
2'欄位1,欄位2...'該部分可省略 , 但新增的值務必與表結構,資料列,順序相對應,且數量一致;
3,可同時插入多條資料 , values 後用英文逗號隔開

2:UPDATE (更新資料語句)

UPDATE 表名 SET column_name=value [,column_name2=value2,...] [WHERE
condition];

#注意 :
1,column_name 為要更改的資料列;
2,value 為修改後的資料 , 可以為變數 , 具體指 , 表示式或者巢狀的SELECT結果;
3,condition 為篩選條件 , 如不指定則修改該表的所有列資料

3:DELETE (刪除資料語句)

DELETE FROM 表名 [WHERE condition];

#注意 : condition為篩選條件 , 如不指定則刪除該表的所有列資料

二,DQL( Data Query Language 資料查詢語言 )

查詢資料庫資料 , 如SELECT語句,簡單的單表查詢或多表的複雜查詢和巢狀查詢,DQL是資料庫語言中最核心,最重要的語句也是使用頻率最高的語句

1,指定查詢欄位

# 查詢所有學生資訊
SELECT * FROM student;

# 查詢指定列(學生的學號和姓名)
SELECT studentno,studentname FROM student;

2,DISTINCT關鍵字的使用

作用 : 去掉SELECT查詢返回的記錄結果中重複的記錄(返回所有列的值都相同),只返回一條

# 檢視哪些同學參加了考試(學號)--去除重複項
SELECT * FROM result; 
SELECT studentno FROM result; 
SELECT DISTINCT studentno FROM result;

#說明:一個學生有很5課成績,但是隻有他1個學號,如果不加DISTINCT,


只執行SELECT studentno FROM result;,那麼會根據他的5課成績查出5個學號的,
如果加了DISTINCT,去掉重複項,那麼就只有一個學號了

3,where條件語句

用於檢索資料表中符合條件的記錄,搜尋條件可由一個或多個邏輯表示式組成 , 結果一般為真或假

# 查詢考試成績在95-100之間的學生學號
SELECT Studentno,StudentResult 
FROM result
WHERE StudentResult>=95 AND StudentResult<=100;

# AND也可以寫成 &&
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult>=95 && StudentResult<=100;

# 除了1000號同學,要其他同學的成績
SELECT studentno,studentresult
FROM result
WHERE studentno!=1000;

# 使用NOT
SELECT studentno,studentresult
FROM result
WHERE NOT studentno=1000;

4,模糊查詢

#查詢姓李的同學的學號及姓名
#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 '李__';

#查詢姓名中含有 文 字的
SELECT studentno,studentname FROM student
WHERE studentname LIKE '%文%';

#查詢學號為1000,1001,1002的學生姓名
SELECT studentno,studentname FROM student
WHERE studentno IN (1000,1001,1002);

#查詢地址在北京,南京,河南洛陽的學生學號姓名
SELECT studentno,studentname,address FROM student
WHERE address IN ('北京','南京','河南洛陽');

#查詢出生日期沒有填寫的同學
#不能直接寫=NULL , 這是代表錯誤的 , 用 is null
SELECT studentname FROM student
WHERE BornDate IS NULL;

#查詢出生日期填寫的同學
SELECT studentname FROM student
WHERE BornDate IS NOT NULL;

#查詢沒有寫家庭住址的同學(空字串不等於null)
SELECT studentname FROM student
WHERE Address='' OR Address IS NULL;

5,連線查詢

連線查詢: 如需要多張資料表的資料進行查詢,則可通過連線運算子實現多個查詢
1,內連線 inner join:查詢兩個表中的結果集中的交集
2,外連線 outer join:
2-1,左外連線 left join:以左表作為基準,右邊表來一一匹配,匹配不上的,返回左表的記錄,右表以NULL填充
2-2,右外連線 right join:以右表作為基準,左邊表來一一匹配,匹配不上的,返回右表的記錄,左表以NULL填充

#查詢參加了考試的同學資訊(學號,學生姓名,科目編號,分數)
SELECT * FROM student;
SELECT * FROM result;

#查詢student表的學生學號=result表的學生學號時的同學資訊(學號,學生姓名,科目編號,分數)
#內連線
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno

# 右連線(也可實現)
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
RIGHT JOIN result r
ON r.studentno = s.studentno

# 等值連線
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s , result r
WHERE r.studentno = s.studentno

# 左連線 (查詢了所有同學,不考試的也會查出來)
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
LEFT JOIN result r
ON r.studentno = s.studentno

#查一下缺考的同學(左連線應用場景)
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
LEFT JOIN result r
ON r.studentno = s.studentno
WHERE StudentResult IS NULL

6,排序和分頁

ORDER BY 語句用於根據指定的列對結果集進行排序,預設按照ASC升序對記錄進行排序。

# 查詢C語言-1的考試結果(學號 學生姓名 科目名稱 成績)
# 按成績降序排序
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON r.subjectno = sub.subjectno
WHERE subjectname='C語言-1'
ORDER BY StudentResult DESC , studentno  

# 每頁顯示5條資料
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN subject sub
ON r.subjectno = sub.subjectno
WHERE subjectname='C語言-1'
ORDER BY StudentResult DESC , studentno
LIMIT 0,5