数据库内容

    科技2025-08-08  14

    常见的数据库管理系统:

    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;

    Processed: 0.011, SQL: 8