1. Die Beziehung zwischen Tabellen
Eins-zu-eins: Benutzertabelle und Identitätsinformationstabelle, die Benutzertabelle ist die Haupttabelle
Zum Beispiel: Männertabelle, Frauentabelle
create table man( mid int primary key auto_increment, mname varchar(32), wid int unique );
create table woman( wid int primary key auto_increment, wname varchar(32) );
Eins-zu-viele: die häufigsten Tabellenbeziehungen, Benutzertabelle und Auftragstabelle
Zum Beispiel: Mitarbeitertabelle, Abteilungstabelle
create table emp( empno int primary key auto_increment, ename varchar(32), deptno int );
create table dept( deptno int primary key auto_increment, dname varchar(32) );
Viele-zu-viele: Zum Beispiel teilen die Studententabelle und der Stundenplan die Viele-zu-viele-Beziehung normalerweise in eine Eins-zu-viele- oder eine Viele-zu-eins-Beziehung auf.
create table student( sid int primary key auto_increment, sname varchar(32) );
insert into student (sname) values ('大拿'); insert into student (sname) values ('唐嫣'); insert into student (sname) values ('王健林');
create table course( cid int primary key auto_increment, cname varchar(32) );
insert into course (cname) values ('语文'); insert into course (cname) values ('数学'); insert into course (cname) values ('英语'); insert into course (cname) values ('化学');
create table s_c( cid int, sid int );
insert into s_c (sid,cid) values (1,1); insert into s_c (sid,cid) values (1,2); insert into s_c (sid,cid) values (1,3); insert into s_c (sid,cid) values (1,4); insert into s_c (sid,cid) values (2,2); insert into s_c (sid,cid) values (2,4); insert into s_c (sid,cid) values (3,1); insert into s_c (sid,cid) values (3,3);
2. Warum mehrere Tabellen verwenden
Um die Redundanz großer Datenmengen zu vermeiden.
Je mehr die Uhr geteilt ist, desto besser ist es, sie entsprechend der tatsächlichen Situation aufzuteilen.
3. Konzept
Mehrere Tabellen gleichzeitig abfragen
4 🎜> <1>Abfrage zusammenführen
Union, Union All
Das Zusammenführen von Ergebnismengen bedeutet das Zusammenführen der Abfrageergebnisse von zwei Auswahlanweisungen. (Entspricht Union)
Die beiden zusammengeführten Ergebnisse, die Anzahl der Spalten, die Reihenfolge der Spalten und die Klasse müssen konsistent sein
create table emp( empno int primary key auto_increment, ename varchar(32) );
create table dept( deptno int primary key auto_increment, dname varchar(32) );
select * from emp union select * from dept; select * from emp union all select * from dept;
create table emp( empno int primary key auto_increment, # 员工编号 ename varchar(32), #员工姓名 job varchar(32), #员工职位 mgr int, #上级编号 hiredate date, #入职时间 sal double, #薪水 comm double, #奖金 deptno int #所属部门 );
create table dept( deptno int primary key auto_increment, #部门编号 dname varchar(32), #部门名称 loc varchar(32) #部门地址 );
Interne Verbindung: Inner Join .... On, Join,,
Inner Join ist ein Vergleichsoperator, der nur qualifizierte Zeilen zurückgibt
select * from emp inner join dept on emp.deptno=dept.deptno; select * from emp e ,dept d where e.deptno = d.deptno; select * from emp e join dept d where e.deptno = d.deptno;
Stellt die Abfrage dar, alle Zeilen auf der linken Seite, wenn rechts gibt es keine, null
select * from emp e LEFT OUTER JOIN dept d ON e.deptno = d.deptno;
select * from emp e right OUTER JOIN dept d ON e.deptno = d.deptno;
Selbstverknüpfung :
Selbstverknüpfung bedeutet, dass in derselben Datentabelle zwei Tabellen betrachtet werden. Dies bedeutet, dass der Anführer jeder Person gefunden wird. Wenn es keinen Anführer gibt, wird kein Anführer angezeigt.
Denken Sie an eine Tabelle Als zwei Tabellen, eine Mitarbeitertabelle und eine Führungstabelle, sind beide Emp-Tabellen als rechter Join)
Natural Join beurteilt und verwendet automatisch dieselben Felder in den beiden Tabellen wie die Verbindungsbedingung und gibt Abfrageergebnisse zurück.
select e.ename,el.ename from emp e left join emp el on e.mgr = el.empno;
<3>Unterabfrage (JEDE Unterabfrage, IN-Unterabfrage, EINIGE Unterabfrage, ALLE Unterabfrage)
Wessen Gehalt ist höher als Cong Hao? ? ?
select * from emp natural join dept; select * from emp NATURAL left join dept; select * from emp NATURAL right join dept;
Definition: Unterabfrage ermöglicht die Verschachtelung einer Abfrage in einer anderen Abfrage
Unterabfrage wird auch als interne Abfrage bezeichnet, was einer internen Abfrage entspricht. Eine Abfrage, die eine innere Abfrage enthält, wird als äußere Abfrage bezeichnet. Die Ergebnisse der Unterabfrage werden von der Hauptabfrage verwendet.
Wichtige Hinweise
:
2. Sie können Unterabfragen verwenden, nachdem Sie in der Hauptabfrage ausgewählt haben
3 . Unterabfragen können nicht nach der Gruppierung von
Anforderung: Mitarbeiterinformationen abfragen, deren Abteilungsname Personalwesen ist
Erster Weg: Unterabfrage verwendenselect * from emp where sal >(select sal from emp where ename='从浩');
Zweiter Weg: Verwandte Abfrage verwenden
select * from emp where deptno=(select deptno from dept where dname='人力部');
SQL-Optimierung: Versuchen Sie, Abfragen mit mehreren Tabellen zu verwenden
Die meisten Unterabfragen werden bei der endgültigen Ausführung in eine Abfrage mit mehreren Tabellen umgewandelt. Dies ist im SQL-Ausführungsplan ersichtlich.
Durch den SQL-Ausführungsplan werden Sie feststellen, dass die Ausführung der beiden Methoden gleich ist.
5.from后面的子查询
需求:
查询员工号 姓名 月薪
select empno,ename,sal from emp;
6.一般不在子查询中排序
7.一般先执行子查询,再去执行主查询
ANY关键字
假设any内部的查询返回结果个数是三个,如:result1,result2,result3,那么
select .... from .. where a > any(...); ->select ..... from ... where a > result1 or a >result2 or a >result3;
需求:
查询工资比1号部门中任意一个员工高的信息
select * from emp where sal > any(select sal from emp where deptno = 1);
ALL关键字
ALL关键字与any关键字类似,只不过上面的or改成and :
select .... from .. where a > all(...); ->select ..... from ... where a > result1 and a >result2 and a >result3;
需求:
查询工资比1号部门中所有员工号的员工信息
select * from emp where sal > all(select sal from emp where deptno = 1);
SOME关键字
some 关键字和any关键字是一样的功能。所以:
select .... from .. where a > any(...); ->select ..... from ... where a > result1 or a >result2 or a >result3;
IN关键字
IN运算符用于where表达式中,以列表向的形式支持多个选择。语法如下:
where column in (v1,v2,v3,.....); where column not in (v1,v2,v3,.....);
当in前面加上not运算符时候,表示与in相反的意思,既不在这写列表项中选择。
案例:
查询部门名称是人力和研发的员工
select * from emp where deptno in (select deptno from dept where dname='人力部' or dname='研发部') 分类: MySQL数据库
想了解更多相关问题请访问PHP中文网:MySQL视频教程
Das obige ist der detaillierte Inhalt vonMySQL – ausführliche Einführung und Beispiele für Abfragen mit mehreren Tabellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!