本來想總結高可用集羣的另外幾個實驗呢,回頭看看別人總結的內容,好精細,而且擴展了好多內容,慚愧的不行,還是先跳過了,呵呵~~~
這裏先來把mysql查詢語句綜合了一下:
上一篇
http://90112526.blog.51cto.com/6013499/1037266 |
介紹了簡單的數據庫操作等,接下來從細節入手,來介紹mysql的查詢語句;
在這裏導入了一個jiaowu數據庫,來實現以下例題的操作:
先來看下這個數據庫所包含的內容
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | jiaowu |
- | mysql |
- | test |
- +--------------------+
- 4 rows in set (0.00 sec)
l> use jiaowu;
Database changed
- mysql> show tables;
- +------------------+
- | Tables_in_jiaowu |
- +------------------+
- | courses |
- | scores |
- | students |
- | tutors |
- +------------------+
- 4 rows in set (0.00 sec)
- mysql> select * from students;
- +-----+--------------+------+--------+------+------+------+---------------------+
- | SID | Name | Age | Gender | CID1 | CID2 | TID | CreateTime |
- +-----+--------------+------+--------+------+------+------+---------------------+
- | 1 | GuoJing | 19 | M | 2 | 7 | 3 | 2012-04-06 10:00:00 |
- | 2 | YangGuo | 17 | M | 2 | 3 | 1 | 2012-04-06 10:00:00 |
- | 3 | DingDian | 25 | M | 6 | 1 | 7 | 2012-04-06 10:00:00 |
- | 4 | HuFei | 31 | M | 8 | 10 | 5 | 2012-04-06 10:00:00 |
- | 5 | HuangRong | 16 | F | 5 | 9 | 9 | 2012-04-06 10:00:00 |
- | 6 | YueLingshang | 18 | F | 8 | 4 | NULL | 2012-04-06 10:00:00 |
- | 7 | ZhangWuji | 20 | M | 1 | 7 | NULL | 2012-04-06 10:00:00 |
- | 8 | Xuzhu | 26 | M | 2 | 4 | NULL | 2012-04-06 10:00:00 |
- | 9 | LingHuchong | 22 | M | 11 | NULL | NULL | 2012-04-06 10:00:00 |
- | 10 | YiLin | 19 | F | 18 | NULL | NULL | 2012-04-06 10:00:00 |
- +-----+--------------+------+--------+------+------+------+---------------------+
- 10 rows in set (0.00 sec)
- mysql> select * from tutors;
- +-----+--------------+--------+------+
- | TID | Tname | Gender | Age |
- +-----+--------------+--------+------+
- | 1 2 | HuangYaoshi | M | 63 |
- | 3 | Miejueshitai | F | 72 |
- | 4 | OuYangfeng | M | 76 |
- | 5 | YiDeng | M | 90 |
- | 6 | YuCanghai | M | 56 |
- | 7 | Jinlunfawang | M | 67 |
- | 8 | HuYidao | M | 42 |
- | 9 | NingZhongze | F | 49 |
- +-----+--------------+--------+------+
- 9 rows in set (0.00 sec)
這是以下例題中會用到的數據,可以先參考下;
首先是mysql查詢語句:
查詢的分類:
單表查詢:簡單查詢
多表查詢:聯結查詢
子查詢:複雜查詢
聯合查詢
select語句:
常用函數:
##field--表示字段
count(*) 總行數
- mysql> select count(*) from tutors;
- +----------+
- | count(*) |
- +----------+
- | 9 |
- +---------+
- 1 row in set (0.00 sec)
max(field) 返回最大值
- mysql> select max(age) from tutors;
- +----------+
- | max(age) |
- +----------+
- | 93 |
- +----------+
- 1 row in set (0.00 sec)
min(field) 返回最小值
avg(field) 平均值
- mysql> select avg(age) from tutors;
- +----------+
- | avg(age) |
- +----------+
- | 67.5556 |
- +----------+
- 1 row in set (0.00 sec)
sum() 記和
- mysql> select sum(1+2);
- +----------+
- | sum(1+2) |
- +----------+
- | 3 |
- +----------+
- 1 row in set (0.01 sec)
select 是挑選列的,where是挑選行的,二者結合起來纔是將一個實體的屬性整體顯示出來
where 後面指定的是條件:
可以指定的條件有:
算術比較:
> , < , = , !,>= , <=, <=> (取得的結果是空值也不會出錯)
- mysql> select name,age from students where age>=20;
- +-------------+------+
- | name | age |
- +-------------+------+
- | DingDian | 25 |
- | HuFei | 31 |
- | ZhangWuji | 20 |
- | Xuzhu | 26 |
- | LingHuchong | 22 |
- +-------------+------+
- 5 rows in set (0.00 sec)
組合邏輯比較:
and
or
not(!)
- mysql> select name,age from students where ! (age <=25);
- +-------+------+
- | name | age |
- +-------+------+
- | HuFei | 31 |
- | Xuzhu | 26 |
- +-------+------+
- 2 rows in set (0.00 sec)
其他條件比較:
beween …… and ……
- mysql> select name,age from students where age between 24 and 30
- +----------+------+
- | name | age |
- +----------+------+
- | DingDian | 25 |
- | Xuzhu | 26 |
- +----------+------+
- 2 rows in set (0.00 sec)
in 查詢的字段在指定的列表中
- mysql> select name,age from students where age in (18,20,25);
- +--------------+------+
- | name | age |
- +--------------+------+
- | DingDian | 25 |
- | YueLingshang | 18 |
- | ZhangWuji | 20 |
- +--------------+------+
- 3 rows in set (0.01 sec)
is null:查詢是空值的
- mysql> select name from students where cid2 is null;
- +-------------+
- | name |
- +-------------+
- | LingHuchong |
- | YiLin |
- +-------------+
- 2 rows in set (0.00 sec)
is not null
like : 做通配符的匹配
%:匹配任意長度的任意字符
_: 匹配單個字符
regexp|rlike : 正則表達式的匹配
order by: 排序,默認是升序的asc
desc:降序
- mysql> select name,age from students where age in (22,18,25)order by age desc;
- +--------------+------+
- | name | age |
- +--------------+------+
- | DingDian | 25 |
- | LingHuchong | 22 |
- | YueLingshang | 18 |
- +--------------+------+
- 3 rows in set (0.00 sec)
distinct: 顯示結果的唯一性,附在select之後(以下面的例子解說,cid1相同的只顯示了一次)
- mysql> select distinct cid1 from students order by cid1 desc;
- +------+
- | cid1 |
- +------+
- | 18 |
- | 11 |
- | 8 |
- | 6 |
- | 5 |
- | 2 |
- | 1 |
- +------+
- 7 rows in set (0.00 sec)
group by: 將取得的結果進行分組,通常分組的結果是用來做聚合運算的
having: 對分組的結果進行條件過濾
- mysql> select avg(age),cid1 from students group by cid1;
- +----------+------+
- | avg(age) | cid1 |
- +----------+------+
- | 20.0000 | 1 |
- | 20.6667 | 2 |
- | 16.0000 | 5 |
- | 25.0000 | 6 |
- | 24.5000 | 8 |
- | 22.0000 | 11 |
- | 19.0000 | 18 |
- +----------+------+
- 7 rows in set (0.00 sec)
limit:限定顯示的行數
eg:limit 1,2;表示跳過第一行再顯示兩行
- mysql> select avg(age),cid1 from students group by cid1 limit 1,2;
- +----------+------+
- | avg(age) | cid1 |
- +----------+------+
- | 20.6667 | 2 |
- | 16.0000 | 5 |
- +----------+------+
- 2 rows in set (0.00 sec)
聯結查詢:表和表之間建立關係
交叉聯結:又稱之爲笛卡爾乘積,它會把你所查詢的表中字段結合起來一塊顯示出來
select * from students,tutors; ##這個數據量有點大,就不在這裏貼出來了
內聯結:又叫等值聯結,在表中可以建立等值關係
- mysql> select students.name,tutors.tname from students,tutors where students.TID=tutors.TID;
- +-----------+--------------+
- | name | tname |
- +-----------+--------------+
- | GuoJing | Miejueshitai |
- | YangGuo | HongQigong |
- | DingDian | Jinlunfawang |
- | HuFei | YiDeng |
- | HuangRong | NingZhongze |
- +-----------+--------------+
- 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;
##自己執行後對比一下就可以知道了哦~~
自聯結:通過一張表建立等值關係的聯結,它是內聯結的特殊形式,可以通過給自己的表取別名進行查詢
- mysql> select s.name AS students,t.name AS tutors from students AS s ,students AS t where s.TID=t.SID;
- +-----------+-------------+
- | students | tutors |
- +-----------+-------------+
- | GuoJing | DingDian |
- | YangGuo | GuoJing |
- | DingDian | ZhangWuji |
- | HuFei | HuangRong |
- | HuangRong | LingHuchong |
- +-----------+-------------+
- 5 rows in set (0.00 sec)
聯合查詢:將2個select語句合併起來,關鍵字 UNION
- mysql> select name ,age,gender from students union select tname,age,gender from tutors order by age;
- +--------------+------+--------+
- | name | age | gender |
- +-------------+------+--------+
- | HuangRong | 16 | F |
- | YangGuo | 17 | M |
- | YueLingshang | 18 | F |
- | YiLin | 19 | F |
- | GuoJing | 19 | M |
- | ZhangWuji | 20 | M |
- ………………………………
- ##下面還有哦,就不顯示了。。
子查詢:查詢語句中嵌套了別的查詢語句
分爲3類:
where子句或having子句中的子查詢
用於比較操作符合邏輯操作符中:限定子查詢的返回值只能是一行
- mysql> select name,age from students where age > (select avg(age) from students);
- +-------------+------+
- | name | age |
- +-------------+------+
- | DingDian | 25 |
- | HuFei | 31 |
- | Xuzhu | 26 |
- | LingHuchong | 22 |
- +-------------+------+
- 4 rows in set (0.00 sec)
用於IN操作符中:子查詢呢的返回值可以是多行
- mysql> select name,age from students where tid in (select tid from tutors where age >50);
- +----------+------+
- | name | age |
- +----------+------+
- | GuoJing | 19 |
- | YangGuo | 17 |
- | DingDian | 25 |
- | HuFei | 31 |
- +----------+------+
- 4 rows in set (0.00 sec)
用於exists:結果只要存在就可以(不涉及)
用於from子句中的子查詢
- 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;
- +--------------+------+
- | name | age |
- +--------------+------+
- | HuFei | 31 |
- | HongQigong | 93 |
- | HuangYaoshi | 63 |
- | Miejueshitai | 72 |
- …………………………
用於update或delete語句中的子查詢
- mysql> delete from students where age+20< (select min(age) from tutors);Query OK, 6 rows affected (0.01 sec)
- mysql> select * from students;
- +-----+-------------+------+--------+------+------+------+---------------------+
- | SID | Name | Age | Gender | CID1 | CID2 | TID | CreateTime |
- +-----+-------------+------+--------+------+------+------+---------------------+
- | 3 | DingDian | 25 | M | 6 | 1 | 7 | 2012-04-06 10:00:00 |
- | 4 | HuFei | 31 | M | 8 | 10 | 5 | 2012-04-06 10:00:00 |
- | 8 | Xuzhu | 26 | M | 2 | 4 | NULL | 2012-04-06 10:00:00 |
- | 9 | LingHuchong | 22 | M | 11 | NULL | NULL | 2012-04-06 10:00:00 |
- +-----+-------------+------+--------+------+------+------+---------------------+
- 4 rows in set (0.00 sec)
以上主要是用例題分析了下select語句的使用,簡單的select操作希望你可以根據此能夠實現^_^~~