① 假設 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 指定連線條件 以上結果輸出正確,因為加入了正確...