练习一
CREATE TABLE dept(
deptno INT PRIMARY KEY, – 部门编号
dname VARCHAR(14),-- 部门名称
loc VARCHAR(13)-- 部门地点
);
CREATE TABLE emp(
empno INT NOT NULL PRIMARY KEY,-- 员工号
ename VARCHAR(10),-- 员工姓名
job VARCHAR(10),-- 职位
mgr INT, – 上级领导
hiredate DATETIME,-- 受雇日期
sal DOUBLE,-- 薪金
comm DOUBLE,-- 佣金
deptno INT,-- 所属部门
CONSTRAINT FOREIGN KEY(deptno) REFERENCES dept(deptno)
);
INSERT INTO dept VALUES
(10, ‘Accounting’, ‘New York’),
(20, ‘Research’, ‘Dallas’),
(30, ‘Sales’, ‘Chicago’),
(40, ‘Operations’, ‘Boston’),
(50, ‘Admin’, ‘Washing’);
INSERT INTO emp VALUES
(7369, ‘Smith’, ‘Clerk’,7902, ‘1980-12-17’,800,0,20),
(7499, ‘Allen’, ‘Salesman’,7698,‘1981-2-20’,1600,300,30),
(7844, ‘Turner’, ‘Salesman’,7499, ‘1981-9-8’,1500,0,30),
(7698, ‘Tom’, ‘Manager’,0, ‘1981-9-8’,6100,600,40),
(7876, ‘Adams’, ‘Clerk’,7900, ‘1987-5-23’,1100,0,20),
(7900, ‘James’, ‘Clerk’,7698, ‘1981-12-3’,2400,0,30),
(7902, ‘Ford’, ‘Analyst’,7698, ‘1981-12-3’,3000,NULL,20),
(7901, ‘Kik’, ‘Clerk’,7900, ‘1981-12-3’,1900,0,30);
– 1.列出至少有一个员工的所有部门。
SELECT DISTINCT dept.dname AS 部门名称
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 yg.ename AS 员工名称,ld.ename AS 领导名称
FROM emp yg JOIN emp ld ON yg.mgr=ld.empno;
– 4.列出受雇日期早于其直接上级的所有员工。(同上,日期可直接拿来比较)
SELECT yg.ename AS 员工名称,yg.hiredate AS 员工受雇日期,ld.ename 领导名称,ld.hiredate AS 领导受雇日期
FROM emp yg JOIN emp ld ON yg.mgr=ld.empno
WHERE yg.hiredate<ld.hiredate;
– 5.列出所有工作为“CLERK”(办事员)的姓名及其部门名称。(域,注意())
SELE