13 連線查詢

2021-09-12 13:07:52 字數 4154 閱讀 4791

① 假設 a 表中有3條記錄,b表中有 4 條記錄

② 那麼,語句select * from a,b 會將a,b兩張表的資料交叉拼接起來,形成 3 * 4 = 12 條記錄的結果集,此結果集叫做笛卡爾積。

> ora-00918: 未明確定義列

【改進辦法】明確列的所屬

select empno,ename,emp.deptno,dname from emp,dept

where emp.deptno = dept.deptno

select e.empno,e.ename,e.deptno,d.dname 

from emp e inner join dept d on e.deptno = d.deptno

select s.`stu_no`,s.`stu_name`,g.`grade_name` from student s 

inner join grade g on s.`grade_id` = g.`grade_id`

where s.`stu_***` = '女';

select e.empno,e.ename,e.deptno,d.dname from emp e , dept d

where e.deptno = d.deptno

select e.empno,e.ename,e.deptno,d.dname 

from emp e left join dept d on e.deptno = d.deptno

select e.empno,e.ename,d.deptno,d.dname

from emp e right join dept d on e.deptno = d.deptno

select * from student cross join grade

select * from student full join grade

建表

create table employee

( employee_id int not null,-- '雇員編號'

employee_name varchar(30) not null, -- '雇員姓名'

manager_id int, -- '經理編號'

primary key(employee_id)

);

插入資料

insert into employee(employee_id,employee_name,manager_id) values(1,'obama',null);

insert into employee(employee_id,employee_name,manager_id) values(2,'lucy',1);

insert into employee(employee_id,employee_name,manager_id) values(3,'jack',1);

insert into employee(employee_id,employee_name,manager_id) values(4,'james',2);

insert into employee(employee_id,employee_name,manager_id) values(5,'jerry',2);

insert into employee(employee_id,employee_name,manager_id) values(6,'andy',3);

insert into employee(employee_id,employee_name,manager_id) values(7,'blues',4);

insert into employee(employee_id,employee_name,manager_id) values(8,'aimi',6);

insert into employee(employee_id,employee_name,manager_id) values(9,'tom',7);

具體實現

select emp.`employee_id`,emp.`employee_name`,emp.`manager_id`,mgr.`employee_name`

from employee emp left join employee mgr

on emp.`manager_id` = mgr.`employee_id`;

建表

create table city

( cityid int not null,

cityname varchar(30),

primary key(cityid)

); create table transport

( id int not null,

fromcity int not null,

tocity int not null,

primary key(id),

foreign key(fromcity) references city(cityid),

foreign key(tocity) references city(cityid)

);

插入資料

insert into city(cityid,cityname) values (1,'北京');

insert into city(cityid,cityname) values (2,'濟南');

insert into city(cityid,cityname) values (3,'上海');

insert into city(cityid,cityname) values (4,'紐約');

insert into city(cityid,cityname) values (5,'夏威夷');

insert into transport(id,fromcity,tocity) values (1,1,2);

insert into transport(id,fromcity,tocity) values (2,2,4);

insert into transport(id,fromcity,tocity) values (3,4,5);

insert into transport(id,fromcity,tocity) values (4,3,1);

insert into transport(id,fromcity,tocity) values (5,1,3);

具體實現

select t.id,fc.`cityname`,tc.`cityname` from transport t

inner join city fc on t.`fromcity` = fc.`cityid`

inner join city tc on t.`tocity` = tc.`cityid`

where fc.`cityname` like '%濟%'

004 連線查詢

再大多數的情況下,我們都需要進行連線查詢.笛卡爾積的產生 這個就是多表查詢的的最初結果集,那麼以後我們需要作的就是從結果集中篩選出需要的結果集.篩選的方式不同,導致sql的效率不同.篩選的方式就是加入連線標準.等值連線 select 字段 from 表1 表2 where 連線條件.eg 查詢員工名...

實驗3 3 連線查詢

一 實驗目的 掌握使用連線的方法從多個表中查詢資料。理解內連線 外連線 包括左外連線 右外連線和全外連線 自身連線的概念和使用。要求學生熟練掌握在from子句和在where子句中指定連線條件的這兩種方法。二 實驗原理 在查詢語句的from子句中用以下形式實現各種連線操作 l from 表1 inne...

十 連線查詢

10.1 sql92語法 連線查詢 也可以叫跨表查詢,需要關聯多個表進行查詢 1 顯示每個員工資訊,並顯示所屬的部門名稱 以上輸出,不正確,輸出了56條資料,其實就是兩個表記錄的乘積,這種情況我們稱為 笛卡兒乘積 出現錯誤的原因是 沒有指定連線條件 2 指定連線條件 以上結果輸出正確,因為加入了正確...