MySQL详解

MySQL详解,第1张

数据查询语言(凡是带有 select 关键字的都是查询语句)

select...

数据 *** 作语言(凡是对表中的 数据 进行增删改的都是 DML)

insert 增 delete 删 update 改

数据定义语言(凡是带有 create、drop、alter 的都是 DDL)

主要 *** 作的是 表的结构 ,不是表的数据

事务控制语言(包括:事务提交 commit、事务回滚 rollback)

数据控制语言(授权 grant、撤销权限 revoke)

select 字段 from 表名 where 条件

in(具体值,具体值,......) 不是区间

一个输入对应一个输出,和其对应的是多行处理函数(多个输入,对应一个输出)

输入多行,最终输出一行

如果你 没有对数据进行分组,整张表默认为一组

在实际的应用中,可能需要先进行分组,然后对每一组的数据进行 *** 作

案例: 查询每个员工所在部门的名称,显示员工名和部门名?

emp e 和 dept d 表进行连接。条件是:e.deptno = d.deptno

SQL92语法:(结构不够清晰,表的连接条件和后期进一步筛选的条件,都放到了 where 子句中)

SQL99语法:(表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加 where 子句)

技巧: 把一张表看成两张表

思考: 外连接的查询结果条数 >= 内连接的查询结果条数

select 语句中 嵌套 select 语句,被嵌套的 select 语句称为 子查询。

将查询结果集的一部分取出来。(通常使用在分页查询当中)

将字符串 varchar 类型转换成 date 类型

将日期转换成字符串

可以获取当前系统的时间,并且获取的时间是 datetime 类型的

注意:若没有条件限制将会导致所有数据全部更新。

注意:若没有条件,会删除整张表的数据。

constraint

not null 约束的字段 不能为 NULL (只有列级约束)

unique 约束的字段 不能重复 ,但是可以为 NULL

primary key

foreign key

transaction

实现原理 :缩小扫描的范围(形成树),避免全表扫描

Database Administrator 数据库管理员

数据库表的设计依据。教你怎么进行数据库表的设计。

免费领取有关于java面试题材料和讲解!

当我们需要用多张表联合起来查询数据时,称为连接查询。

连接查询可以分为内连接、外连接和全连接。其中内连接分为等值连接、非等值连接和自连接。外连接分为左外连接(左连接)和右外连接(右连接)。

笛卡尔积:当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数是两张表条数的乘积,这种现象被称为笛卡尔积现象。

通过添加条件限制,可以筛选出我们需要的数据。

一、内连接

在内连接中,两张表是平等的。

dept(部门)表:

emp(员工)表:

salgrade(薪资)表:

1.等值连接

等值连接,即条件是一个等值关系。

eg.查询每个员工所在部门名称,显示员工名和部门名。

​ 员工表和部门表连接,通过emp.deptno=dept.deptno

//SQL92语法(不推荐):

mysql>select ename,dname

->from dept,emp

->where dept.deptno=emp.deptno

登录后复制

//SQL99语法(推荐):

mysql>select ename,dname

->from emp

->(inner) join dept

->on emp.deptno=dept.deptno

join表示连接两表,on表示条件,inner表示内连接,可省略

登录后复制

为什么不推荐使用92:

在我们查找数据时,连接条件后面可能还要再加筛选条件,如(where dept.deptno=emp.deptno and …(条件)。

在92语法中,连接条件和筛选条件糅杂在where中,使得结构不清晰。

而99语法中,通过on表示连接条件,后面可以继续加where语句进行筛选:

select…

on emp.deptno=dept.deptno

where …

2.非等值连接

非等值连接,即条件不是一个等值关系。

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

mysql>select ename,sal,grade

->from emp

->(inner) join salgrade

->on emp.sal between losal and hisal

登录后复制

3.自连接

将一张表看成两张表进行查询。

eg.查询员工的上级领导,要求显示员工名和对应的领导名。

mysql>select a.ename empname,b.ename leadername

->from emp a join emp b

->on a.mgr=b.empno

登录后复制

只有13条记录,没有显示老板KING的领导名,因为为NULL。

二、外连接

在外连接中,两张表有主次关系,一主一次。

1.右(外)连接

eg.

select e.ename,d.dname

from emp e

right (outer) join dept d

on e.deptno=d.deptno

//outer可以省略

登录后复制

解释:表示将join关键字右边的这张表看成主表,主要是为了将这张表的数据全部查询出来,顺便关联查询左边的表。

2.左(外)连接

将join左边的表看成主表。

任何一个右连接都有左连接的写法;

任何一个左连接都有右连接的写法。

eg.查询每个员工的上级领导,要求显示所有员工的名字和领导名(将老板KING的领导名也显示 出来)。

mysql>select a.ename empname,b.ename leadername

->from emp a left join emp b

->on a.mgr=b.empno

登录后复制

补充:三张表、四张表如何进行连接?

语法:

select

...

from

a

join

b

on

a和b的连接条件

join

c

on

a和c的连接条件

right join

d

on

a和d的连接条件

登录后复制

一条SQL中内连接和外连接可以混合,都可以出现。

eg.找出每个员工的部门名称以及工资等级,要求显示员工名、部门名、薪资、薪资等级。

mysql>select ename,dname,sal,grade

->from emp

->join dept

->on emp.deptno=dept.deptno

->join salgrade

->on emp.sal between losal and hisal

登录后复制

三、全连接

两张表有主次关系,但两张表都是主表。

全连接实际用的比较少,这里就不展开描述了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/8495351.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-17
下一篇 2023-04-17

发表评论

登录后才能评论

评论列表(0条)

保存