MySQL(一)基本查詢正則表達式
場景:學生信息系統,包括學生信息、教師信息、專業信息和選課信息。安全
建表語句 :數據結構
-- 學生信息表 DROP TABLE IF EXISTS Students; CREATE TABLE Students( Student_ID INT PRIMARY KEY NOT NULL, Student_Name NVARCHAR(50), Student_Age INT, Student_Sex INT, Student_City NVARCHAR(50), Student_MajorID INT ); -- 專業信息表 DROP TABLE IF EXISTS Majors; CREATE TABLE Majors( Major_ID INT PRIMARY KEY NOT NULL, Major_Name NVARCHAR(50) ); -- 課程信息表 DROP TABLE IF EXISTS Courses; CREATE TABLE Courses( Course_ID INT PRIMARY KEY NOT NULL, Course_Name NVARCHAR(50) ); -- 選課信息表 DROP TABLE IF EXISTS SC; CREATE TABLE SC( SC_ID INT PRIMARY KEY NOT NULL, SC_StudentID INT, SC_CourseID INT, SC_Score INT );
插入數據語句:函數
-- 插入學生信息 INSERT INTO Students (Student_ID,Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID) VALUES (40001,'李煜',18,1,'南京',1001); INSERT INTO Students (Student_ID,Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID) VALUES (40002,'唐雲',20,1,'杭州',1002); INSERT INTO Students (Student_ID,Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID) VALUES (40003,'吳廣',19,1,'南京',1001); INSERT INTO Students (Student_ID,Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID) VALUES (40004,'劉雲宇',18,1,'武漢',1003); INSERT INTO Students (Student_ID,Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID) VALUES (40005,'王夢琦',17,0,'北京',1004);
-- 插入專業信息 INSERT INTO Majors (Major_ID,Major_Name) VALUE(1001,'軟件工程'); INSERT INTO Majors (Major_ID,Major_Name) VALUE(1002,'土木工程'); INSERT INTO Majors (Major_ID,Major_Name) VALUE(1003,'信息安全'); INSERT INTO Majors (Major_ID,Major_Name) VALUE(1004,'工商管理');
-- 插入課程信息 INSERT INTO Courses (Course_ID,Course_Name) VALUE (1001,'高等數學'); INSERT INTO Courses (Course_ID,Course_Name) VALUE (1002,'大學英語'); INSERT INTO Courses (Course_ID,Course_Name) VALUE (1003,'數據結構'); INSERT INTO Courses (Course_ID,Course_Name) VALUE (1004,'結構力學'); INSERT INTO Courses (Course_ID,Course_Name) VALUE (1005,'日語');
-- 插入選課信息 INSERT INTO SC (SC_ID,SC_StudentID,SC_CourseID,SC_Score) VALUE(100001,40001,1001,2); INSERT INTO SC (SC_ID,SC_StudentID,SC_CourseID,SC_Score) VALUE(100002,40001,1002,3); INSERT INTO SC (SC_ID,SC_StudentID,SC_CourseID,SC_Score) VALUE(100003,40002,1001,2); INSERT INTO SC (SC_ID,SC_StudentID,SC_CourseID,SC_Score) VALUE(100004,40003,1003,3); INSERT INTO SC (SC_ID,SC_StudentID,SC_CourseID,SC_Score) VALUE(100005,40004,1004,2);
1.基礎查詢spa
做用:查詢某數據表中的某些數據列的數據3d
語法:code
SELECT 列名1,列名2,列名N FROM 表名
實例:blog
1.查詢學生信息表中的ID,年齡,性別。排序
SELECT Student_ID,Student_Name,Student_Sex FROM Students;
2.條件查詢數學
做用:
查詢某數據表中的某些數據列的數據
語法:
SELECT 列名1,列名2,列名N FROM 表名 WHERE 列名 運算符 值
主要運算符
運算符 | 描述 |
= | 等於 |
<> 或 != | 不等於 |
< | 小於 |
<= | 小於等於 |
> | 大於 |
>= | 大於等於 |
BETWEEN......AND...... | 在某個範圍內 |
IS NULL | 爲NULL |
AND | 而且 |
OR | 或者 |
IN | 是 |
NOT | 非 |
LIKE | 模糊查詢 |
REGEXP | 正則表達式 |
主要通配符
通配符 | 描述 |
_ | 匹配單個字符 |
% | 匹配任意個字符 |
. | 匹配任意單個字符 |
[] | 匹配[]中的任意一個字符 |
* | 匹配零個或多個在它前面的東西 |
^ | 以什麼開始 |
$ | 以什麼結尾 |
實例:
1.查詢學生信息表中年齡爲18的學生信息。
SELECT*FROM Students WHERE Student_Age = 18;
2.查詢學生信息表中年齡不爲18的學生信息。
SELECT*FROM Students WHERE Student_Age <> 18;
3.查詢學生信息表中年齡小於18的學生信息。
SELECT*FROM Students WHERE Student_Age < 18;
4.查詢學生信息表中年齡小於等於18的學生信息。
SELECT*FROM Students WHERE Student_Age <= 18;
5.查詢學生信息表中年齡大於18的學生信息。
SELECT*FROM Students WHERE Student_Age > 18;
6.查詢學生信息表中年齡大於等於18的學生信息。
SELECT*FROM Students WHERE Student_Age >=18;
7.查詢學生信息表中年齡17-19的學生信息。
SELECT*FROM Students WHERE Student_Age BETWEEN 17 and 19;
8.查詢學生信息表中姓名爲null的學生ID
SELECT Student_ID FROM Students WHERE Student_Name IS NULL;
9.查詢來自於南京而且年齡爲19的學生信息
SELECT * FROM Students WHERE Student_City = '南京' AND Student_Age = 19;
10.查詢來自於南京或者武漢的學生信息
SELECT * FROM Students WHERE Student_City ='南京' OR Student_City ='武漢';
SELECT * FROM Students WHERE Student_City IN('南京','武漢');
11.查詢姓名中不含有云的學生信息
SELECT * FROM Students WHERE Student_Name NOT LIKE'%雲%';
12.查詢姓唐的同窗信息
SELECT * FROM Students WHERE Student_Name REGEXP '^唐'
3.ORDER BY
做用:對須要查詢後的結果集進行排序
標識 | 含義 | 說明 |
ASC | 升序 | 默認 |
DESC | 倒序 |
實例:
1.查詢學生信息表中的信息表而且按照年齡升序排列 若是年齡相同則按照ID降序排列
SELECT * FROM Students ORDER BY Student_Age,Student_ID DESC;
4.AS
做用:爲表名或者列名指定別名
實例:
1.將結果列改成指定的名稱
SELECT Student_Name AS '姓名',Student_Sex AS '性別',Student_Age AS'年齡' FROM Students
2.使用表別名來查詢李煜的選課信息
SELECT S.Student_ID,S.Student_Name,C.Course_Name,SC_Score FROM (SELECT Student_ID,Student_Name FROM Students WHERE Student_Name = '李煜') AS S LEFT JOIN SC ON S.Student_ID = SC_StudentID LEFT JOIN Courses AS C ON SC_CourseID = C.Course_ID
5.DISTINCT
做用:查詢結果去除重複的
語法:
-- 查重依據爲 DISTINCT後的全部列名 SELECT DISTINCT 列名 FROM 表名 -- 查重依據爲 GROUP BY後的全部列名 SELECT DISTINCT 列名 FROM 表名 GROUP BY 列名
實例:
1.查詢學生表中的姓名和年齡並去除重複的
SELECT DISTINCT Student_name,Student_age FROM Students
2.查詢學生表中的姓名和年齡並去除年齡重複的
SELECT DISTINCT Student_name,Student_age FROM Students GROUP BY Student_Age
6.GROUP BY
做用:根據指定的一個列或多個列對查詢結果進行分組
實例:
1.查詢專業分佈狀況
SELECT Student_MajorID,COUNT(Student_ID) FROM Students GROUP BY Student_MajorID
2.刪除重複的學生信息,並保留最新的那條
-- 先插入兩條重複的數據 INSERT INTO Students (Student_ID,Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID) VALUES (40007,'沈鵬',17,0,'大理',1004); INSERT INTO Students (Student_ID,Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID) VALUES (40008,'沈鵬',17,0,'大理',1004);
DELETE FROM Students WHERE Student_ID NOT IN (SELECT * FROM (SELECT MAX(Student_ID) FROM Students GROUP BY Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID)AS S)
7.LIMIT
做用:LIMIT 子句能夠被用於強制 SELECT 語句返回指定的記錄數
語法:
-- 當LIMIT 後面的參數只有一個時爲條數,而默認偏移量爲0 SELECT 列名 FROM 表名 LIMIT 偏移量,條數
實例:
1.查詢學生信息表中年齡最大的三位同窗的信息
SELECT * FROM Students ORDER BY Student_Age DESC LIMIT 3
2.查詢年齡第二到第四的學生信息
SELECT * FROM Students ORDER BY Student_Age DESC LIMIT 1,4
8.HAVING
做用:having字句能夠讓咱們篩選成組後的各類數據,通常而言就是能夠在條件裏面用聚組函數函數。
語法:
SELECT 列名 FROM 表名 GROUP BY 列名 HAVING 聚合函數 運算符 值
實例:
查詢平均年齡大於18的專業ID和人數
SELECT Student_MajorID,COUNT(Student_ID)FROM Students GROUP BY Student_MajorID HAVING AVG(Student_Age) > 18
9.CASE WHEN
做用:用於計算條件列表並返回多個可能結果表達式之一
語法:
-- 表達式語法 CASE 列名 WHEN 值 THEN 值 [ ...n ] ELSE 值 END -- 搜索式語法 CASE WHEN 布爾表達式 THEN 值 [ ...n ] ELSE 值 END
實例:
查詢男性年齡大於18女性大於16的學生信息
SELECT * FROM Students WHERE CASE Student_Sex WHEN 1 THEN Student_Age>=19 WHEN 0 THEN Student_Age >=16 END
分別統計男性女性中的成年未成年的人數
SELECT CASE Student_Sex WHEN 0 THEN '女' WHEN 1 THEN '男' END AS '性別', SUM(CASE WHEN Student_Age >=18 THEN 1 ELSE 0 END) AS'成年', SUM(CASE WHEN Student_Age <18 THEN 1 ELSE 0 END) AS'未成年' FROM Students GROUP BY Student_Sex