mysql簡單查詢操作

來源:互聯網
上載者:User

標籤:

前面說了那麼多,現在終於到了我們廣大程式員最關心的”查詢”操作了。

查詢操作
-- 文法select [select選項] 欄位列表 [as] 欄位別名 /* from 資料來源 [where條件陳述式] [group by 子句] [having 子句] [order by 子句] [limit 子句];
select選項:

select 對查詢出來的結果的處理方式
All:預設的,保留所有的結果
Distinct:將查出來的結果,去掉重複項(所有欄位都相同)

欄位別名
-- 文法欄位 [as] 別名select studentid as "學生id",number as "學號", name "姓名" from my_student;

where子句

where子句:用來判斷篩選資料。
where子句返回結果: 0或者1, 其中0代表false,1代表true。

  • 判斷條件:
    比較子: >,<,>=,<=,<>,= ,like ,between and ,in ,not in
    邏輯運算子: &&(and) ,||(or) ,!(not)

where原理:從磁碟取出一條記錄,開始進行where判斷,判斷的結果如果成立儲存到記憶體,如果失敗直接放棄。

-- 下面為了示範where語句,我先為my_student表格增加兩個欄位-- 增加age和height欄位alter table my_student add age tinyint unsigned;alter table my_student add height tinyint unsigned;

-- 增加值:update my_student set age=floor(rand() * 20 + 20),height=floor(rand() * 20 + 170);

  • 尋找學生id為1或者3的學生
select * from my_student where studentid in(1,3);-- 或者select * from my_student where studentid = 1 || studentid = 3;

  • 尋找學生身高在180到190的學生
select * from my_student where height > 180 and height < 190;-- 或者select * from my_student where height between 180 and 190;

group by子句

group by:根據某個欄位進行分組(相同的放到1組,不同的放到不同組)

-- 基本文法group by 欄位名

分組的意義:為了統計資料(按分組欄位進行資料統計)
sql提供了一系列統計函數:

count() :統計分組後的記錄數,每一組有多少記錄max() :統計每組中最大的值min() : 統計最小值Avg() : 統計平均值Sum() : 統計和
-- 為了示範group by查詢,這裡我為my_student表,增加了gender欄位alter table my_student add gender enum(‘boy‘,‘girl‘);

-- 按照性別分組統計:身高高矮,平均年齡和年齡總和select gender,count(*),max(height),min(height),avg(age),sum(age) from my_student group by gender; 

需要注意的是,以上使用到的count函數:裡面可以使用兩種參數:”*”表示統計記錄,”欄位名”表示統計對應的欄位(NULL不統計)

select gender,count(*),count(age),max(height),min(height),avg(age),sum(age) from my_student group by gender;

  • 多欄位分組:先根據一個欄位進行分組,然後對分組後的結果,再次按照其他結果進行分組。
-- 多欄位分組:先按照班級分組,在按照性別分組select c_id,gender,count(*) from my_student group by c_id,gender;   

  • group_concat(欄位)
    group_concat(欄位):該函數可以對分組的結果中某個欄位進行字串拼接
-- 使用group_contact() 函數select c_id,gender,count(*),group_concat(name) from my_student group by c_id,gender;    

having 子句

having子句:進行條件判斷的。

having與where的區別:where是針對磁碟資料進行判斷,進入到記憶體之後,會進行分組操作,分組結果就需要having來處理。另外,having可以使用別名,而where不可以,這是因為where是從磁碟中讀取資料的,此時只能使用欄位名,別名是在欄位進入記憶體後才會產生的。

-- 查詢所有班級人數>2的學生人數select c_id,count(*) from my_student group by c_id having count(*) >=2;-- 上面的sql語句中多次使用了count(*)函數,我們可以對count(*)重新命名,做如下最佳化:select c_id,count(*) as total from my_student group by c_id having total >=2;

order by子句

order by:根據某個欄位進行升序或者降序排序

-- 文法:order by 欄位名 [asc |descc]select * from my_student order by c_id; -- 先按照班級升序,在按照年齡降序  select * from my_student order by c_id,age desc;

limit子句

limit:limit可以用來限制查詢的結果數量

limit有兩種使用方式:

  • 用來限制資料量: limit 資料量
  • 限制其實位置,限制數量: limit 其實位置,長度
-- 查詢my_student表中的前兩條記錄select * from my_student limit 2;

-- 從第2條記錄開始,查詢兩條資料select * from my_student limit 2, 2;

串連查詢

串連查詢:將多張表,進行記錄的串連。串連查詢分為以下四類:內串連,外串連,自然串連,交叉串連

-- 使用文法左表 join 右表
-- 查詢出所有的學生,並且顯示學生所在的班級資訊

交叉串連

交叉串連:從一張表中迴圈取出每一條記錄,每條記錄都去另外一張表進行匹配,匹配一定保留(無條件匹配)

-- 交叉串連文法: 左表 cross join 右表 === from 左表,右表select * from my_student cross join my_class;select * from my_student,my_class;

內串連

內串連:inner join,從左表中取出每一條記錄,去右表中與所有的記錄進行匹配,匹配必須是某個條件在左表中與右表中相同,最終才會保留結果。

-- 內串連基本文法:左表 inner join 右表 on 左表.欄位 = 右表.欄位 select * from my_student inner join my_class on my_student.c_id = my_class.c_id;

另外,可以使用欄位和表的別名來簡化sql語句

-- 欄位別名和表別名select s.* ,c.c_name,c.c_room from my_student as s inner join my_class as c on s.c_id = c.c_id;

外串連

外串連:以某張表為主,取出裡面的所有記錄,然後每條與另外一張表進行串連,不管是否匹配,最終都會保留,能匹配,則正確保留,否則其他表的欄位都值為空白null。

外串連分為兩種: 是以某張表為主
left join:左外串連,以左表為主表
right join: 右串連

-- 外串連基本文法:座標 left/right join 右表 on 左表.欄位 = 右表.欄位-- 左串連select s.*,c.c_name,c.c_room from my_student as s left join my_class as c on s.c_id = c.c_id; 


自然串連

自然串連:自動匹配串連條件:系統自動以欄位名字作為匹配模式(同名欄位作為條件,多個同名欄位都作為條件)

-- 自然內串連:左表 natural join 右表select * from my_student natural join my_class;

mysql簡單查詢操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.