mysql-day02笔记

本文详细解析了Java面试中的常见问题,包括SQL不同版本的语法、表连接的各种类型及其优化,以及如何避免笛卡尔积现象。此外,还讨论了子查询、union和limit的使用,以及求职者在准备Java技术面试时的注意事项和学习路径。
摘要由CSDN通过智能技术生成

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

根据语法的年代分类:

SQL92:1992年的时候出现的语法

SQL99:1999年的时候出现的语法

现在用的多数都是SQL99语法

根据表连接的方式分类:

内连接:

等值连接

非等值连接

自连接

外连接:

左外连接(左连接)

右外连接(右连接)

全连接

2.3、笛卡尔积现象

当两张表进行连接查询时,没有任何条件的限制,如下:

select (字段1),(字段2) from (表1),(表2);

以上查询语句会导致出现"笛卡尔积现象"

当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数,是

两张表条数的乘积,这种现象被称为:笛卡尔积现象。(笛卡尔发现的,这是

一个数学现象。)

2.4、避免笛卡尔积现象

连接时加条件,满足这个条件的记录被筛选出来!

select 表1.(字段1),表2.(字段2)

from (表1),(表2)

where 表1.(部门表) = 表2.(部门表);

以上的连接条件是 表1 跟 表2 的部门相同,获取两表同一部门的字段数据,可以避免出现笛卡尔积现象

最终查询的结果条数是正确的条数,但是匹配的过程中,匹配的次数并没有减少,还是跟没有条件

的比较的次数一样,只不过进行了四选一进行了筛选。匹配次数并没有减少。

注意:

通过笛卡尔积现象得出,表的连接次数越多效率越低,尽量避免表的

连接次数。

2.5、内连接之等值连接

例:查询某公司的员工名称与部门名称

SQL92语法:

select

e.(员工名称),d.(部门名称)

from

(员工所在部门表) e,(部门表) d

where

e.(员工部门) = d.(部门); // 条件是等量关系,所以被称为等值连接。

注意:取别名很重要,增加效率

sql92的缺点:

结构不清晰,表的连接条件,和后期进一步筛选的条件,都放到了where后面。

SQL99语法:

select

e.(员工名称),d.(部门名称)

from

(员工所在部门表) e

inner join

(部门表) d

on

e.(员工部门) = d.(部门表); // 条件是等量关系,所以被称为等值连接。

inner关键字可以省略(带着inner可读性会更好,一眼就能看出来是内连接)

sql99优点:

表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加where

SQL99语法:

select

from

a

join

b

on

a和b的连接条件

where

筛选条件

2.6、内连接之非等值连接

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

select

e.(工名),e.(薪资),s.(薪资等级)

from

(员工表) e

inner join

(薪资等级表) s

on

e.(员工薪资) between s.(最低薪资) and s.(最高薪资);

// 条件不是一个等量关系,称为非等值连接。

2.7、内连接之自连接

例:查询员工的上级领导,要求显示员工名和对应的领导名?

自连接:

把一张表看作两张表来查询

员工表李包含了 领导的员工编号 与 每个员工的 上级领导编号

把一张员工表看作两张表,使用别名区分

第一张:(员工表) a 员工

第二章:(员工表) b 领导表

select

a.(名称) as ‘员工名’,b.(名称) as ‘领导名’;

from

(员工表) a

inner join

(员工表) b

on

a.(员工领导编号) = b.(领导的员工编号);

重点技巧:

一张表看做两张表。

2.8、外连接

外连接(右外连接):

select

e.(名称),d.(名称)

from

(员工表) e

right outer join // outer 是可以省略的,带着可读性强。

(部门表) d

on

e.(员工表部门) = d.(部门表部门);

right代表什么:

表示将join关键字右边的这张表看成主表,主要是为了将

这张表的数据全部查询出来,捎带着关联查询左边的表。

在外连接当中,两张表连接,产生了主次关系。

外连接(左外连接):

select

e.(名称),d.(名称)

from

(员工表) e

left outer join // outer 是可以省略的,带着可读性强。

(部门表) d

on

e.(员工表部门) = d.(部门表部门);

总结:

带有right的是右外连接,又叫做右连接。

带有left的是左外连接,又叫做左连接。

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

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

2.9、三,四张表连接

语法:

select

from

a

join

b

on

a和b的连接条件

join

c

on

a和c的连接条件

right join

d

on

a和d的连接条件

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

3、子查询

3.1、什么是子查询

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

3.2、子查询都可以出现在哪里

select

…(select).

from

…(select).

where

…(select).

可以出现在 select 后面

可以出现在 from 后面

可以出现在 where 后面

3.3、where 子句中的子查询

例:找出比最低工资高的员工姓名和工资?以下错误案例:

select

(姓名),(工资)

from

(员工表)

where

(工资) > min(工资);

以上是错误的,因为在 where 子句中不能直接使用分组函数,可以使用子查询

先分析题目:

第一步:查询最低工资是多少

select min(工资) from (表);

第二步:找出>最低工资的

select (姓名),(工资) from (员工表) where (工资) > (第一步的结果)//最低工资

第三步:合并

select

(姓名),(工资)

from

(员工表)

where

(工资) > (select min(工资) from (员工表)); // > 最低工资

3.4、from 子句中的子查询

注意:

from后面的子查询,可以将子查询的查询结果当做一张临时表。(技巧)

例:找出每个岗位的平均工资的薪资等级。

第一步:找出每个岗位的平均工资(按照岗位分组求平均值)

select

(岗位),avg((工资))

from

(员工表)

group by

(岗位); //按照岗位分组

第二步:把以上的查询结果就当做一张真实存在的表t。

select * from salgrade;//工资等级 s表

第三步:t表和s表进行表连接,

条件:t表avg(工资) between s.(最低工资) and s.(最高工资);

select

t.*,s.(等级)

from

(select (岗位),avg(工资) as avgsal from (员工表) group by (岗位)) t // 别名 t

join

(工资等级表) s

on

t.avgasl between s.(最低工资) and s.(最高工资);

3.5、select 后面出现的子查询(了解)

例:找出每个员工员工名称,部门编号,部门名称

select

e.(员工姓名),e.(部门编号),

(select d.(部门名称) from (部门表) d

where e.部门编号 = d.(部门编号)) as dname

from

(员工表) e;

以上 select 出现子查询查出了 部门名称

以下错误案例:

select

e.(员工姓名),e.(部门编号),

(select (部门名称) from (部门表)) as dname

from

(员工表) e;

注意:

对于select后面的子查询来说,这个子查询只能一次返回1条结果,

多于1条,就会报错

4,union 合并查询结果集

例:查询工作岗位是MANAGER和SALESMAN的员工

平常写法:

select

(姓名),(岗位)

from

(员工表)

where

(岗位) = ‘MANAGER’ or (岗位) = ‘SALESMAN’;

//或者

select

(姓名),(岗位)

from

(员工表)

where

(岗位) in(‘MANAGER’,‘SALESMAN’);

使用 union 合并查询

select (姓名),(岗位) from (员工表) where (岗位) = ‘MANAGER’

union

select (姓名),(岗位) from (员工表) where (岗位) = ‘SALESMAN’;

相比较:

union的效率要高一些。对于表连接来说,每连接一次新 表,

则匹配的次数满足笛卡尔积,成倍的翻。。。

但是union可以减少匹配的次数。在减少匹配次数的情况下,

还可以完成两个结果集的拼接。

匹配次数:

a 连接 b 连接 c

a 10条记录

b 10条记录

c 10条记录

匹配次数是:1000

a 连接 b一个结果:10 * 10 --> 100次

a 连接 c一个结果:10 * 10 --> 100次

使用union的话是:100次 + 100次 = 200次。

(union把乘法变成了加法运算)

union注意事项:

1、union在进行结果集合并的时候,要求两个结果集的列数相同。以下错误案例:

select (姓名),(岗位) from (员工表) where (岗位) = ‘MANAGER’

union

select (姓名) from (员工表) where (岗位) = ‘SALESMAN’;

2、结果集合并时列和列的数据类型也要一致。

在MySQL里面可以,oracle 语法比较严格,不可以

5、limit(重要)

5.1、limit作用

作用:

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

例如:

百度默认:一页显示10条记录。

分页的作用:

为了提高用户的体验,因为一次全部都查出来,用户体验差。

分页可以一页一页翻页看。(类似百度的页数)

5.2、limit的用法

完整用法:

limit startIndex, length

//startIndex是起始下标,length是长度。

//起始下标从0开始。

缺省用法:

limit 5; //取出前5个值

例:按照薪资降序,取出排名在前5名的员工

select

(姓名),(工资)

from

(员工表)

order by //工资排序

(工资) desc

limit 5; //取出前5个

以下的结果相同:

select

(姓名),(工资)

from

(员工表)

order by //工资排序

(工资) desc

limit 0,5; //取出0到5个

5.3、注意:mysql当中limit在order by之后执行
5.4、取出工资排名在[3-5]名的员工

select

(姓名),(工资)

from

(员工表)

order by //工资排序

(工资) desc

limit

2,3; //取出3到5个

注意:

2表示起始位置从下标2开始,就是第三条记录。

3表示长度。

5.5、分页

每页显示3条记录:

第1页:limit 0,3 [0 1 2]

第2页:limit 3,3 [3 4 5]

第3页:limit 6,3 [6 7 8]

第4页:limit 9,3 [9 10 11]

记分页的公式:

limit ((第几页)-1) * (每页显示的条数) , (每页显示的条数)

6、关于DQL语句的大总结:

select

from

where

group by

having

order by

limit

执行顺序:

1、from

2、where

3、group by

4、having

5、select

6、order by

7、limit…

7、表的创建(建表)

7.1、建表的语法格式:(建表属于DDL语句,DDL包括:create drop alter)

语法:

create table ((表名))((字段名1) 数据类型,(字段名2) 数据类型,(字段名3) 数据类型)

可以这样写:

create table 表名(

字段名1 数据类型,

字段名2 数据类型,

字段名3 数据类型

);

命名方式:

表名:建议以t_ 或者 tbl_开始,可读性强。见名知意。

字段名:见名知意。

表名和字段名都属于标识符。

7.2、mysql中的数据类型

常见的数据类型:

1、varchar(最长255)

2、char(最长255)

3、int(最长11)

4、bigint

5、float

6、double

7、date

8、datetime

总结

机会是留给有准备的人,大家在求职之前应该要明确自己的态度,熟悉求职流程,做好充分的准备,把一些可预见的事情做好。

对于应届毕业生来说,校招更适合你们,因为绝大部分都不会有工作经验,企业也不会有工作经验的需求。同时,你也不需要伪造高大上的实战经验,以此让自己的简历能够脱颖而出,反倒会让面试官有所怀疑。

你在大学时期应该明确自己的发展方向,如果你在大一就确定你以后想成为Java工程师,那就不要花太多的时间去学习其他的技术语言,高数之类的,不如好好想着如何夯实Java基础。下图涵盖了应届生乃至转行过来的小白要学习的Java内容:

请转发本文支持一下

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
:**

1、from

2、where

3、group by

4、having

5、select

6、order by

7、limit…

7、表的创建(建表)

7.1、建表的语法格式:(建表属于DDL语句,DDL包括:create drop alter)

语法:

create table ((表名))((字段名1) 数据类型,(字段名2) 数据类型,(字段名3) 数据类型)

可以这样写:

create table 表名(

字段名1 数据类型,

字段名2 数据类型,

字段名3 数据类型

);

命名方式:

表名:建议以t_ 或者 tbl_开始,可读性强。见名知意。

字段名:见名知意。

表名和字段名都属于标识符。

7.2、mysql中的数据类型

常见的数据类型:

1、varchar(最长255)

2、char(最长255)

3、int(最长11)

4、bigint

5、float

6、double

7、date

8、datetime

总结

机会是留给有准备的人,大家在求职之前应该要明确自己的态度,熟悉求职流程,做好充分的准备,把一些可预见的事情做好。

对于应届毕业生来说,校招更适合你们,因为绝大部分都不会有工作经验,企业也不会有工作经验的需求。同时,你也不需要伪造高大上的实战经验,以此让自己的简历能够脱颖而出,反倒会让面试官有所怀疑。

你在大学时期应该明确自己的发展方向,如果你在大一就确定你以后想成为Java工程师,那就不要花太多的时间去学习其他的技术语言,高数之类的,不如好好想着如何夯实Java基础。下图涵盖了应届生乃至转行过来的小白要学习的Java内容:

请转发本文支持一下

[外链图片转存中…(img-GKr3872y-1714710751723)]

[外链图片转存中…(img-B7tU1R36-1714710751723)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值