首頁 資料庫 mysql教程 mysql多表查詢範例

mysql多表查詢範例

May 10, 2019 pm 02:34 PM
mysql

本篇文章就多表查詢進行介紹,以下是資料表和其操作sql語句。

推薦課程:MySQL教學

mysql多表查詢範例

建立範例資料表:

#学生表
create table stu(sid int primary key,sname varchar(10) not null);
#成绩表
create table score (sid int, score int , cid int);
#科目表
create table subjects (cid int primary key,cname varchar(10));
alter table score add constraint fk_score_sid foreign key(sid) references stu(sid);
alter table score add constraint fk_score_cid foreign key(cid) references subjects(cid);

查詢學生成績和科目名稱

select * from stu,score where stu.sid = score.sid;

查詢學生的成績要求70以上的

select s.sid, s.sname, c.score from stu s,score c where s.sid = c.sid and c.score>70;

查詢所有學生的成績

select * from stu s inner join score c on s.sid = c.sid; 
内连接相当于把两张表链接成一张表查询 使用inner join 关键词 条件 使用on 并且Inner 可以省略 
外链接查询 左外连接查询 以左边的表为主 左边表中的数据都会查询出来 有可能会产生无用的数据 
select s.sid, s.sname, c.score from score c left join stu s on s.sid = c.sid; 
右外链接查询 
select s.sid, s.sname, c.score from score c right join stu s on s.sid = c.sid; 
自然链接 :会自动匹配表中相同的字段 没有外键也能自然查询 
select * from stu natural join score;

查詢所有學生的分數和考試科目

select s.sid, s.sname, c.score,u.cname from stu s left join score c on s.sid = c.sid join subjects u on c.cid = u.cid; 
三张表查询时2条件 n张表n-1条件

建立範例資料表:

#员工表
CREATE TABLE emp(
    empno INT,
    ename VARCHAR(50),
    job VARCHAR(50),
    mgr INT,
    hiredate DATE,
    sal DECIMAL(7,2),
    comm decimal(7,2),
    deptno INT
);
INSERT INTO emp values(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp values(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp values(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp values(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp values(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO emp values(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp values(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp values(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERT INTO emp values(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp values(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO emp values(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
INSERT INTO emp values(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO emp values(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO emp values(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);

--  部门表:dept
CREATE TABLE dept(
    deptno INT,
    dname varchar(14),
    loc varchar(13)
);
INSERT INTO dept values(10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO dept values(20, 'RESEARCH', 'DALLAS');
INSERT INTO dept values(30, 'SALES', 'CHICAGO');
INSERT INTO dept values(40, 'OPERATIONS', 'BOSTON');

查詢與SCOTT 同一個部門的員工

select ename from emp where deptno = (select deptno from emp where ename=’SCOTT’);

工資高於30號部門所有人的員工資訊

select * from emp where sal>(select max(sal) from emp where deptno = 30);

查詢工作和工資與MARTIN 完全相同的員工信息

select * from emp where (job,sal) in (select job,sal from emp where ename=’MARTIN’);

有兩個以上有直接下屬的員工資料

select * from emp where empno in (select mgr from emp group by mgr having count(mgr)>=2);

查詢員工編號為7788的員工名稱員工薪資部門名稱部門地址

select e.ename,e.sal,d.dname,d.loc from emp e ,dept d where e.deptno = d.deptno and empno = 7788;

求7369員工編號、姓名、經理編號和經理姓名

select ename,empno from emp where empno in (7369, (select mgr from emp where empno = 7369)); 
select e1.ename,e1.empno,e2.ename,e2.empno from emp e1,emp e2 where e1.mgr = e2.empno and e1.empno = 7369

求各部門薪水最高的員工所有資訊

select * from emp where (deptno ,sal) in (select deptno,max(sal) from emp group by deptno); 
查询过程中出现问题 查询时没有把部门的条件带进去 只是按最高工资处理的 可以把查询结果返回的结果集当做一个新表来使用 
select * from emp e1 ,(select deptno,max(sal) msal from emp group by deptno) e2 where e1.sal = e2.msal and e1.deptno = e2.deptno;

以上是mysql多表查詢範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP教程
1511
276
用對象級特權確保MySQL 用對象級特權確保MySQL Jul 29, 2025 am 01:34 AM

TosecureMySQLeffectively,useobject-levelprivilegestolimituseraccessbasedontheirspecificneeds.Beginbyunderstandingthatobject-levelprivilegesapplytodatabases,tables,orcolumns,offeringfinercontrolthanglobalprivileges.Next,applytheprincipleofleastprivile

管理大型MySQL表的最佳實踐 管理大型MySQL表的最佳實踐 Aug 05, 2025 am 03:55 AM

處理大表時,MySQL性能和可維護性面臨挑戰,需從結構設計、索引優化、分錶策略等方面入手。 1.合理設計主鍵和索引:推薦使用自增整數作為主鍵以減少頁分裂;使用覆蓋索引提升查詢效率;定期分析慢查詢日誌並刪除無效索引。 2.分區表的合理使用:按時間範圍等策略分區,提升查詢和維護效率,但需注意分區裁剪問題。 3.考慮讀寫分離和分庫分錶:讀寫分離緩解主庫壓力,分庫分錶適用於數據量極大場景,建議使用中間件並評估事務和跨庫查詢問題。前期規劃和持續優化是關鍵。

優化內容管理系統(CMS)的MySQL 優化內容管理系統(CMS)的MySQL Jul 28, 2025 am 03:19 AM

ToimproveMySQLperformanceforCMSplatformslikeWordPress,firstimplementacachinglayerusingpluginslikeRedisorMemcached,enableMySQLquerycaching(ifapplicable),andusepagecachingpluginstoservestaticfiles.Second,optimizeMySQLconfigurationbyincreasinginnodb_buf

如何故障排除常見的mySQL連接錯誤? 如何故障排除常見的mySQL連接錯誤? Aug 08, 2025 am 06:44 AM

檢查MySQL服務是否運行,使用sudosystemctlstatusmysql確認並啟動;2.確保bind-address設置為0.0.0.0以允許遠程連接,並重啟服務;3.驗證3306端口是否開放,通過netstat檢查並配置防火牆規則允許該端口;4.對於“Accessdenied”錯誤,需核對用戶名、密碼和主機名,登錄MySQL後查詢mysql.user表確認權限,必要時創建或更新用戶並授權,如使用'your_user'@'%';5.若因caching_sha2_password導致認證失

MySQL中的截斷,刪除和掉落有什麼區別? MySQL中的截斷,刪除和掉落有什麼區別? Aug 05, 2025 am 09:39 AM

DELETEremovesspecificorallrows,keepstablestructure,allowsrollbackandtriggers,anddoesnotresetauto-increment;2.TRUNCATEquicklyremovesallrows,resetsauto-increment,cannotberolledbackinmostcases,doesnotfiretriggers,andkeepstablestructure;3.DROPremovesthee

如何使用檢查約束來在MySQL中執行數據規則? 如何使用檢查約束來在MySQL中執行數據規則? Aug 06, 2025 pm 04:49 PM

MySQL支持CHECK約束以強制域完整性,自8.0.16版本起生效;1.創建表時添加約束:使用CREATETABLE定義CHECK條件,如年齡≥18、薪資>0、部門限定值;2.修改表添加約束:用ALTERTABLEADDCONSTRAINT限製字段值,如姓名非空;3.使用複雜條件:支持多列邏輯和表達式,如結束日期≥開始日期且完成狀態需有結束日期;4.刪除約束:通過ALTERTABLEDROPCONSTRAINT指定名稱刪除;5.注意事項:需MySQL8.0.16 、InnoDB或MyISAM引

實施MySQL數據譜系跟踪 實施MySQL數據譜系跟踪 Aug 02, 2025 pm 12:37 PM

實現MySQL數據血緣追踪的核心方法包括:1.利用Binlog記錄數據變更來源,開啟並解析binlog,結合應用層上下文追溯具體業務動作;2.在ETL流程中註入血緣標籤,通過工具同步時記錄源與目標的映射關係;3.給數據加註釋和元數據標籤,在建表時說明字段來源,並接入元數據管理系統形成可視化圖譜;4.注意主鍵一致性、避免過度依賴SQL解析、版本控制數據模型變化及定期校驗血緣數據,確保血緣追踪準確可靠。

如何在MySQL數據庫中實現標記系統? 如何在MySQL數據庫中實現標記系統? Aug 05, 2025 am 05:41 AM

Useamany-to-manyrelationshipwithajunctiontabletolinkitemsandtagsviathreetables:items,tags,anditem_tags.2.Whenaddingtags,checkforexistingtagsinthetagstable,insertifnecessary,thencreatemappingsinitem_tagsusingtransactionsforconsistency.3.Queryitemsbyta

See all articles