sql语句代码:
create table dept( DEPTNO int(2), 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(4), ENAME varchar(10), JOB varchar(9), MGR int(4), HIREDATE date, SAL double(7,2), COMM double(7,2), DEPTNO int(2) ); 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-04-19’,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-05-23’,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(11), HISAL int(11), LOSAL int(11) ); INSERT INTO SALGRADE VALUES (1,1200,700); INSERT INTO SALGRADE VALUES (2,1400,1201); INSERT INTO SALGRADE VALUES (3,2000,1401); INSERT INTO SALGRADE VALUES (4,3000,2001); INSERT INTO SALGRADE VALUES (5,9999,3001);
分组函数:
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
重点记住:所有的分组函数都是对“某一组”数据进行操作的
分组函数一共5个,分组函数还有另一个名字叫:多行处理函数
多行处理函数的特点是:输入多行,最终输出的结果是一行
分组函数自动忽略null
emp表字段如下:
±---------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±------------±-----±----±--------±------+
| EMPNO | int(4) | YES | | NULL | |
| ENAME | varchar(10) | YES | | NULL | |
| JOB | varchar(9) | YES | | NULL | |
| MGR | int(4) | YES | | NULL | |
| HIREDATE | date | YES | | NULL | |
| SAL | double(7,2) | YES | | NULL | |
| COMM | double(7,2) | YES | | NULL | |
| DEPTNO | int(2) | YES | | NULL | |
±---------±------------±-----±----±--------±------+
单行处理函数?
什么是单行处理函数?
输入一行,输出一行
第一道题开始:
计算每个员工的年薪:
select ename,(sal+comm)*12 as yearsal from emp; //这是错误的
select ename,(sal+ifnull(comm,0))*12 as yearsal from emp; //这是正确的
第一道题结束
查出comm字段是NULL的:
select ename from emp where comm is null;
查出comm字段不是NULL的:
select ename from emp where comm is not null;
重点:所有数据库都是这样规定的,只要有NULL参与的,运算结果一定是NULL
ifnull()空处理函数?
ifnull(可能为NULL的数据,被当做什么处理)
第二道题开始:
找出工资高于平均工资的员工?
第一步:找出平均工资
select avg(sal) from emp;
±------------+
| avg(sal) |
±------------+
| 2073.214286 |
±------------+
第二部:找出高于平均工资的员工
select ename,sal from emp where sal>2073.214286;
±------±--------+
| ename | sal |
±------±--------+
| JONES | 2975.00 |
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
| SCOTT | 3000.00 |
| KING | 5000.00 |
| FORD | 3000.00 |
±------±--------+
最终写法:select ename,sal from emp where sal>(select avg(sal) from emp);
第二道题结束
第三道提开始:
第三道题结束
第四道题开始:
第四道题结束
第五道题开始:
第五道题结束
以下是重点,要求背过: