可以使用Sqliteviz這個網站免費編寫sql語句,它能夠讓用戶直接在瀏覽器內練習SQL的語法,不需要安裝任何軟件。
鏈接如下:
sqliteviz
注意:
在轉寫SQL語法時,關鍵字之間有一個特定的順序,這個順序會影響到SQL語法是否能正確地執行,順序如下:
SELECT(讀取)——FROM(來源)——WHERE(條件)——GROUP BY(分組)——HAVING(條件)——ORDER BY(順序)——LIMIT(條數限制)
比如:order by要排在limit之前
group by必須排在having之前,因為having是用來篩選分組地結果
目錄
1.創建數據庫表
2. 向表中插入數據
3.刪除整個數據表
4.刪除表中全部數據
5.查詢表中相關信息
①limit用法
②Where用法
③order by語法
④通配符用法?
⑤between and用法?
⑥avg、sum、max、min、count、round等用法
⑦group by用法
⑧Having用法
注意:group by分組后不能用where進行篩選了,得用having進行篩選!
⑨DISTINCT用法
⑩UPDATE SET的用法
?Left join的用法
?Inner left的用法
6.left join 和inner join的區別
1.創建數據庫表
CREATE TABLE students (student_id INT PRIMARY KEY, -- 學號(主鍵)name VARCHAR(50), -- 姓名class VARCHAR(50), -- 班級score DECIMAL(5,2), -- 成績(百分制)club_id INT -- 社團編號
);
其中
CREATE TABLE students ( ... );
- 創建一個名為?
students
?的新表。 - 表中包含多個字段(列),括號內定義這些字段。
student_id INT PRIMARY KEY
- 字段名:?
student_id
- 類型:?
INT
(整數) - 約束:?
PRIMARY KEY
- 表示該字段是這張表的主鍵,唯一標識每一條記錄。
- 主鍵不能重復,也不能為 NULL。
name VARCHAR(50)
- 字段名:?
name
- 類型:?
VARCHAR(50)
(可變長度字符串,最大長度為 50 個字符)
class VARCHAR(50)
- 字段名:?
class
- 類型:?
VARCHAR(50)
,表示學生所屬班級名稱。
score DECIMAL(5,2)
- 字段名:?
score
- 類型:?
DECIMAL(5,2)
,表示精度為 5 位、小數點后保留 2 位的十進制數。- 最大值可以是?
999.99
- 最大值可以是?
club_id INT
- 字段名:?
club_id
- 類型:?
INT
,表示學生所加入社團的編號。
2. 向表中插入數據
INSERT INTO students (student_id, name, class, score, club_id)
VALUES(1001, '張三', '高一(1)班', 92, 101),(1002, '李四', '高一(2)班', 78, 103),(1003, '王五', '高一(1)班', 58, 102),(1004, '趙六', '高一(3)班', 98, 101),(1005, '錢七', '高一(2)班', 89, NULL),(1006, '孫八', '高一(3)班', 84, 103),(1007, '周九', '高一(1)班', 86,102),(1008, '吳十', '高一(2)班', 94,104),(1009, '鄭十一', '高一(3)班', 68,103),(1010, '王十二', '高一(1)班', 72,101),(1011, '陳十三', '高一(2)班', 84,102),(1012, '劉十四', '高一(3)班', 89,103),(1013, '楊十五', '高一(1)班', 91,101),(1014, '黃十六', '高一(2)班', 92,104),(1015, '徐十七', '高一(3)班', 52,103),(1016, '何十八', '高一(1)班',85,NULL),(1017, '呂十九', '高一(2)班', 76,102),(1018, '施二十', '高一(3)班', 64,101),(1019, '沈二十一', '高一(1)班', 100,101),(1020, '朱二十二', '高一(2)班',99,102);
3.刪除整個數據表
DROP TABLE students;
4.刪除表中全部數據
DELETE FROM students; 或者
DELETE
FROM students
where club_id=104;
5.查詢表中相關信息
SELECT * FROM "students";
SELECT 姓名,班級,成績 FROM "students";
①limit用法
SELECT * FROM "students" limit 5; --顯示前5行數據
SELECT * FROM "students" limit 5 OFFSET 5; --跳過前5行,接著顯示后5行
SELECT * FROM "students" limit 5 OFFSET 10; --第10行后邊的5行,即跳過前10行,顯示后邊的5行
②Where用法
SELECT * from students where 學號 = 1001;
SELECT * from students where 學號 <> 1001; 學號不等于1001的其它數據
SELECT * from students where 班級 = '高一(1)班';
③order by語法
SELECT * from students where 班級 <> '高一(2)班' ORDER BY 班級,成績 DESC;--降序按照班級升序、成績降序排列
④通配符用法?
SELECT * from students where 姓名 LIKE '張%'--%多個字元
--LIKE '張%':表示以“張”開頭,后面可以有任意多個字符(包括 0 個)。
--% 是通配符,代表 任意數量的字符(包括沒有字符)。SELECT * from students where 姓名 LIKE '張_'--_一個字源
查詢姓名為“張”姓且全名只有兩個字的學生
_ 是通配符,代表 一個且僅有一個字符。
⑤between and用法?
SELECT * from students where 成績>=80 and 成績<=90;
SELECT * from students where 成績 BETWEEN 80 AND 90;SELECT * from students where 成績 BETWEEN 80 AND 90 AND 班級='高一(2)班';SELECT * from students where 成績 BETWEEN 80 AND 90 AND (班級='高一(2)班' or 班級='高一(1)班');SELECT * from students where 成績 BETWEEN 80 AND 90 AND (班級 in ('高一(2)班','高一(1)班'));
⑥avg、sum、max、min、count、round等用法
SELECT AVG(成績),SUM(成績),MAX(成績),MIN(成績),COUNT(成績) FROM students;
SELECT AVG(成績) AS 成績平均,MAX(成績) as 最高分 FROM students;
SELECT ROUNd(AVG(成績),1) AS 成績平均,MAX(成績) as 最高分 FROM students; --四舍五入保留一位小數
⑦group by用法
SELECT 班級,ROUNd(AVG(成績),1) AS 成績平均,MAX(成績) as 最高分 FROM students GROUP BY 班級 ORDER BY 成績平均 DESC;
⑧Having用法
SELECT 班級,ROUNd(AVG(成績),1) AS 成績平均 FROM students GROUP BY 班級 HAVING 成績平均>=80 ORDER BY 成績平均 DESC;
注意:group by分組后不能用where進行篩選了,得用having進行篩選!
⑨DISTINCT用法
SELECT DISTINCT club_id FROM students;
作用: 顯示所有出現過的 club_id 值(包括 NULL)。
DISTINCT 表示去重。SELECT COUNT(DISTINCT club_id) FROM students;
作用: 統計學生來自多少個不同的社團。
注意: NULL 值不會被計入統計結果。SELECT DISTINCT club_id FROM students WHere club_id is not null order by club_id;
查詢所有非空的不同社團編號,并排序:
⑩UPDATE SET的用法
更新數據,補充缺失值,刪除行
UPDATE students
set club_id=104
where student_id=1005;將 student_id = 1005 的學生的 club_id 更新為 104
這個操作通常用于補充缺失值(如之前該字段為 NULL)
?Left join的用法
SELECT s.name AS 姓名,s.club_id AS 社團編號,c.club_name AS 社團名稱
FROM students s
LEFT JOIN club c ON s.club_id = c.club_id
WHERE s.class = '高一(1)班';
查詢“高一(1)班”學生的姓名、社團編號和對應的社團名稱,并使用了 LEFT JOIN
來連接 students
和 club
表。
?Inner left的用法
SELECT s.name AS 姓名,s.club_id AS 社團編號,c.club_name AS 社團名稱
FROM students s
INNER JOIN club c ON s.club_id = c.club_id
WHERE s.class = '高一(1)班';
6.left join 和inner join的區別
LEFT JOIN
和 INNER JOIN
是 SQL 中最常用的兩種表連接方式(JOIN),它們用于將兩個或多個表根據某個關聯條件合并在一起。但它們在行為和結果上有著本質的區別。
Inner join(內連接)
- 只返回兩個表中“匹配”的行
- 如果左表某行在右表中沒有匹配的行,則不返回該行
- 相當于取兩個表的交集
LEFT JOIN(左連接 / 左外連接)
- 返回左表中的所有行
- 如果右表中沒有匹配的行,則用?
NULL
?填充右表的字段 - 不管有沒有匹配,左表數據都會保留
?