1. 程式人生 > >select單表查詢,多表查詢,子查詢

select單表查詢,多表查詢,子查詢

DML:語句,常用的select ,insert into ,delete,updata

select 語句:

select 語句一般用法為: select 欄位名 from tb_name where 條件 ;

select 查詢語句型別一般分為三種:
單表查詢,多表查詢,子查詢

最簡單的單表查詢 : select * from tb_name;
*表示,所有欄位

查詢特定欄位(投影):
select 欄位名1,欄位名2, from tb_name;

where 語句過濾查詢(選擇)

select * from tb_name where 條件 ;

select 後面還可以跟上 關鍵字 distinct 表示某個欄位內重複的資料只顯示一次。比如,如果有個表students的欄位 gender(性別),裡面無非就是男或者女,我們檢視該欄位,就需要顯示每種類別一次就是要distinct
select distinct gender from students;


from 子句:
from 後面可以跟上一個表,多個表,或者其他select

跟上一個表就是單表查詢,跟上多個表就是多表查詢,跟上select 就是巢狀查詢(子查詢

因此from 就表示我們要查詢的關係。

where 子句:

where 子句 :就是布林關係表示式,一般 使用 > < >= <=
where 子句 數值不需要加引號, 字字元需要加引號
where 還可以跟上 邏輯 and or not
例如查詢 students 表中欄位age(年齡),在20-25期間的學生名字。
select Name,age from students where age >=20 and age <=25;

where 後面 跟上 like 關鍵詞:
like :後面一般跟上 % 表示任意長度任意字元 __ 表示單個字元

例如查詢students 表中 Name 欄位,以 y開頭所有資料,就需要使用like 匹配。
select Name from students where Name like 'y%';

查詢students 表中 Name 欄位,以y開頭後面跟上4個字元

select Name from student where Name like 'y____'

查詢students 表中 Name 欄位,包含了ing 的欄位。

select Name from students where Name like '%ing%';

查詢students 表中 Name 欄位以大寫 M,N,Y開頭的使用者

selcet Name from students where Name like 'M%' or Name like 'N%' or Name like '%Y';

或者使用 Rlike (正則表示式)。

select Name from students where Name Rlike '^[MNY].*$';

查詢students 表中年齡為 18,20,25的使用者

第一種方法:
select Name from students where age=18 or age=20 or age=25;

第二種方法:使用 in 關鍵字,後面跟上一個列表
select Name from student where age in (18,20,25);

students 中有個欄位課程(CID2)。查找出改欄位,裡面為空的欄位的,學生姓名 Name
select Name from students where CID2 is null ;
查詢不為空就是要 is not null

is null 和 is not null可以實現判斷欄位是否為空

order by 子句:

查詢後的結果排序:

就比如我們剛才的查詢,students 中有個欄位課程(CID2)。查找出改欄位,裡面為空的欄位的,學生姓名 Name ,如果我們想對結果進行排序。預設是升序asc 使用關鍵字 order by +需要排序的欄位 desc (降序)

select Name from students where CID2 is null order by Name desc;

as 子句

用於給欄位或者表使用別名。如果某欄位名稱比較長,或者表名字比較長

例如:
selcet Name as Na from students as stu;

limit 子句:

用於顯示 結果的前 N 行
只顯示前3行
select * from students limit 3;
只顯示3行,從第5行開始計算
select * from students limit 3,5;

group by 子句 :

用於分組,比如把students 表的 學生 按照男女進行分組

select age,Gender from students group by gender

這樣分出的只有兩個組,男的和女的

students 表中的欄位 有個課程的欄位 CID 求出該欄位中,需要將課程的人數,大於等於2的顯示出來

having 子句

只能和group by 搭配使用,使用group by 分組之後,再用having 過濾
select CID from students where having CID >=2

多表查詢 :

如果我們有兩張表 students (學生表)和 course (課程表,該表顯示了,每一個課程的編號(CID),名稱(Cname))。現在我們希望查詢,每一位學生,學習的第一門課程的,課程名稱是什麼。

select students.Name course.Cname from students ,courses where students.CID1=course.CID;
這樣的查詢就叫自然查詢。是建立在某兩個欄位建立起對應關係的基礎上

查詢只有有同學選修了某個課程就顯示出來,如果課程沒有則顯示為null
這樣就不能使用自然連線了,需要使用外連線

外連線分為:左外連線 left join tb_name on +連線條件
右外連線 right jion tb_name +連線條件

比如我們查詢每個同學選修的第一個課程名稱,如果課程不存在顯示null

select students.Name,course.Cname from students left join course on students.CID1=course.CID

查詢哪些課程有人選,顯示出同學名稱,沒有人選的,顯示null

select students.Name,course.Cname from students right join course on students.CID1=course.CID

子查詢:(select 查詢巢狀另外一個select)

查詢students表中,年齡大於平均年齡的同學
select Name from students where age > (select avg(age) from students);
其中 avg :是求平均值的函式

在比較操作符中使用子查詢:子查詢只能返回單個詞。
在 in 中使用子查詢