Maison > base de données > tutoriel mysql > le corps du texte

exemple de requête multi-tables mysql

(*-*)浩
Libérer: 2020-09-17 10:35:23
original
2636 Les gens l'ont consulté

Cet article présente la requête multi-table. Voici la table de données et son instruction SQL d'opération.

Cours recommandé : Tutoriel MySQL.

exemple de requête multi-tables mysql

Créez un exemple de tableau de données :

#学生表
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);
Copier après la connexion

Requérez les notes des étudiants et les noms des sujets

select * from stu,score where stu.sid = score.sid;
Copier après la connexion

Requérez les notes des étudiants

select s.sid, s.sname, c.score from stu s,score c where s.sid = c.sid and c.score>70;
Copier après la connexion

exigeant 70 ou plus Interrogez les scores de tous les étudiants

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;
Copier après la connexion

Interrogez les scores et les sujets de test de tous les étudiants

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条件
Copier après la connexion

Créez un exemple de tableau de données :

#员工表
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');
Copier après la connexion

Interroger les employés du même département que SCOTT

select ename from emp where deptno = (select deptno from emp where ename=’SCOTT’);
Copier après la connexion

Informations sur les employés dont le salaire est supérieur à celui du propriétaire du département n°30

select * from emp where sal>(select max(sal) from emp where deptno = 30);
Copier après la connexion

Interroger les informations sur les employés dont le travail et le salaire sont exactement les mêmes que MARTIN

select * from emp where (job,sal) in (select job,sal from emp where ename=’MARTIN’);
Copier après la connexion

Il y a plus de deux informations sur les employés avec des subordonnés directs

select * from emp where empno in (select mgr from emp group by mgr having count(mgr)>=2);
Copier après la connexion

Recherchez le nom de l'employé avec le numéro d'employé 7788, le salaire de l'employé, le nom du département, le département adresse

select e.ename,e.sal,d.dname,d.loc from emp e ,dept d where e.deptno = d.deptno and empno = 7788;
Copier après la connexion

Recherchez le numéro d'employé 7369, Nom, numéro de manager et nom du manager

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
Copier après la connexion

Recherche toutes les informations de l'employé le mieux payé de chaque département

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;
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal