MySQL-資料查詢語言(DQL)
一、select指令:
SELECT [ALL | DISTINCT]{ * | table.* | [ table.field1 [ as alias1] [, table.field2[as alias2]][, …]] }
FROM table_name [ as table_ alias ]
[ left|out|inner join table_name2 ] #聯合查詢
[ WHERE … ] #指定結果需滿足的條件
[ GROUP BY …] #指定結果按照哪幾個字段來分組
[ HAVING …] #過濾分組的記錄必須滿足的次要條件
[ ORDER BY… ] #指定查詢記錄按一個或者多個條件排序
[ LIMIT { [ offset,] row_count | row_count OFFSET offset }] ; #指定查詢的記錄從哪條至哪條
[] 括号代表可選的;
{} 括号代表必須的;
# MySQL語句中的注釋符,也可以用
1、查詢所有字段:查詢表中所有的資料列結果,采用“*”符号。
文法:select * from 表名;
例:select * from student;
2、查詢指定字段:查詢表中指定字段資料列結果,采用“字段名”。
文法:select 字段名1,字段名2,...,字段名n from 表名;
例:select studentno,studentname,address from student;
3、AS子句:
AS子句作用:
1)可給資料列(字段)取一個新别名
2)可給表取一個新别名
3)可把經計算或總結的結果用另外一個新名稱來代替
AS子句用法
例:
1)字段取别名---顯示清晰
select subjectno as "課程号",subjectname as "課程名" from subject;
2)給表取别名---友善引用
select * from student as s;
select s.subjectno from subject as s;
3)給表達式取别名---友善顯示
select studentno,sturesult+10 "新成績" from result;
注:AS 也可省略不寫
4、DISTINCT關鍵字
作用:1.去掉SELECT查詢傳回的記錄結果中重複的記錄(所有傳回列的值都相同),隻傳回一條。
文法:SELECT DISTINCT 字段名1, 字段名2... FROM 表名
例:
select distinct gradeName from grade;
注:ALL 關鍵字是預設的,傳回所有的記錄,與之相反。
5、JOIN聯表查詢
1)左外連接配接(LEFT JOIN):從左表(table_1)中傳回所有的記錄,即便在右(table_2)中沒有比對的行。
文法:
SELECT 字段1,字段2,… FROM table_1 LEFT JOIN table_2 ON table_1.字段x = table_2.字段y;
例:
select s.studentno,r.sturesult from student s left join result r
on s.studentno=r.studentno
2)右外連接配接(RIGHT JOIN):從右表(table_2)中傳回所有的記錄,即便在左(table_1)中沒有比對的行。
文法:
SELECT 字段1,字段2,… FROM table_1 RIGHT JOIN table_2 ON table_1.字段x = table_2.字段y;
例:
select s.studentno,r.sturesult from student s right join result r
on s.studentno=r.studentno
3)内連接配接 (INNER JOIN):在表中至少一個比對時,則傳回記錄。
文法:
SELECT 字段1,字段2,… FROM table_1 INNER JOIN table_2 ON table_1.字段x = table_2.字段y;
例:
select studentname,sturesult from student inner join result
on student.studentno=result.studentno
注:
# INNER JOIN 與 JOIN 是相同的;
# 如table_1中的行在table_2中沒有比對,則不傳回;
6、WHERE條件
WHERE條件用于檢索資料表中符合條件的記錄,搜尋條件可由一個或多個邏輯表達式組成,結果一般為真或假。
1)邏輯操作符:
操作符名稱 | 文法 | 描述 |
AND或&& | aANDb或a&&b | 邏輯與,同時為真結果才為真 |
OR或|| | aORb或a||b | 邏輯或,隻要一個為真,則結果為真 |
NOT或! | NOTa或!a | 邏輯非,若操作數為假,結果則為真 |
2)比較操作符:
操作符名稱 | 文法 | 描述 |
IS NULL | A IS NULL | 若操作符為NULL,則結果為真 |
IS NOT NULL | A IS NOT NULL | 若操作符不為NULL,則結果為真 |
BETWEEN | A BETWEEN b AND c | 若a範圍在b與c之間則結果為真 |
LIKE | A LIKE b | SQL模糊比對,若a比對b,則結果為真 |
IN | A IN(a1,a2,a3,„.) | 若a等于a1,a2„中的某一個,則結果為真 |
注:
1、數值資料類型的記錄之間才能進行算術運算;
2、相同資料類型的資料之間才能進行比較;
3)NULL空值條件查詢:
NULL代表“無值”。
差別于零值0和空符串“ ”。
隻能出現在定義允許為NULL的字段。
須使用 IS NULL 或 IS NOT NULL 比較操作符去比較。
4)BETWEEN範圍查詢:
根據一個範圍值來檢索
文法:
SELECT 字段1,字段2,… FROM 表名
WHERE 字段名 BETWEEN 值1 AND 值2
例:
select * from result
where sturesult between 60 and 70;
等同于
select * from result
where sturesult>=60 and sturesult<=70;
注:BETWEEN範圍等同于 >= 和 <= 聯合使用
5)IN範圍查詢
文法:SELECT 字段列1,字段2,… FROM 表名 WHERE 字段x IN ( 值1,值2,值3…)
例:
select * from student
where studentno in(1002,1004,1006);
等同于
select * from student
where studentno=1002 or studentno=1004 or studentno=1006;
注:
1. 查詢的字段x的值,至少與括号中的一個值相同
2. 多個值之間用英文逗号隔開
6)LIKE模糊查詢
文法:SELECT 字段列1,字段2,… FROM 表名 WHERE 字段x LIKE ‘%或_模糊比對’;
例:
1.查詢名字中第一個字是‘李’的同學的學生資訊
select * from student
where studentname like '李%';
2.查詢名字中第二個字是‘小’的同學的學生資訊
select * from student
where studentname like '%小%';
3.查詢最後一個字是‘峰’的同學的學生資訊
select * from student
where studentname like '%峰';
4.查詢姓‘李’且名字隻有兩個字的同學的學生資訊
select * from student
where studentname like '李_';
5.查詢年級名中帶有‘三’的年級名,并且去重顯示
select distinct gradename from grade
where gradename like '%三';
注:在WHERE子句中,使用LIKE關鍵字進行模糊查詢,與“%”一起使用,表示比對0或任意多個字元。與“_”一起使用,表示比對單個字元。
7、GROUP BY分組
使用GROUP BY關鍵字對查詢結果分組,對所有的資料進行分組統計,分組的依據字段可以有多個,并依次分組,與HAVING結合使用,進行分組後的資料篩選。
文法:
SELECT 字段列1,字段2,… FROM 表名
GROUP BY 字段x
HAVING 條件;
例:
select subjectno,count(*) from result
group by subjectno;
例:
select subjectno,avg(sturesult),max(sturesult),min(sturesult) from result
group by subjectno
having avg(sturesult)>=60;
8、ORDER BY排序
ORDER BY排序查詢,對SELECT語句查詢得到的結果,按某些字段進行排序與DESC(降序)或ASC(升序)搭配使用,預設為ASC(升序)
文法:
SELECT 字段列1,字段2,… FROM 表名
ORDER BY 字段x DESC(降序)或ASC(升序)
例:
升許
select * from result
order by sturesult
降序
select * from result
order by sturesult desc
9、LIMIT行數
LIMIT用于限制SELECT傳回結果的行數
文法:
LIMIT [m,] n或LIMIT n OFFSET m
m 制定第一個傳回記錄行的偏移量
n 制定傳回記錄行的最大數目
例:
從第1行開始傳回3行内容
select studentno,sturesult from result
order by sturesult desc
limit 3
從第4行開始傳回3行内容
select studentno,sturesult from result
order by sturesult desc
limit 3 offset 3
注:
m不指定則偏移量為0,從第一條開始傳回前n條記錄
LIMIT 常用于分頁顯示