MySQL的查詢語句--SELECT

 本來想總結高可用集羣的另外幾個實驗呢,回頭看看別人總結的內容,好精細,而且擴展了好多內容,慚愧的不行,還是先跳過了,呵呵~~~

這裏先來把mysql查詢語句綜合了一下:

 

上一篇

  http://90112526.blog.51cto.com/6013499/1037266

介紹了簡單的數據庫操作等,接下來從細節入手,來介紹mysql的查詢語句;

在這裏導入了一個jiaowu數據庫,來實現以下例題的操作:

先來看下這個數據庫所包含的內容

  1. mysql> show databases; 
  2. +--------------------+ 
  3. | Database           | 
  4. +--------------------+ 
  5. | information_schema |  
  6. | jiaowu             |  
  7. | mysql              |  
  8. | test               |  
  9. +--------------------+ 
  10. 4 rows in set (0.00 sec) 

l> use jiaowu;

Database changed

  1. mysql> show tables; 
  2. +------------------+ 
  3. | Tables_in_jiaowu | 
  4. +------------------+ 
  5. | courses          |  
  6. | scores           |  
  7. | students         |  
  8. | tutors           |  
  9. +------------------+ 
  10. 4 rows in set (0.00 sec) 
  1. mysql> select * from students; 
  2. +-----+--------------+------+--------+------+------+------+---------------------+ 
  3. | SID | Name         | Age  | Gender | CID1 | CID2 | TID  | CreateTime          | 
  4. +-----+--------------+------+--------+------+------+------+---------------------+ 
  5. |   1 | GuoJing      |   19 | M      |    2 |    7 |    3 | 2012-04-06 10:00:00 |  
  6. |   2 | YangGuo      |   17 | M      |    2 |    3 |    1 | 2012-04-06 10:00:00 |  
  7. |   3 | DingDian     |   25 | M      |    6 |    1 |    7 | 2012-04-06 10:00:00 |  
  8. |   4 | HuFei        |   31 | M      |    8 |   10 |    5 | 2012-04-06 10:00:00 |  
  9. |   5 | HuangRong    |   16 | F      |    5 |    9 |    9 | 2012-04-06 10:00:00 |  
  10. |   6 | YueLingshang |   18 | F      |    8 |    4 | NULL | 2012-04-06 10:00:00 |  
  11. |   7 | ZhangWuji    |   20 | M      |    1 |    7 | NULL | 2012-04-06 10:00:00 |  
  12. |   8 | Xuzhu        |   26 | M      |    2 |    4 | NULL | 2012-04-06 10:00:00 |  
  13. |   9 | LingHuchong  |   22 | M      |   11 | NULL | NULL | 2012-04-06 10:00:00 |  
  14. |  10 | YiLin        |   19 | F      |   18 | NULL | NULL | 2012-04-06 10:00:00 |  
  15. +-----+--------------+------+--------+------+------+------+---------------------+ 
  16. 10 rows in set (0.00 sec)  
  1. mysql> select * from tutors; 
  2. +-----+--------------+--------+------+ 
  3. | TID | Tname        | Gender | Age  | 
  4. +-----+--------------+--------+------+ 
  5. |   1   2 | HuangYaoshi  | M      |   63 |  
  6. |   3 | Miejueshitai | F      |   72 |  
  7. |   4 | OuYangfeng   | M      |   76 |  
  8. |   5 | YiDeng       | M      |   90 |  
  9. |   6 | YuCanghai    | M      |   56 |  
  10. |   7 | Jinlunfawang | M      |   67 |  
  11. |   8 | HuYidao      | M      |   42 |  
  12. |   9 | NingZhongze  | F      |   49 |  
  13. +-----+--------------+--------+------+ 
  14. 9 rows in set (0.00 sec) 
 

這是以下例題中會用到的數據,可以先參考下;

首先是mysql查詢語句:

查詢的分類:

單表查詢:簡單查詢

多表查詢:聯結查詢

子查詢:複雜查詢

聯合查詢

 

select語句:

常用函數:

##field--表示字段

count(*) 總行數

  1. mysql> select count(*) from tutors; 
  2. +----------+ 
  3. | count(*) | 
  4. +----------+ 
  5. |        9 |  
  6. +---------+ 
  7. 1 row in set (0.00 sec) 
  8.  
  9.   

max(field) 返回最大值

  1. mysql> select max(age) from tutors; 
  2. +----------+ 
  3. | max(age) | 
  4. +----------+ 
  5. |       93 |  
  6. +----------+ 
  7. 1 row in set (0.00 sec) 

min(field) 返回最小值

avg(field) 平均值

  1. mysql> select avg(age) from tutors; 
  2. +----------+ 
  3. | avg(age) | 
  4. +----------+ 
  5. |  67.5556 |  
  6. +----------+ 
  7. 1 row in set (0.00 sec) 

sum() 記和

  1. mysql> select sum(1+2); 
  2. +----------+ 
  3. | sum(1+2) | 
  4. +----------+ 
  5. |        3 |  
  6. +----------+ 
  7. 1 row in set (0.01 sec) 

select 是挑選列的,where是挑選行的,二者結合起來纔是將一個實體的屬性整體顯示出來

where 後面指定的是條件:

可以指定的條件有:

算術比較:

> , < , = , !,>= , <=, <=> (取得的結果是空值也不會出錯)

  1. mysql> select name,age from students where age>=20; 
  2. +-------------+------+ 
  3. | name        | age  | 
  4. +-------------+------+ 
  5. | DingDian    |   25 |  
  6. | HuFei       |   31 |  
  7. | ZhangWuji   |   20 |  
  8. | Xuzhu       |   26 |  
  9. | LingHuchong |   22 |  
  10. +-------------+------+ 
  11. 5 rows in set (0.00 sec) 

組合邏輯比較:

and

or

not(!)

  1. mysql> select name,age from students where ! (age <=25); 
  2. +-------+------+ 
  3. | name  | age  | 
  4. +-------+------+ 
  5. | HuFei |   31 |  
  6. | Xuzhu |   26 |  
  7. +-------+------+ 
  8. 2 rows in set (0.00 sec) 

其他條件比較:

beween …… and ……

  1. mysql> select name,age from students where age between 24 and 30 
  2. +----------+------+ 
  3. | name     | age  | 
  4. +----------+------+ 
  5. | DingDian |   25 |  
  6. | Xuzhu    |   26 |  
  7. +----------+------+ 
  8. 2 rows in set (0.00 sec) 

in 查詢的字段在指定的列表中

  1. mysql> select name,age from students where age in (18,20,25); 
  2. +--------------+------+ 
  3. | name         | age  | 
  4. +--------------+------+ 
  5. | DingDian     |   25 |  
  6. | YueLingshang |   18 |  
  7. | ZhangWuji    |   20 |  
  8. +--------------+------+ 
  9. 3 rows in set (0.01 sec) 

is null:查詢是空值的

  1. mysql> select name from students where cid2 is null; 
  2. +-------------+ 
  3. | name        | 
  4. +-------------+ 
  5. | LingHuchong |  
  6. | YiLin       |  
  7. +-------------+ 
  8. 2 rows in set (0.00 sec) 

is not null

like : 做通配符的匹配

%:匹配任意長度的任意字符

_: 匹配單個字符

regexp|rlike : 正則表達式的匹配

order by: 排序,默認是升序的asc

desc:降序

  1. mysql> select name,age from students where age in (22,18,25)order by age desc;  
  2. +--------------+------+ 
  3. | name         | age  | 
  4. +--------------+------+ 
  5. | DingDian     |   25 |  
  6. | LingHuchong  |   22 |  
  7. | YueLingshang |   18 |  
  8. +--------------+------+ 
  9. 3 rows in set (0.00 sec) 

distinct: 顯示結果的唯一性,附在select之後(以下面的例子解說,cid1相同的只顯示了一次)

  1. mysql> select distinct cid1 from students order by cid1 desc; 
  2. +------+ 
  3. | cid1 | 
  4. +------+ 
  5. |   18 |  
  6. |   11 |  
  7. |    8 |  
  8. |    6 |  
  9. |    5 |  
  10. |    2 |  
  11. |    1 |  
  12. +------+ 
  13. 7 rows in set (0.00 sec)  

group by: 將取得的結果進行分組,通常分組的結果是用來做聚合運算的

having: 對分組的結果進行條件過濾

  1. mysql> select avg(age),cid1 from students group by cid1; 
  2. +----------+------+ 
  3. | avg(age) | cid1 | 
  4. +----------+------+ 
  5. |  20.0000 |    1 |  
  6. |  20.6667 |    2 |  
  7. |  16.0000 |    5 |  
  8. |  25.0000 |    6 |  
  9. |  24.5000 |    8 |  
  10. |  22.0000 |   11 |  
  11. |  19.0000 |   18 |  
  12. +----------+------+ 
  13. 7 rows in set (0.00 sec) 

limit:限定顯示的行數

eg:limit 1,2;表示跳過第一行再顯示兩行

  1. mysql> select avg(age),cid1 from students group by cid1 limit 1,2; 
  2. +----------+------+ 
  3. | avg(age) | cid1 | 
  4. +----------+------+ 
  5. |  20.6667 |    2 |  
  6. |  16.0000 |    5 |  
  7. +----------+------+ 
  8. 2 rows in set (0.00 sec) 

聯結查詢:表和表之間建立關係

交叉聯結:又稱之爲笛卡爾乘積,它會把你所查詢的表中字段結合起來一塊顯示出來

select * from students,tutors; ##這個數據量有點大,就不在這裏貼出來了

內聯結:又叫等值聯結,在表中可以建立等值關係

  1. mysql> select students.name,tutors.tname from students,tutors where students.TID=tutors.TID; 
  2. +-----------+--------------+ 
  3. | name      | tname        | 
  4. +-----------+--------------+ 
  5. | GuoJing   | Miejueshitai |  
  6. | YangGuo   | HongQigong   |  
  7. | DingDian  | Jinlunfawang |  
  8. | HuFei     | YiDeng       |  
  9. | HuangRong | NingZhongze  |  
  10. +-----------+--------------+ 
  11. 5 rows in set (0.00 sec) 

外聯結:

左外聯結:以第一張表爲準顯示所有

tb1 LEFT JOIN tb2 ON condition

右外聯結:以第二張表爲準顯示所有

tb1 RIGHT JOIN tb2 ON condition 

select * from students LEFT JOIN tutors ON students.TID=tutors.TID;

select * from students RIGHT JOIN tutors ON students.TID=tutors.TID;

##自己執行後對比一下就可以知道了哦~~

自聯結:通過一張表建立等值關係的聯結,它是內聯結的特殊形式,可以通過給自己的表取別名進行查詢

  1. mysql> select s.name AS students,t.name AS tutors from students AS s ,students AS t where s.TID=t.SID; 
  2. +-----------+-------------+ 
  3. | students  | tutors      | 
  4. +-----------+-------------+ 
  5. | GuoJing   | DingDian    |  
  6. | YangGuo   | GuoJing     |  
  7. | DingDian  | ZhangWuji   |  
  8. | HuFei     | HuangRong   |  
  9. | HuangRong | LingHuchong |  
  10. +-----------+-------------+ 
  11. 5 rows in set (0.00 sec) 

聯合查詢:將2個select語句合併起來,關鍵字 UNION

 

  1. mysql> select name ,age,gender from students union select tname,age,gender from tutors order by age; 
  2. +--------------+------+--------+ 
  3. | name         | age  | gender | 
  4. +-------------+------+--------+ 
  5. | HuangRong    |   16 | F      |  
  6. | YangGuo      |   17 | M      |  
  7. | YueLingshang |   18 | F      |  
  8. | YiLin        |   19 | F      |  
  9. | GuoJing      |   19 | M      |  
  10. | ZhangWuji    |   20 | M      |  
  11. ……………………………… 
  12. ##下面還有哦,就不顯示了。。 

子查詢:查詢語句中嵌套了別的查詢語句

分爲3類:

where子句或having子句中的子查詢

用於比較操作符合邏輯操作符中:限定子查詢的返回值只能是一行

  1. mysql> select name,age from students where age > (select avg(age) from students); 
  2. +-------------+------+ 
  3. | name        | age  | 
  4. +-------------+------+ 
  5. | DingDian    |   25 |  
  6. | HuFei       |   31 |  
  7. | Xuzhu       |   26 |  
  8. | LingHuchong |   22 |  
  9. +-------------+------+ 
  10. 4 rows in set (0.00 sec)      

               用於IN操作符中:子查詢呢的返回值可以是多行

  1. mysql> select name,age from students where tid in (select tid from tutors where age >50); 
  2. +----------+------+ 
  3. | name     | age  | 
  4. +----------+------+ 
  5. | GuoJing  |   19 |  
  6. | YangGuo  |   17 |  
  7. | DingDian |   25 |  
  8. | HuFei    |   31 |  
  9. +----------+------+ 
  10. 4 rows in set (0.00 sec)   

用於exists:結果只要存在就可以(不涉及)

用於from子句中的子查詢

  1.  mysql> select name,age from (select name,age,gender from students as s union select tname,age,gender from tutors as t) as vt where age > 30; 
  2. +--------------+------+ 
  3. | name         | age  | 
  4. +--------------+------+ 
  5. | HuFei        |   31 |  
  6. | HongQigong   |   93 |  
  7. | HuangYaoshi  |   63 |  
  8. | Miejueshitai |   72 |  
  9. ………………………… 

用於update或delete語句中的子查詢

  1. mysql> delete from students where age+20< (select min(age) from tutors);Query OK, 6 rows affected (0.01 sec) 
  2. mysql> select * from students; 
  3. +-----+-------------+------+--------+------+------+------+---------------------+ 
  4. | SID | Name        | Age  | Gender | CID1 | CID2 | TID  | CreateTime          | 
  5. +-----+-------------+------+--------+------+------+------+---------------------+ 
  6. |   3 | DingDian    |   25 | M      |    6 |    1 |    7 | 2012-04-06 10:00:00 |  
  7. |   4 | HuFei       |   31 | M      |    8 |   10 |    5 | 2012-04-06 10:00:00 |  
  8. |   8 | Xuzhu       |   26 | M      |    2 |    4 | NULL | 2012-04-06 10:00:00 |  
  9. |   9 | LingHuchong |   22 | M      |   11 | NULL | NULL | 2012-04-06 10:00:00 |  
  10. +-----+-------------+------+--------+------+------+------+---------------------+ 
  11. 4 rows in set (0.00 sec) 

 以上主要是用例題分析了下select語句的使用,簡單的select操作希望你可以根據此能夠實現^_^~~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章