1、SQL、DB、DBMS的关系
DB:DataBase(数据库)在硬盘以文件的形式存在
SQL: 结构化查询语言,高级语言,编译后执行
DBMS: DataBase Manager System (数据库管理系统) Mysql,SQLservice,Oracle,DB2,Syba se
关系:DBMS来执行SQL语句进而操作DB数据
2.表、通用的SQL语句
表:数据库基本组单位
DQL (数据查询语言) :select语句
DML(数据操作语言) : insert、update、delete
DDL(数据定义语言) : create、alter、drop
TCL(事务控制语言): commit 提交事务、rollback 回滚事务
DCL(数据控制语言):grant 授权、revoke 撤销权限
查看数据库:show databases;
创建数据库:create database 数据库名;
查看表: show tables;
初始化数据:source sql文件的路径;
删除数据库:drop database 数据库名;
拓展:
查看使用的数据库: select database();
查看mysql 版本号:select version;
结束一条语句:\c
3、查询语句(DQL)
简单的省略…
条件查询:
…是数字:between… and… 是闭区间
…是字符:between… and …是左闭右开区间
空null:不是一个值,不能用等号判断: is null 和 is not null。
关键字in: in(100,200):是具体的数字,不是区间。
模糊查询like: % _
案例:名字中含有_: 使用转义字符:_ 来查询
升序: asc(默认)
降序:desc
顺序:
select
字段 3
from
表名 1
where
条件 2
order by
.... 4
order by是最后执行的
4、分组函数
5大分组函数:count 、sum、avg、 max、min
分组函数:多行处理函数
分组函数在遇到null的时候:自动忽略null
分组函数不能直接跟在where条件后面:group by 是在where执行后才会执行
select 5
..
from 1
..
where 2
..
group by 3
..
having 4
..
order by 6
..
count(*)和count(某个字段)的区别?
count(*):统计的是总的条数
count(某个字段):表示这个字段中国null的数据总数量
数据库中规定:有null参与的运算结构一定是null
案例:计算员工的年薪
mysql> select ename ,(sal+comm)*12 as '年薪'from emp;
+--------+----------+
| ename | 年薪 |
+--------+----------+
| SMITH | NULL |
| ALLEN | 22800.00 |
| WARD | 21000.00 |
| JONES | NULL |
| MARTIN | 31800.00 |
| BLAKE | NULL |
| CLARK | NULL |
| SCOTT | NULL |
| KING | NULL |
| TURNER | 18000.00 |
| ADAMS | NULL |
| JAMES | NULL |
| FORD | NULL |
| MILLER | NULL |
+--------+----------+
14 rows in set (0.00 sec)
mysql> select ename ,(sal+ifnull(comm,0))*12 as '年薪'from emp;
+--------+----------+
| ename | 年薪 |
+--------+----------+
| SMITH | 9600.00 |
| ALLEN | 22800.00 |
| WARD | 21000.00 |
| JONES | 35700.00 |
| MARTIN | 31800.00 |
| BLAKE | 34200.00 |
| CLARK | 29400.00 |
| SCOTT | 36000.00 |
| KING | 60000.00 |
| TURNER | 18000.00 |
| ADAMS | 13200.00 |
| JAMES | 11400.00 |
| FORD | 36000.00 |
| MILLER | 15600.00 |
+--------+----------+
14 rows in set (0.00 sec)
if null 是空处理函数属于单处理函数
5、group by 和having
group by : 按照某个字段或者某些字段跟组
having : 是对分组之后的数据进行再次过滤
分组函数一把和group by 联合使用,
注意:当使用分组group by后,select后面只能跟分组函数和参与分组的字段
案例:每个工作岗位的平均薪资?
select
job,
avg(sal)
from
emp
group by
job;
案例:找出每个部门的最大薪资,并且显示大于2900的数据
mysql> select max(sal),deptno from emp group by deptno;
+----------+--------+
| max(sal) | deptno |
+----------+--------+
| 3000.00 | 20 |
| 2850.00 | 30 |
| 5000.00 | 10 |
+----------+--------+
3 rows in set (0.00 sec)
mysql> select max(sal),deptno from emp where sal>2900 group by deptno;
+----------+--------+
| max(sal) | deptno |
+----------+--------+
| 3000.00 | 20 |
| 5000.00 | 10 |
+----------+--------+
2 rows in set (0.00 sec)
案例:找出每个部门的平均薪资,并且显示大于2900的数据
mysql> select avg(sal),deptno from emp group by deptno;
+-------------+--------+
| avg(sal) | deptno |
+-------------+--------+
| 2175.000000 | 20 |
| 1566.666667 | 30 |
| 2916.666667 | 10 |
+-------------+--------+
3 rows in set (0.00 sec)
mysql> select avg(sal),deptno from emp group by deptno having avg(sal)>2000;
+-------------+--------+
| avg(sal) | deptno |
+-------------+--------+
| 2175.000000 | 20 |
| 2916.666667 | 10 |
+-------------+--------+
2 rows in set (0.00 sec)
总结:完整的SQL语句
select
.. 5
from
.. 1
where
.. 2
group by
.. 3
having
.. 4
order by
.. 6