数据库(一)

表:数据库基本组成单元,所有数据以表格形式组织,可读性强

表包括行和列:行 数据、记录,列 字段

字段包括:字段名、数据类型、相关约束

sql语句分类

DQL数据查询语言 查询语句 select

DML 数据操作语言 insert delete update 对表中的数据进行增删改

DDL 数据定义语言 create drop alter 对表结构增删改

TCL 事务控制语言 commit 提交事务 rollback回滚事务

DCL 数据控制语言 grant授权 revoke撤销授权

source命令可以执行sql脚本,用于完成初始化。 

删库跑路 drop database bjpowernode;

查看结构

desc 查看表结构

查看数据 select * from dept;

常用命令

select database();查看数据库

select version();查看版本

\c结束一条语句

show create table emp;查看创建语句。

简单查询(DQL)

select 字段名1,字段名2, ...from 表;

sql语句不区分大小写。字段可以参与数学运算

给查询结果的列重命名

select ename, sal * 12 as yearsal from emp;

select ename, sal * 12 as '年薪' from emp; 中文加引号。

标准sql语句中使用单引号,mysql支持双引号

as 关键字可以省略

查询所有字段 select * from emp;不建议写,效率较低

条件查询

select 字段... from 表 where 条件;

select ename from where sal = 5000;

找出工资不等于3000的

select ename, sal from emp where sal <> 3000; 

select ename, sal from emp where sal != 3000; 

找出工资在1100和3000之间的员工,包括1100和3000;

select ename, sal from emp where sal >= 1100 and sal <= 3000;

select ename, sal from emp where sal between 1100 and 3000;//闭区间 左小于右

还可以使用在字符串方面

select ename from emp where ename between 'A' and 'C'; 左闭右开

找出那些人没有津贴,在数据库中null代表什么也没有 使用 is null 或 is not null

select ename, sal, comm from emp where comm is null;

and 和 or 的优先级 and 优先级大于or,加小括号 

in 等同于 or 找出工作岗位是manager 和 salesman的员工

select ename, job from emp where job in ('manager', 'salesman');

not in 不在

模糊查询like

找出名字红含有o的(在模糊查询中,%任意多个字符,_代表任意一个字符)

select ename from emp where ename like '%o%';

select ename from emp where ename like '%\_%'; \_转义

排序

按照工资升序

select ename, sal from emp order by sal; //默认升序 asc升序 descc 降序

select ename from emp order by sal desc;//降序

工资降序,工资相同按名字升序

select ename, sal from emp order by sal desc, ename asc;//前面字段无法完成排序,启用后面的字段

找出工作岗位是salesman的员工,并且要求按照薪资的降序排列

select ename, job, sal from emp wher job = 'salesman' order by sal desc;

分组函数 多行处理函数 输入多行输出一行

count 计数 sum 求和 avg 平均值 max 最大值 min 最小值

所有分组函数都是对“某一组”数据进行操作

工资总和 select sum(sal) from emp;

最高工资 select max(sal) from emp;

最低工资 select min(sal) from emp;

平均工资 select avg(sal) from emp;

总人数  select count(ename) from emp; select count(*) from emp;

分组函数自动忽略null

单行处理函数 输入一行输出一行

计算每个员工年薪 select ename, (sal +comm)*12 as yearsal from emp;\\数据中有null参与运算,最后的结果为null

 ifnull()空处理函数 ifnull(可能为null的数据,被当作什么处理 ) 单行处理函数

select ename, ifnull(comm, 0) as comm from emp; 

计算每个员工年薪 select ename, (sal +ifnull(comm, 0))*12 as yearsal from emp;

找出工资高于平均工资的员工

select ename, sal from emp where sal > avg(sal);//ERROR 1111 (HY000): Invalid use of group function 

select ename, sal from emp where sal > (select avg(sal) from emp);

子查询,分两步

分组函数不能直接出现在where 子句中,group by 在where  执行之后才会执行

count(*)总记录条数 count(具体)某个字段不为空的数目

分组函数也能组合起来用

select count(*), sum(sal), avg(sal), max(sal), min(sal) from emp;

group by 和 having

group by 按照某个字段或者某些字段进行分组

having 对分组之后的数据进行再次过滤

找出每个工作岗位的最高薪资

select max(sal) from emp group by job

分组函数一般会和group by 联合使用,分组函数在goup by执行结束后执行

当分组函数没有group by ,整张表自成一组

select .. from ... where  .. group by ... having ... order by ...

5            1           2             3                 4             6

select ename, max(sal), job from emp group by job;

以上在mysql 中,查询结果是有的,但是结果没意义,在oracle中会报错

当一条语句有group by  ,select后只能跟分组函数和参与分组的字段

找出每个部门工作岗位的最高薪资

select deptno, job, max(sal) from emp group by deptno, job;//多个字段看成一个字段

找出每个部门的最高薪资,要求显示薪资大于2900

1.找出每个部门最高薪资

select max(sal) from emp  group by deptno;

2.找出薪资大于2900

select max(sal), deptno from emp group by deptno having max(sal) > 2900;//效率低

select max(sal), deptno from emp where sal > 2900 group by deptno;//效率高,能过滤的尽量使用where

找出每个部门的平均薪资,要求大于2000

1.找出部门平均薪资

select avg(sal), deptno from emp group by deptno;

2.要求大于2000

select avg(sal), deptno from emp group by deptno having avg(sal) > 2000;

DQL

select...

from ...

where ...

group by ...

having ...

order by ...

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值