本文將從SQLite創建表單開始直到多表查詢進行介紹,以供新手練習使用,若對SQL有一定了解、只需瞭解多表查詢的童鞋可從中間分割線開始閱讀,分割線後依次介紹了最基礎的兩張表聯合查詢和三張表聯合查詢,多表查詢可參考三表聯合查詢。
首先創建一個教師表和一個學生表
教師表.png
學生表.png
對應教師表參數依次爲 教師姓名、教師工號、教學課程、課程編號
對應學生表參數依次爲 學生姓名、學生學號、課程編號、課程考試分數
創建教師表
CREATE TABLE TEACHER(ID INTEGER PRIMARY KEY AUTOINCREMENT,T_name TEXT,T_id INTEGER,COURSE TEXT,C_id TEXT)
添加教師數據
INSERT INTO TEACHER(T_name,T_id,COURSE,C_id) VALUES('趙老師',1000,'語文',1100); INSERT INTO TEACHER(T_name,T_id,COURSE,C_id) VALUES('錢老師',1001,'數學',1101); INSERT INTO TEACHER(T_name,T_id,COURSE,C_id) VALUES('孫老師',1002,'英語',1102);
創建學生表
CREATE TABLE STUDENT(ID INTEGER PRIMARY KEY AUTOINCREMENT,S_name,S_id INTEGER,C_id INTEGER,SCORE INTEGER)
添加學生數據
INSERT INTO STUDENT(S_name,S_id,C_id,SCORE) VALUES('張三',2017000,1101,75); INSERT INTO STUDENT(S_name,S_id,C_id,SCORE) VALUES('李四',2017001,1102,70); INSERT INTO STUDENT(S_name,S_id,C_id,SCORE) VALUES('王五',2017002,1101,90); INSERT INTO STUDENT(S_name,S_id,C_id,SCORE) VALUES('趙六',2017003,1100,58); INSERT INTO STUDENT(S_name,S_id,C_id,SCORE) VALUES('小明',2017004,1100,79); INSERT INTO STUDENT(S_name,S_id,C_id,SCORE) VALUES('小紅',2017005,1101,55);
開始多表查詢
INNER JOIN 關鍵字
(注:AS 關鍵字起到在SQL語句中創建對象的作用)
- 查詢學生都選了什麼課?(根據TEACHER表和STUDENT表中的共同)
SELECT s.S_name,t.COURSE FROM STUDENT AS s INNER JOIN TEACHER AS t WHERE s.C_id = t.C_id
查詢結果:學生選課.png
- 查詢每位老師所對的及格學生、學科和成績;及格情況查詢:
SELECT t.T_name,t.COURSE,s.S_name,s.SCORE FROM TEACHER AS t INNER JOIN STUDENT AS s ON t.C_id = s.C_id WHERE s.SCORE > 60;
查詢結果
及格情況.png
左外連接查詢介紹
LEFT JOIN關鍵字(也可寫作LEFT OUTER JOIN)
1.向教師表添加一條數據(該教師課程沒有學生選擇)INSERT INTO TEACHER(T_name,T_id,COURSE,C_id) VALUES('李老師',1003,'挖掘機原理',1110)
修改後教師表如圖
教師表+.png
- 首先我們以教師爲左側表查詢教師及其對應的學生 [李老師《挖掘機原理課》沒有學生,對應右側爲空(null)]
SELECT t.T_name,t.COURSE,s.S_name,s.SCORE FROM TEACHER AS t LEFT JOIN STUDENT AS s ON t.C_id = s.C_id
查詢結果左連接查詢.png
- 因爲SQLite不支持右外連接查詢,可將學生表作爲左側表,實現左右互換(因李老師的《挖掘機原理》沒有對應的左側學生表,所以李老師的課程未進行查詢,應不顯示也不爲空)
SELECT s.S_name,s.SCORE, t.T_name,t.COURSE FROM STUDENT AS s LEFT JOIN TEACHER AS t ON t.C_id = s.C_id
查詢結果學生爲左側表查詢.png
原文鏈接:https://www.jianshu.com/p/053488e520e7