```sql -- 1.交叉查询(笛卡尔积) 2.内连接查询 3.外连接查询 -- 交叉查询 Select * from emp,dept; -- 内连接 -- SQL99 显式 select * from emp join dept on ; -- SQL92 隐式slect * from emp,dept where; 外连接查询 左外: select * from emp,dept outer left where 右边:select * from emp,dept outer right where 数据准备: create database test2; use test2; -- 创建部门表 create table dept( deptno int primary key, -- 部门编号 dname varchar(20), -- 部门名称 loc varchar(20) -- 部门地址 ); -- 给部门表添加数据 insert into dept values(10,'accounting','new york'),(20,'research','dallas'),(30,'sales','chigago'),(40,'operations','boston'); -- 创建员工表 create table emp( empno int primary key, -- 员工编号 ename varchar(20), -- 员工姓名 job varchar(9), -- 员工工作 mgr int, -- 员工直属领导编号 hiredate date, -- 入职时间 sal double, -- 员工工资 comm double, -- 员工奖金 deptno int -- 对应dept表的外键 ); -- 添加 部门 和 员工 之间的主外键关系 alter table emp add CONSTRAINT foreign key(deptno) REFERENCES dept(deptno); -- 给员工表添加数据 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-07-03',3900,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-07-13', 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,'1981-01-23',1300,null,10); -- 创建工资等级表 create table salgrade( grade int, -- 工资等级 losal double, -- 最低工资 hisal double -- 最高工资 ); -- 给工资等级表添加数据 insert into salgrade values (1, 700,1200); insert into salgrade values (2,1201,1400); insert into salgrade values (3,1401,2000); insert into salgrade values (4,2001,3000); insert into salgrade values (5,3001,9999); -- 练习 -- 1、返回拥有员工的部门名、部门号。 select distinct dname,dept.deptno from dept,emp where dept.deptno=emp.deptno; select distinct dname,dept.deptno from dept join emp on dept.deptno=emp.deptno; -- 2、工资水平多于smith的员工信息 select * from emp where sal>(select sal from emp where ename='smith'); -- 3、返回员工和所属经理的姓名。 -- 内连接查询 select a.ename '员工',b.ename '经理' from emp a,emp b where a.mgr=b.empno; -- 4、返回雇员的雇佣日期早于其经理雇佣日期的员工及其经理姓名 select a.ename '员工',b.ename '经理' from emp a,emp b where a.mgr=b.empno and a.hiredate(select avg(sal) from emp); -- 10、返回与scott从事相同工作的员工 select * from emp where job=(select job from emp where ename='scott'); ``` 最后修改:2024 年 05 月 30 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏