MYSQL基礎03 - 查詢

--mysql選擇查詢,包含內容
1.選擇行數limit
2.with rollup
3.內連接,外連接,複合條件連接查詢
4.any,some,all,exists,
5.正則表達式

--t2表內容
mysql> select * from t2;
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    1 | a    | XXX  |
|    2 | b    | XXX  |
|    3 | c    | XXX  |
|    1 | a    | XXX  |
|    2 | b    | XXX  |
|    3 | c    | XXX  |
|    1 | a    | XXX  |
|    2 | b    | XXX  |
|    3 | c    | XXX  |
|    1 | a    | XXX  |
|    2 | b    | XXX  |
|    3 | c    | XXX  |
+------+------+------+
12 rows in set (0.00 sec)

--獲取從第11行起的2行記錄,也就是11,12行的記錄
mysql> select * from t2 limit 10,2;
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    2 | b    | XXX  |
|    3 | c    | XXX  |
+------+------+------+
2 rows in set (0.00 sec)

mysql> select * from t2 limit 12,1;
Empty set (0.00 sec)

--獲取第12行的記錄
mysql> select * from t2 limit 11,1;
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    3 | c    | XXX  |
+------+------+------+
1 row in set (0.00 sec)

--with rollup的用法,多了一行以null開頭的在第2列作彙總相加的行

mysql> select col2,sum(col1) from t2 group by col2 with rollup;
+------+-----------+
| col2 | sum(col1) |
+------+-----------+
| a    |         4 |
| b    |         8 |
| c    |        12 |
| NULL |        24 |
+------+-----------+
4 rows in set (0.00 sec)

--表T3和T4的內容
mysql> select * from t3;
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    1 | a    | XXX  |
|   22 | b    | XXX  |
|   33 | cc   | oo   |
+------+------+------+
3 rows in set (0.00 sec)

mysql> select * from t4;
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    1 | a    | XXX  |
|    2 | b    | XXX  |
|    3 | xx   | mm   |
|   88 | gg   | hh   |
+------+------+------+
4 rows in set (0.00 sec)

--內連接
mysql> select t3.col1,t4.col2
    -> from t4 inner join t3
    -> on t3.col2=t4.col2
    -> ;
+------+------+
| col1 | col2 |
+------+------+
|    1 | a    |
|   22 | b    |
+------+------+
2 rows in set (0.00 sec)

--複合條件的內連接
mysql> select t3.col1,t4.col2
    -> from t4 inner join t3
    -> on t3.col2=t4.col2
    -> and t3.col1=t4.col1
    -> ;
+------+------+
| col1 | col2 |
+------+------+
|    1 | a    |
+------+------+
1 row in set (0.00 sec)

--左連接(外連接)
mysql> 
mysql> select t3.col1,t4.col2
    -> from t4 left  outer  join t3
    -> on t3.col2=t4.col2
    -> ;
+------+------+
| col1 | col2 |
+------+------+
|    1 | a    |
|   22 | b    |
| NULL | xx   |
| NULL | gg   |
+------+------+
4 rows in set (0.00 sec)

--右連接,在ORACLE中+相當於在=號左邊那個表後面(eg. a.id(+)=b.id)
mysql> select t3.col1,t4.col2
    -> from t4 right  outer  join t3
    -> on t3.col2=t4.col2
    -> ;
+------+------+
| col1 | col2 |
+------+------+
|    1 | a    |
|   22 | b    |
|   33 | NULL |
+------+------+
3 rows in set (0.00 sec)

mysql> 
mysql> select t3.col1,t4.col2
    -> from t4 right  outer  join t3
    -> on t3.col2=t4.col2
    -> and t3.col1=t4.col1
    -> ;
+------+------+
| col1 | col2 |
+------+------+
|    1 | a    |
|   22 | NULL |
|   33 | NULL |
+------+------+
3 rows in set (0.00 sec)

mysql> 
mysql> select t3.col1,t4.col2
    -> from t4 right  outer  join t3
    -> on t3.col2=t4.col2
    -> and t3.col1=t4.col1
    -> and t3.col1=33
    -> ;
+------+------+
| col1 | col2 |
+------+------+
|    1 | NULL |
|   22 | NULL |
|   33 | NULL |
+------+------+
3 rows in set (0.00 sec)

mysql> 
mysql> select t3.col1,t4.col2
    -> from t4 right  outer  join t3
    -> on t3.col2=t4.col2
    -> and t3.col1=t4.col1
    -> and t4.col2='gg'
    -> ;
+------+------+
| col1 | col2 |
+------+------+
|    1 | NULL |
|   22 | NULL |
|   33 | NULL |
+------+------+
3 rows in set (0.00 sec)


--any和some用法等價,意思爲只要結果中有任何的一個何滿足條件就顯示結果;
mysql> select * from t4 where 8>any (select col1 from t3);
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    1 | a    | XXX  |
|    2 | b    | XXX  |
|    3 | xx   | mm   |
|   88 | gg   | hh   |
+------+------+------+
4 rows in set (0.00 sec)

mysql> select * from t4 where 8>some(select col1 from t3);
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    1 | a    | XXX  |
|    2 | b    | XXX  |
|    3 | xx   | mm   |
|   88 | gg   | hh   |
+------+------+------+
4 rows in set (0.00 sec)

--all的用法:條件必須所有的都滿足才顯示出結果;
mysql> select * from t4 where 8>all(select col1 from t3);
Empty set (0.00 sec)

--EXISTS用法與ORACLE一樣
mysql> select * from t4 where exists(select 1 from t3 where col2='b');
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    1 | a    | XXX  |
|    2 | b    | XXX  |
|    3 | xx   | mm   |
|   88 | gg   | hh   |
+------+------+------+
4 rows in set (0.00 sec)

mysql> select * from t4 where exists(select 1 from t3 where t3.col2=t4.col2);
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    1 | a    | XXX  |
|    2 | b    | XXX  |
+------+------+------+
2 rows in set (0.00 sec)

mysql> select * from t4 where not exists(select 1 from t3 where t3.col2=t4.col2);
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    3 | xx   | mm   |
|   88 | gg   | hh   |
+------+------+------+
2 rows in set (0.00 sec)

--表T4的值,重新更新了下,開始MYSQL正則表達式的用法regexp
mysql> select * from t4;
+------+--------+-------+
| col1 | col2   | col3  |
+------+--------+-------+
|    1 | a      | XXX   |
|    2 | b      | XXX   |
|    3 | xx     | mm    |
|   88 | gg     | hh    |
|  123 | bottle | moon  |
|  998 | fly    | happy |
+------+--------+-------+
6 rows in set (0.00 sec)

--匹配以b開頭的列值
mysql> select * from t4 where col2 regexp '^b';
+------+--------+------+
| col1 | col2   | col3 |
+------+--------+------+
|    2 | b      | XXX  |
|  123 | bottle | moon |
+------+--------+------+
2 rows in set (0.02 sec)

--匹配以b開頭的列值且b後面必須跟一個值
mysql> select * from t4 where col2 regexp '^b.';
+------+--------+------+
| col1 | col2   | col3 |
+------+--------+------+
|  123 | bottle | moon |
+------+--------+------+
1 row in set (0.00 sec)

--匹配包含gg且中間包含0個或多個值
mysql> select * from t4 where col2 regexp 'g*g';
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|   88 | gg   | hh   |
+------+------+------+
1 row in set (0.00 sec)

--區配包含gg且中間包含1個值
mysql> select * from t4 where col2 regexp 'g.g';
Empty set (0.00 sec)

--匹配包含字符gg
mysql> select * from t4 where col2 regexp 'gg';
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|   88 | gg   | hh   |
+------+------+------+
1 row in set (0.00 sec)

--匹配以py結尾列的值

mysql> select * from t4 where col3 regexp 'py$';
+------+------+-------+
| col1 | col2 | col3  |
+------+------+-------+
|  998 | fly  | happy |
+------+------+-------+
1 row in set (0.00 sec)

--匹配值中包含b或y的列值與[b|y]功能相同
mysql> select * from t4 where col2 regexp '[by]';
+------+--------+-------+
| col1 | col2   | col3  |
+------+--------+-------+
|    2 | b      | XXX   |
|  123 | bottle | moon  |
|  998 | fly    | happy |
+------+--------+-------+
3 rows in set (0.00 sec)


mysql> select * from t4 where col2 regexp '[b|y]';
+------+--------+-------+
| col1 | col2   | col3  |
+------+--------+-------+
|    2 | b      | XXX   |
|  123 | bottle | moon  |
|  998 | fly    | happy |
+------+--------+-------+
3 rows in set (0.00 sec)

--匹配包含1或2或3的列值,也可以寫成[123]
mysql> select * from t4 where col1 regexp '[1-3]';
+------+--------+------+
| col1 | col2   | col3 |
+------+--------+------+
|    1 | a      | XXX  |
|    2 | b      | XXX  |
|    3 | xx     | mm   |
|  123 | bottle | moon |
+------+--------+------+
4 rows in set (0.00 sec)

--匹配列值不包含1或2或3的列值
mysql> select * from t4 where col1 regexp '[^1-3]';
+------+------+-------+
| col1 | col2 | col3  |
+------+------+-------+
|   88 | gg   | hh    |
|  998 | fly  | happy |
+------+------+-------+
2 rows in set (0.00 sec)

--匹配列值至少出現t2次以上的列值
mysql> select * from t4 where col2 regexp 't{2}';
+------+--------+------+
| col1 | col2   | col3 |
+------+--------+------+
|  123 | bottle | moon |
+------+--------+------+
1 row in set (0.00 sec)

--匹配列值到少出現X1次,至多3次的列值
mysql> select * from t4 where col3 regexp 'X{1,3}';
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    1 | a    | XXX  |
|    2 | b    | XXX  |
+------+------+------+
2 rows in set (0.00 sec)

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