数据库内容

常见的数据库管理系统:

IBM---->eclipse;
Oracle 甲骨文(sun:太阳)
Oracle做数据库起家的。
Oracle—>Mysql AB公司
Oracle、Mysql、DB2、Sybase SqlServer 支持标准sql的数据库管理系统

端口号是软件在计算机上的唯一标识

oracle端口是1521;mysql端口号是3306

卸载mysql

1、删除注册表
2、删除安装的文件及隐藏的ProgramData
3、打开mysql安装包-----选择第三个remove
4、重启电脑

1.sql、DB、DBMS分别是什么、它们之间的关系

DB(Database):数据库,数据库实际上在硬盘上以文件的形式存在
DBMS(Database Management System):数据库管理系统,常见的有:Mysql,oracle DB2 Sybase SqlServer
sql:结构化查询语言,是一门标准通用的语言;标准的sql适合于所有的数据库产品;sql属于高级语言
sql语句在执行的时候,实际上内部也会先进行编译,然后再执行sql.(sql语句的编译由DBMS完成)
关系:
sql由DBMS执行,通过sql语句来操作DB当中的数据。
DBMS-(执行)–>sql–(操作)–>db

什么是表?

table:是数据库基本组成单元,所有的数据都以表格的形式组织,目的是可读性强。
行–>被称为数据/记录(data)
列–>被称为字段(colum)
每个字段应该包括哪些属性?
字段名、数据类型、相关约束。

SQL语句的分类:

DQL(数据查询语言):查询语句,凡是select语句都是DQL。
DML(数据操作语言):insert、delete、update,对表当中的数据进行增删改。
DDL(数据定义语言):create、drop、alter,对表结构的增删改。
TCL(事务控制语言):commit提交事务、rollback回滚事务。
DCL(数据控制语言):grant授权、revoke撤销权限等。

什么是sql脚本?

文件以sql的扩展名是.sql结尾,该文件编写了大量的sql语句。这样的文件称为‘sql脚本’。
test.sql,这个以sql结尾,这样的文件称为’sql脚本‘。

简单的查询语句(DQL)

语法格式:
select 字段1、字段2、字段3…from 表名;
提示:
1.任何一条sql以;结尾
2.sql语句不区分大小写

查询年薪的信息

select sal* 12 as ‘年薪’ from emp;
as可以省略

查询所有的字段

select * from emp;// *效率低,不建议

条件查询:
语法格式:

select 字段1,字段2… from 表名 where 条件;
执行顺序:先from,然后where,最后select

查询规工资等于5000的员工姓名
select ename from emp where sal =5000;
查询smith的工资
select sal from emp where ename=‘smith’;
找出工资高于3000的员工
select ename,sal from emp where sal >3000;
找出工资不等于3000的员工
select ename from emp where sal<>3000;
select ename from emp where sal!=3000;
找出工资在1100到3000之间的员工,包括1100和3000
select ename from emp where sal between 1100 and 3000;
select ename from emp where sal >=1100 and sal<=3000;

条件查询:

1、= 、<>或者!= 、<、<=、>、>=
2、between … and …等同于>= and <= [闭区间],字符方面:左闭右开,了解
3、is null 为null id not null不为空
4、and 并且
5、or 或者
6、in 包含,相当多个or(not in 不在这个范围中)
7、not可以取非,主要用在id、in里
8、like 模糊查询 ‘%a%’ %任意 ‘_%’ _任意一个字符

找出哪些人津贴为null
select comm ename from emp where comm = null;
找出哪些人津贴不为null
select comm ename from emp where comm is not null;
找出哪些人没有津贴
select ename ,sal comm from emp where comm is null or comm=0;

找出工作岗位是manager和salesman的员工
select ename ,job from emp where job=‘manager’ or job =‘salesman’;

找出薪资大于1000的,并且部门编号是20或者30的部门的员工 [and、or联合用]
select ename ,sal ,deptno from emp where sal>1000 and (deptno =20 or deptno=30);
(优先级别不确定加小括号)

in等同or:找出工作岗位是mansger和salesman的员工

select ename ,job from emp where job=‘manager’ or job=‘salesman’;
select ename,job from emp where job in(‘manager’,‘salesman’);
工资是800和5000的员工
select ename ,job from emp where sal in(800,5000);是具体的值。不是区间

模糊查询

找出名字中含有字母a
select ename from emp where ename like ‘%a%’;
找出名字中含有下划线的
select ename from emp where ename like ‘%_%’;
找出名字中最后字母是t的
select ename from emp where ename like ‘%t’;

排序:升序、降序

按照工资升序,找出员工名和薪资
升序:
select ename ,sal from emp order by sal asc;
升序:
select ename ,sal from emp order by sal;
降序:
select ename ,sal from emp order by sal desc;

按照规则的降序排列,当工资相同的时候,再按照名字的升序排列
select eanme from emp order by sal desc ,eanme asc;
找出工作岗位是salesman的员工,并且要求按照薪资的降序排列
select ename ,job from emp where job=‘salesman’ order by sal desc;

分组函数?

1、count计数
2、sum求和
3、avg平均值
4、min最小值
分组函数是对"每一组"数据进行操作
找出员工的工作总和
select sum(sal) from emp;
找出最高工资?
select max(sal) from emp;
找出最低工资?
select min(sal) from emp;
找出平均工资?
select avg(sal) from emp;
找出总人数?
select count(*) from emp;
select count(eanme) from emp;

分组函数一共右5个。
分数函数另外一个名字是多行处理函数。
多行处理函数大特点:
输入多行,最终输出的结果是1行

分组函数自动忽略null.

ifnull()空处理函数:

ifnull:处理为null的数据,进行预处理
计算每个员工的年薪?
select ename ,(sal+ifnull(comm,0))*12 as 年薪 from emp;
重点:只要有null参与的运算结果一定是NULL

找出工资高于平均工资的员工
select ename,sal from emp where sal>(select avg(sal) from emp);

cout(*)和count(sal)区别

*统计是总记录数,忽略null
count(字段)不为null的数据总数量

分组函数组合起来使用:

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

group by 和having

group by:按照某个字段或者某些字段进行分组
having:是对分组后的数据进行再次过滤。

找出每个工资岗位的最高薪资
select job,max(sal) from emp group by job;

分组函数和group by联合使用,group by先执行,分组函数后执行

执行顺序:

select … from 表名 where … group by … having … order by… limit …;

找出每个工资岗位的平均薪资?
select job,avg(sal) from emp group by job;
找出每个部门不同工作岗位的最高薪资
select max(sal), job,deptno from emp group by deptno,job;
找出每个部门的最高薪资,要求显示薪资大于2500的数据
1.找出每个部门的最高薪资
select max(sal) deptno from emp group by deptno
2.要求显示薪资大于2500的数据
select max(sal) deptno from emp group by deptno having max(sal)>2900 这种方式效率低
select max(sal) deptno from emp group where sal>2900 group by deptno 这种方式效率高
找出每个部门的平均薪资,要求显薪资大于2000的数据
select avg(sal) ,deptno from emp group by deptno having avg(sal)>2000;//只能使用having过滤
提示:gruop by进行分组不满意,再进行过滤使用having

distinct去重

select distinct job,deptno from emp;
提示:distinct只能在字段最前方,job,deptno联合去重

统计岗位的数量

select count(distinct job) from emp;

连接查询

在实际开发中,大部分情况不是单表查询,而是多表查询取出最终结果
在实际开发中,一般一个业务都会对应多个表,譬如:学生和班级,起码2张表
存在一张表,数据易冗余。

表的连接有几类

内连接:ab2张表平等关系,没有主副之分
外连接: ab2张表,有主表和副表之分
全连接
内连接:假设a和b表进行连接,使用内连接的话,凡是a表和b表能够匹配出来的记录查询出来,这就是内连接
Ab2张表没有主副之分,2张表是平等的
Select a.ename ‘员工’,b.ename ‘领导’ from emp a inner join emp b on a.mgr=b.empno

外连接:假设a和b进行连接,使用外连接的话,ab2张表中有一张表是主表,一张表是副表,主要查询是主表中的数据,捎带查询副表,当副表的数据没有和主表的数据进行匹配,副表自动模拟出null与之匹配

外连接的分类

左外连接(左连接):表示左边的表是主表
Select a.ename ‘员工’,b.ename ‘领导’ from emp a left join emp b on a.mgr=b.empno
右外连接(右连接):表示右边的表是主表
Select a.ename ‘员工’,b.ename ‘领导’ from emp a right join emp b on a.mgr=b.empno

表的别名:

好处:
1执行效率高
2可读性好

避免笛卡儿积现象:

加条件进行过滤
思考:避免笛卡尔积现象,会减少记录次数吗?
不会,次数还是56次,只不过显示的是有效的记录。

找出每个员工的部门名称,要求显示员工名和部门名

select e.ename ,d.dname from emp einner join dept don e.deptno=d.deptno;//sql92语法推荐

语法:


A
join
B
on
连接条件
where

找出每个员工的工资等级,要求显示员工名、工资、工资等级

select e.ename,e.sal,s.grade from emp e inner join salgrade s on e.sal between s.losal and s.hisal;
inner表示内连接

自连接最大的特点:一张表看作2张表。自己连自己

找出每个员工的上级领导,要求显示员工名和对应的领导名

select a.ename as ‘员工’,b.ename as ‘领导’ from emp a inner join emp b on a.mgr=b.empno;
//内连接 inner

找出每个员工的上级领导,要求显示员工名和对应的领导名

select a.ename as ‘员工’,b.ename as ‘领导’ from emp a left outer join emp b on a.mgr=b.empno;
//带left左边是主表
//左外连接outer是外,可省略

找出每个员工的上级领导,要求显示员工名和对应的领导名

select a.ename as ‘员工’,b.ename as ‘领导’ from emp b right outer join emp a on a.mgr=b.empno;
//带right右边是主表
//右外连接 outer是外,可省略

查询哪个部门没有员工

select d.* from emp e right join dept d on e.deptno=d.deptno where e.empno is null;
//right右边是主表
//右外连接

3张表:找出每一个员工的部门名称以及工资等级

select
e.ename,d.dname ,s.grade
from emp e
join
dept d
on
e.deptno=d.deptno
join
salgrade s
on
e.sal between s.losal and s.hisal;

A
join
B
join
C
on

表示:A表和B表先进行表连,连接之后A表继续和c表进行连接

找出每一个员工的部门名称以及工资等级、以及上级领导

select
e.ename ‘员工’,d.dname ,s.grade,e1.ename ‘领导’
from emp e
join
dept d
on
e.deptno=d.deptno
join
salgrade s
on
e.sal between s.losal and s.hisal
left join
emp e1
on
e.mgr=e1.empno;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值