SQL查詢(連線查詢)
1、等值連線
-- 查詢成績資訊及課程資訊
select * from
courses,scores
where courses.courseNo=scores.courseNo
-- 查詢成績資訊及課程資訊
select
c.courseNo as 課程表課程號,
c.name 課程名,
s.courseNo 成績表課程號,
s.score 成績
from courses as c, scores as s
where c.courseNo=s.courseNo
-- 查詢學生資訊及學生的成績
select stu.name, sc.score
from students as stu ,scores as sc
where stu.studentNo=sc.studentNo
內連線
-- 查詢學生資訊及學生的成績
select sc.score,cs.name
from scores sc
inner join courses cs on sc.courseNo=cs.courseNo
-- 查詢學生資訊及學生的課程對應的成績
select stu.name 姓名,sc.score 成績,cs.name 課程名
from students stu,scores sc,courses cs
where stu.studentNo=sc.studentNo and sc.courseNo=cs.courseNo
或
select stu.name,sc.score,cs.name
from students stu
inner join scores sc on stu.studentNo=sc.studentNo
inner join courses cs on sc.courseNo=cs.courseNo
-- 查詢王昭君的成績,要求顯示姓名、課程號、成績
select stu.name,sc.score,cs.name
from students stu
inner join scores sc on stu.studentNo=sc.studentNo
inner join courses cs on sc.courseNo=cs.courseNo
where stu.name='王昭君'
-- 查詢王昭君的資料庫成績,要求顯示姓名、課程名、成績
select stu.name,sc.score,cs.name
from students stu
inner join scores sc on stu.studentNo=sc.studentNo
inner join courses cs on sc.courseNo=cs.courseNo
where stu.name='王昭君' and cs.name='資料庫'
-- 查詢所有學生的資料庫成績,要求顯示姓名、課程名、成績
select stu.name,sc.score,cs.name
from students stu
inner join scores sc on stu.studentNo=sc.studentNo
inner join courses cs on sc.courseNo=cs.courseNo
where cs.name='資料庫'
-- 查詢男生中最高成績,要求顯示姓名、課程名、成績
select stu.sex,stu.name,sc.score,cs.name from students stu
inner join scores sc on stu.studentNo=sc.studentNo
inner join courses cs on sc.courseNo=cs.courseNo
where sex='男'
order by sc.score desc / 倒序
limit 1 /顯示一行
select stu.sex,stu.name,sc.score,cs.name
from students stu,scores sc,courses cs
where stu.studentNo=sc.studentNo and sc.courseNo=cs.courseNo and sex='男'
order by sc.score desc
limit 1
2、左連線
-- 查詢所有學生的成績,包括沒有成績的學生
select stu.name,sc.score from students stu
left join scores sc on stu.studentNo=sc.studentNo
-- 查詢所有學生的成績,包括沒有成績的學生,需要顯示課程名
select stu.name,sc.score,cs.name from students stu
left join scores sc on stu.studentNo=sc.studentNo
left join courses cs on sc.courseNo=cs.courseNo
3、右連線
-- 課程表插入一些資料
insert into courses
values (0, '語文'),(0, '數學');
-- 例1:查詢所有課程的成績,包括沒有成績的課程
select sc.score,cs.name from scores sc
right join courses cs on sc.courseNo=cs.courseNo
-- 例2:查詢所有課程的成績,包括沒有成績的課程,包含學生
select sc.score,cs.name,stu.name from scores sc
right join courses cs on sc.courseNo=cs.courseNo
left join students stu on stu.studentNo=sc.studentNo
4、自關聯
工具表建立
create table areas(
aid int primary key,//本級編號
atitle varchar(20),//地名
pid int//上級編號
);
insert into areas
values ('130000', '河北省', NULL),
('130100', '石家莊市', '130000'),
('130400', '邯鄲市', '130000'),
('130600', '保定市', '130000'),
('130700', '張家口市', '130000'),
('130800', '承德市', '130000'),
('410000', '河南省', NULL),
('410100', '鄭州市', '410000'),
('410300', '洛陽市', '410000'),
('410500', '安陽市', '410000'),
('410700', '新鄉市', '410000'),
('410800', '焦作市', '410000');
('410101', '中原區', '410100'),
('410102', '二七區', '410100'),
('410103', '金水區', '410100');
-- 查詢一共有多少個省
select count(*) from areas where pid is null
-- 查詢河南省的所有城市
select * from areas p,areas c
where p.aid=c.pid and p.atitle='河南省'
//本級編號與上級編號相同,且地名為“河南省”時輸出
- 查詢鄭州市的所有區縣(兩級兩個表自相關)
select * from areas p,areas c
where p.aid=c.pid and p.atitle='鄭州市'
或
select * from areas p
inner join areas c on p.aid=c.pid
where p.atitle='鄭州市'
-- 例3:查詢河南省的所有區縣(三級三個表自相關)
select * from areas p
inner join areas c on p.aid=c.pid
inner join areas q on c.aid=q.pid
where p.atitle='河南省'
注意:只能查詢出有區縣的市
select * from areas p
inner join areas c on p.aid=c.pid
left join areas q on c.aid=q.pid
where p.atitle='河南省'
注意:有無區縣都可以查詢出
5、子查詢
5.1標量子查詢:子查詢返回的結果時一行一列
-- 查詢班級學生的平均年齡
select avg(age) from students
-- 查詢大於平均年齡的學生 21.4167
select * from students where age>21.4167
select * from students
where age>(select avg(age) from students)
-- 查詢王昭君的成績,要求顯示成績
-- 先查詢王昭君的學號
select studentNo from students where name='王昭君'
select * from scores
where studentNo=(select studentNo from students where name='王昭君')
5.2列子查詢:子查詢返回的結果時一列多行
-- 查詢18歲的學生的成績,要求顯示成績
-- 先查詢18歲的學生的學號
-- select studentNo from students where age=18
--
-- select * from scores where studentNo='0' or studentno='2'
或
-- select * from scores where studentNo in('002','006')
select * from scores where studentNo in(select studentNo from students where age=18)
5.3行級子查詢:子查詢返回的結果時一行多列:行級子查詢
-- 查詢男生中年齡最大的學生資訊
select * from students where
age = (select max(age) from students where sex='男')
//標量子查詢
select * from students where
(sex,age)=(select sex,age from students where sex='男' order by age desc limit 1)
//行級子查詢
5.4表級子查詢:子查詢返回的結果時多行多列
-- 例5:查詢資料庫和系統測試的課程成績
select * from scores sc
inner join courses cs on sc.courseNo=cs.courseNo
where cs.name in ('資料庫','系統測試')
//連線查詢
或
-- select * from courses where name in ('資料庫','系統測試')
select * from scores sc
inner join (select * from courses where name in ('資料庫','系統測試')) c
on sc.courseNo=c.courseNo
//表級子查詢
查詢學習目錄
條件查詢 where 欄位 <,>,=,!= and ,or, not in,between and like , % , _ 排序 order by asc,desc
聚合函式 sum max min avg count(*)
分組 group by
分頁 limit 0,3 遊標 索引 角標
連線查詢 等值連線(from 表1,表2 inner join) 左連線 left join 右連線 right join 子查詢 標量子查詢 列子查詢 行子查詢 表級子查詢 |
- 訊號處理第一式——離散訊號序列的基本運算及MATLAB實現
- 3 個電子郵件錯誤以及如何避免它們 | Linux 中國 - 知乎
- 華三交換機融合AC升級總結
- 湖南科技大學自動健康打卡 --- auto.js
- 什麼是OpenStack? OpenStack核心元件之執行流程
- 不會面向物件,肯定學不好!簡易的Python面向物件攻略來啦 - 知乎
- 第二期Go開源說實錄:GORM 剖析與最佳實踐
- 如何解決Renault Can Clip程式碼不正確的問題?
- java之concurrent包中的Atomic類
- 一文教你輕鬆搞定ANR異常捕獲與分析方法
- 感測器的未來: 10年後我們將會生活在一個極端透明的世界
- Linux環境下MySQL主從同步環境部署
- ML拍照購物功能整合教程分享
- 猝死警告!熬夜2個月喜提26k位元組安卓崗offer面經分享,非禿勿入!
- SQL查詢(連線查詢)
- 程式設計的又一次的開始
- 領導要統一前端腳手架,我把React/Vue/Node/小程式都加了
- 在 Ubuntu Linux 上安裝 Deb 檔案的 3 種方法 | Linux 中國 - 知乎
- MIT6.824 MapReduce 2018 Part V: Inverted index generation
- 阻塞/非阻塞IO,同步/非同步IO