天天看點

MySQL-資料查詢語言(DQL)

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  常用于分頁顯示

繼續閱讀