EMP+DEPT+SALGRADE 表的基本操作
阿新 • • 發佈:2020-07-13
部門表
-- 部門表 CREATE TABLE DEPT( DEPTNO INT PRIMARY KEY, -- 部門編號 DNAME VARCHAR(14) , -- 部門名稱 LOC VARCHAR(13) -- 部門地址 ) ; INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK'); INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS'); INSERT INTO DEPT VALUES (30,'SALES','CHICAGO'); INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
員工表
-- 員工表 CREATE TABLE EMP ( EMPNO INT PRIMARY KEY, -- 員工編號 ENAME VARCHAR(10), -- 員工名稱 JOB VARCHAR(9), -- 工作 MGR DOUBLE, -- 直屬領導編號 HIREDATE DATE, -- 入職時間 SAL DOUBLE, -- 工資 COMM DOUBLE, -- 獎金 DEPTNO INT, -- 部門號 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-13',3000,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,'1982-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、查詢工資等於5000 的員工姓名?
mysql> select * from EMP where sal =1500;
+-------+--------+----------+------+------------+------+------+--------+
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
+-------+--------+----------+------+------------+------+------+--------+
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500 | 0 | 30 |
+-------+--------+----------+------+------------+------+------+--------+
1 row in set (0.00 sec)
2、查詢SMITH的工資
mysql> select sal from EMP where ename="SMITH";
+------+
| sal |
+------+
| 800 |
+------+
1 row in set (0.00 sec)
3、找出工資高於3000的員工
mysql> select Sal from EMP where sal >=3000;
+------+
| Sal |
+------+
| 3000 |
| 5000 |
| 3000 |
+------+
3 rows in set (0.00 sec)
4、找2900到3000的工資
mysql> select sal from EMP where sal between 2900 and 3000;
+------+
| sal |
+------+
| 2975 |
| 3000 |
| 3000 |
+------+
3 rows in set (0.00 sec)
5、檢視不為空和為空的欄位
mysql> select * from EMP where comm is null;
+-------+--------+-----------+------+------------+------+------+--------+
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
+-------+--------+-----------+------+------------+------+------+--------+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800 | NULL | 20 |
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975 | NULL | 20 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450 | NULL | 10 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-07-13 | 3000 | NULL | 20 |
| 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000 | NULL | 10 |
| 7876 | ADAMS | CLERK | 7788 | 1987-07-13 | 1100 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950 | NULL | 30 |
| 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000 | NULL | 20 |
| 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300 | NULL | 10 |
+-------+--------+-----------+------+------------+------+------+--------+
10 rows in set (0.00 sec)
mysql> select * from EMP where comm is not null;
+-------+--------+----------+------+------------+------+------+--------+
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
+-------+--------+----------+------+------------+------+------+--------+
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600 | 300 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250 | 500 | 30 |
| 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250 | 1400 | 30 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500 | 0 | 30 |
+-------+--------+----------+------+------------+------+------+--------+
4 rows in set (0.00 sec)
6、找出薪資大與3000 的並且部門編號是20 或者30部門的員工
mysql> select sal from EMP where sal >1000 and (deptno=20 or deptno=30);
+------+
| sal |
+------+
| 1600 |
| 1250 |
| 2975 |
| 1250 |
| 2850 |
| 3000 |
| 1500 |
| 1100 |
| 3000 |
+------+
9 rows in set (0.00 sec)
in的使用
範圍 (起始範圍 --> 結束範圍)
mysql> select ename,job from EMP where sal in (800,5000);
+-------+-----------+
| ename | job |
+-------+-----------+
| SMITH | CLERK |
| KING | PRESIDENT |
+-------+-----------+
2 rows in set (0.00 sec)
mysql> select ename,job from EMP where sal not in (800,5000);
+--------+----------+
| ename | job |
+--------+----------+
| ALLEN | SALESMAN |
| WARD | SALESMAN |
| JONES | MANAGER |
| MARTIN | SALESMAN |
| BLAKE | MANAGER |
| CLARK | MANAGER |
| SCOTT | ANALYST |
| TURNER | SALESMAN |
| ADAMS | CLERK |
| JAMES | CLERK |
| FORD | ANALYST |
| MILLER | CLERK |
+--------+----------+
12 rows in set (0.00 sec)
order by 升序降序的使用
mysql> select sal from EMP order by sal asc;
+------+
| sal |
+------+
| 800 |
| 950 |
| 1100 |
| 1250 |
| 1250 |
| 1300 |
| 1500 |
| 1600 |
| 2450 |
| 2850 |
| 2975 |
| 3000 |
| 3000 |
| 5000 |
+------+
14 rows in set (0.01 sec)
mysql> select sal from EMP order by sal desc;
+------+
| sal |
+------+
| 5000 |
| 3000 |
| 3000 |
| 2975 |
| 2850 |
| 2450 |
| 1600 |
| 1500 |
| 1300 |
| 1250 |
| 1250 |
| 1100 |
| 950 |
| 800 |
+------+
14 rows in set (0.00 sec)
分組函式
**count 計數 **
Sum求和
avg平均數
max最大值
mix最小值
count()和count(具體的某個欄位),他們有什麼區別?
count():不是統計某個欄位中資料到的個數,而是統計總記錄條數.(和別的欄位無關)
count(comm):表示統計comm欄位中不為null的資料總數量
mysql> select ename,(sal+comm)*12 as years from EMP;
# 所有資料庫都是這樣規定的,只要有null參加運算結果一定是null
group by和having
group by:按照某個欄位或者某些欄位進行分組
having:having是對分組之後的資料進行再次過濾
1、找出每個工作崗位的最高薪資
Select max(sal) from emp group by job;
2、找出工資高於平均各自的員工
第一步:找出平均工資
select avg(sal)from emp;
第二步:找出高於平均工資的員工
select ename,sal from emp where sal >(平均工資)
mysql> select ename,sal from EMP where sal > (select avg(sal) from EMP);
+-------+------+
| ename | sal |
+-------+------+
| JONES | 2975 |
| BLAKE | 2850 |
| CLARK | 2450 |
| SCOTT | 3000 |
| KING | 5000 |
| FORD | 3000 |
+-------+------+
6 rows in set (0.00 sec)
3、查詢每個工作崗位的平均薪資
mysql> select job,avg(sal) from EMP group by job;
+-----------+--------------------+
| job | avg(sal) |
+-----------+--------------------+
| ANALYST | 3000 |
| CLERK | 1037.5 |
| MANAGER | 2758.3333333333335 |
| PRESIDENT | 5000 |
| SALESMAN | 1400 |
+-----------+--------------------+
4、找出每個工作崗位的最高薪資
mysql> select max(sal) from EMP group by job ;
+----------+
| max(sal) |
+----------+
| 3000 |
| 1300 |
| 2975 |
| 5000 |
| 1600 |
+----------+