04 mysql 基礎三 (進階)
阿新 • • 發佈:2018-06-11
HA sql 左外連接 clas sele 現在 lin 留下 part
階段一 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 基礎三 (進階)