1. 程式人生 > >MySQL 查詢語句select講解與練習

MySQL 查詢語句select講解與練習

mysql 查詢語句select講解與練習

select語句執行流程:

START————>FROM------>WHERE(選擇,合適的行)--------->GROUP BY(分組)---------->HAVING(對分組進行過濾)————>ORDER BY(排序)————>SELECT(投影,合適的字段)————>LIMIT————>end result


select單表查詢:


DISTINCT:數據去重 例:select DISTINCT gender from students;

VARIABLES: mysql服務器自身內置變量 例:select variables like ‘query%‘;

AS:顯示時使用別名 例:select name as stuname from students;

IN: 或 例:select name,age from students where age in (18,19,25);

is null: 取值為空 is not null: 取值不為空

like: %任意長度任意字符 _任意單個字符

RLIKE:使用正則表達式

GROUP:根據指定的條件把查詢結果進行分組以用於做聚合運算

內置函數:avg() , max() , min() , count() , sum()

order by:根據指定字段對查詢結果進行排序

升序:ASC(默認) 降序:DESC

LIMIT [[offset,]row_count] :對查詢的結果進行輸出行數數量的限制

對查詢結果中的數據請求施加‘鎖’:

FOR UPDATE :寫鎖,獨占鎖,排他鎖

LOCK IN SHARE MODE :讀鎖,共享鎖


例:查看男女同學的平均年齡

select avg(age),gender from students group by gender ;

例:查看男女同學的平均年齡大於20的組

select avg(age),gender as 年齡 from students group by gender having 年齡>20;

例:查看姓名,年齡以年齡倒序排序

select name,age from students order by age desc;

例:

select name,age from students order by age limit 10,10 ;查看前10個之後的10個


練習題

1. 在students表中,年齡大於25,且為男性的同學的姓名和年齡

select name,age  from students  where gender=‘m‘ and age>25;

2. 以classID為分組依據,顯示每組的平均年齡

select  avg(age),classID from students where classID is not null group by classID;

3. 顯示第二題中平均年齡大於30的分組及平均年齡

select  avg(age),classID from students  group by classID  having avg(age)>30;

4. 顯示名字以L開頭的同學的相關信息

select * from students  where name like  ‘L%‘;

5. 顯示teacherID非空的同學的相關信息

select * from students  where teacherID is not null;

6. 以年齡排序後顯示年齡最大的前10位同學的信息

select * from students  order by  age DESC limit 10;

7. 查詢年齡大於等於20歲,小於等於25歲的同學的信息,用三種方法

select * from students where age>=20 and age<=25;
select * from students  where age between 20 and  25;
select * from students  where age in (20,21,22,23,24,25);


select多表查詢:



交叉連接:又稱笛卡爾乘積,結果兩表行數相乘(不常用)。 例:select * from table1,table2;

內連接:

等值連接:讓兩張或多張表按“等值”建立連接關系(常用)

例:

select * from students,teachers  where  students.teacherID=teachers.TID ;
select s.name,c.class from students as s,classes as c  where s.classID=c.classID;

不等值連接:

自然連接:

自連接:一張表中一個字段的值等於另一個字段的值。

例:

select  s.name,t.name  from students  as  s,students  as t where  s.TeacherID=t.stuID;

外連接:

左外連接:以左側表為準,以某一字段等值建立連接關系,如左表有的右表也有就一一對應,如左表有右表沒有左表顯示所有,右表留空對應。(顯示左表所有,右表有的就對應沒有就留空)

使用方法:FROM tb1  LEFT  JOIN  tab2  ON  tab1.col1=tab2.col;

例:

select s.name,c.class  from students  as s  LEFT  JOIN  classes  as  c  ON  s.classID=c.classID;

右外連接:

使用方法:FROM tb1  RIGHT  JOIN  tab2  ON  tab1.col1=tab2.col

子查詢:在查詢語句中嵌套著查詢語句(mysql支持不好,少用)

基於某語句結果再次進行查詢

用在where子句中的子查詢:

(1) 用在比較表達式中的子查詢,子查詢僅能返回單個值:

例:

select name,age  from  students  where  age>(select avg(age) from students);

(2)用在IN中的子查詢:子查詢應該單鍵查詢並返回一個或多個值構成列表

例:查找老師年齡和同學年齡相等的

select  name,age  from students where age  in (select age from teachers);

(3)用於EXISTS

用於from子句中的子查詢:

例:

select s.aage,s.classID from (select avg(age) as aage,classID from students where classID is not null group by classID) as s where s.aage30;

聯合查詢:把兩個表查詢的結果合並成一個。

例:

select name,age  from  students  UNION select  name,age  from teachers;


本文出自 “linux運維” 博客,請務必保留此出處http://arm2012.blog.51cto.com/2418467/1980507

MySQL 查詢語句select講解與練習