本文共 3367 字,大约阅读时间需要 11 分钟。
数据库笔记1
DB:DataBase(数据库)在硬盘以文件的形式存在
SQL: 结构化查询语言,高级语言,编译后执行
DBMS: DataBase Manager System (数据库管理系统) Mysql,SQLservice,Oracle,DB2,Syba se
关系:DBMS来执行SQL语句进而操作DB数据
表:数据库基本组单位
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
简单的省略…
条件查询:
…是数字:between… and… 是闭区间
…是字符:between… and …是左闭右开区间
空null:不是一个值,不能用等号判断: is null 和 is not null。
关键字in: in(100,200):是具体的数字,不是区间。
模糊查询like: % _
案例:名字中含有_: 使用转义字符:_ 来查询
升序: asc(默认)
降序:desc
顺序:
select 字段 3from 表名 1where 条件 2order by .... 4order by是最后执行的
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 empgroup 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 .. 5from .. 1where .. 2group by .. 3having .. 4order by .. 6
转载地址:http://afcki.baihongyu.com/