1. 程式人生 > >04 mysql 基礎三 (進階)

04 mysql 基礎三 (進階)

HA sql 左外連接 clas sele 現在 lin 留下 part

mysql 基礎三

階段一 mysql 單表查詢

1.查詢所有記錄
select *    from department;
?
select *   from student;
?
select *   from student_detail;
2.查詢選中列記錄
select s_name from student;
3.查詢指定條件下的記錄
select s_name from student where s_id>2;
4.查詢後為列取別名
select s_name as 姓名 from student;
5.模糊查詢
select * from student where s_name like 
趙% # %代表多個字符 select * from student where s_name like _春_ # _代表一個字符
6.排序 order by : asc升序(默認) desc降序
select * from student order by dept_id;     # 升序
?
select * from student order by dept_id desc;    # 降序
7.限制顯示數據的數量LIMIT
# 按學號升序輸出前2條數據
select * from student order by s_id limit 2;
# 按學號升序輸出 第3條數據後面的2條數據
select * from student order by s_id limit 3,2;
8.常用聚合函數
#求最大年齡   
select max(age) from stu_detail;
#求最小年齡
select min(age) from stu_detail;
#求和
select sum(age) from stu_detail;
#求平均數
select avg(age) from stu_detail;
#四舍五入
select round(avg(age)) from stu_detail;
#統計
select count(age) from stu_detail;
9.分組查詢 group by
# 對學生表中學院欄進行分組,並統計每個學院各有多少學生
select dept_id 學院,count(dept_id) 學生個數 from student group by dept_id;
?
# having 分組條件 
# having 後的字段必須是select 後出現過的
?
# 查看哪些學院,只有一個學生
select dept_id 學院,count(dept_id) 學生個數 from student group by dept_id
    -> having count(dept_id)=1;

階段二 musql 子查詢

出現在其他SQL語句內的SELECT字句。(select 中 嵌套 select )

# 查出潭州學院中 ‘軟件學院‘和‘外語學院‘ 的 id
select tz_id from tanzhou where tz_name=軟件學院 or tz_name=外語學院;
+-------+
| tz_id |
+-------+
|     1 |
|     3 |
+-------+
 
# 查出學生表中屬於‘軟件學院‘ 和 ‘外語學院‘ 的學員
select * from student where dept_id in( select tz_id from tanzhou where tz_name=軟件學院 or tz_name=外語學院);
+------+--------------+---------+
| s_id | s_name       | dept_id |
+------+--------------+---------+
|    1 | 張三         |       3 |
|    3 | 王六         |       1 |
|    6 | 隔壁老王     |       3 |
+------+--------------+---------+

階段三 mysql 關聯查詢

1. 內連接 [inner | cross] join
  • 無條件內連接: 又名交叉連接/笛卡爾連接

第一張表種的每一項會和另一張表的每一項依次組合

select * from student inner join tanzhou;
  • 有條件內連接:

    在無條件的內連接基礎上,加上一個ON子句

    當連接的時候,篩選出那些有實際意義的記錄行來進行拼接

select * from student inner join tanzhou on dept_id=tz_id;
2. 外連接 { lifet | right} join
  • 左外連接: (以左表為基準)

兩張表做連接的時候,在連接條件不匹配的時候

留下左表中的數據,而右表中的數據以NULL填充

select * from tanzhou left join student on tz_id=dept_id;
?
+-------+--------------+------+--------------+---------+
| tz_id | tz_name      | s_id | s_name       | dept_id |
+-------+--------------+------+--------------+---------+
|     3 | 外語學院     |    1 | 張三         |       3 |
|     2 | 藝術學院     |    2 | 李四         |       2 |
|     1 | 軟件學院     |    3 | 王六         |       1 |
|     4 | 語言學院     |    4 | 陳七         |       4 |
|     2 | 藝術學院     |    5 | 郭偉濤       |       2 |
|     3 | 外語學院     |    6 | 隔壁老王     |       3 |
|     5 | 電競學院     | NULL | NULL         |    NULL |
+-------+--------------+------+--------------+---------+
  • 右外連接 right join

右外連接: (以右表為基準)

對兩張表做連接的時候,在連接條件不匹配的時候

留下右表中的數據,而左表中的數據以NULL填充

select * from student right join tanzhou on tz_id=dept_id;
?
+------+--------------+---------+-------+--------------+
| s_id | s_name       | dept_id | tz_id | tz_name      |
+------+--------------+---------+-------+--------------+
|    1 | 張三         |       3 |     3 | 外語學院     |
|    2 | 李四         |       2 |     2 | 藝術學院     |
|    3 | 王六         |       1 |     1 | 軟件學院     |
|    4 | 陳七         |       4 |     4 | 語言學院     |
|    5 | 郭偉濤       |       2 |     2 | 藝術學院     |
|    6 | 隔壁老王     |       3 |     3 | 外語學院     |
| NULL | NULL         |    NULL |     5 | 電競學院     |
+------+--------------+---------+-------+--------------+
  • 查詢沒有學員的學院(電競學員)

select * from student right join tanzhou on tz_id=dept_id where s_id is null;
?
+------+--------+---------+-------+--------------+
| s_id | s_name | dept_id | tz_id | tz_name      |
+------+--------+---------+-------+--------------+
| NULL | NULL   |    NULL |     5 | 電競學院     |
+------+--------+---------+-------+--------------+
  • 外連接多張表

    mysql> select s_id,s_name,dept_id,tz_name,deptc_id,c_name from student left join tanzhou on dept_id=tz_id left join course on tz_id=deptc_id;
    
    +------+--------------+---------+--------------+----------+--------+
    | s_id | s_name       | dept_id | tz_name      | deptc_id | c_name |
    +------+--------------+---------+--------------+----------+--------+
    |    3 | 王六         |       1 | 軟件學院     |        1 | python |
    |    2 | 李四         |       2 | 藝術學院     |        2 | java   |
    |    5 | 郭偉濤       |       2 | 藝術學院     |        2 | java   |
    |    1 | 張三         |       3 | 外語學院     |        3 | c/c++  |
    |    6 | 隔壁老王     |       3 | 外語學院     |        3 | c/c++  |
    |    4 | 陳七         |       4 | 語言學院     |        4 | 外語   |
    +------+--------------+---------+--------------+----------+--------+

04 mysql 基礎三 (進階)