mysql中实验9查询_mysql查询语句(九)

一、

建员工表 : d_id   是部门  id

8e8680402c9380e281007403ec49770f.png

1.多字段进行排序,薪资一样,名字按字典顺序排

d06b2ae9a65324a9cc9203a7c8132347.png

2.limit的使用

语法

limit  [位置偏移量]  行数。 位置偏移量:就是从哪行开始显示,第一条记录是0,第二条为1,...

37d7dec2b6a0609fc2bdc46fdd6ef1e6.png

连接查询

(一)内连接 查询

使用比较运算符进行表之间某些列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组成新

的记录,就是只有满足条件的列才会出现在结果列表中。

建部门表department

6ac5e5a58f93c5af71af2a58ea397250.png

1.employee 和department 两个表有共同的字段d_id 可以建立连接,使用内连接查询

04c733ad0650f5adf13a121766e62288.png

2.使用INNER JOIN 语句  和上面一样的效果

266e44c2769ade1c622829ea8bee8656.png

3. 如果一个连接查询中涉及到的表是同一张表,那就是自连接查询

查询e_id=1的员工在的部门中所有员工的编号。

6d326d02b824f6c7fac9316ade63a463.png

左外连接查询

1.查询所有员工所在部门,没有部门也列出。

aac27b141f29d931933b6a4f4f922cda.png

c8eedec52ea29a39ffc47f9093bc577a.png

右外连接查询

57ee7902ce4d52e40571fa2a7f598194.png

复合条件连接诶查询

1.使用INNER JOIN  查询employee 中部门编号为1001的客户名称

55d64df115d64aa426c6a58e2551285f.png

子查询

带exists关键字的子查询

exists后面的是任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,则exists返回为true,

此时外层查询语句将进行查询,反之,exists发回false,则外层语句将不进行查询。

1. 查询department中是否存在d_id=1007的员工,如果存在则查询employee表的员工。

b7ae190f1e07909a17f23dce2a49d8d9.png

2.not exists和上面相反,原理一样

e8883804fca2b848cab70a601ac725e1.png

合并查询

UNION   和UNION  ALL

使用union关键字可以给出多条select语句,并将它们的结果合成单个结果集,合并时两个表对应的列数和数据类型必须相同,

各个select之间用union或是union all 相隔离,union 没有all时,执行的时候会删除重复的记录,所有返回的都是唯一的,

有all 的话,不删除重复,且不对结果进行排序。

1. 查询所有工资小于5000的员工信息,查询d_id等于1001和1003的所有员工信息使用UNION连接查询。

先看所有工资小于5000的员工信息的数据

6f77b18ce4fe5da52e379b4d9ffb5c7a.png

查询d_id等于1001和1003的所有员工信息

de68777def622623fbfd850b520a76fb.png

用union

f699b5ccd27ed4c3129b4507e4523dbb.png

2.使用UNION ALL

53f7cc720d5a8fed8118a34a31305f17.png

正则表达式

mysql使用regexp 关键字指定正则表达式的字符匹配模式,以下列出regexp操作符后常用的匹配字符

f6d2548795b3114b9e868e95e7067211.png

1.查询employee中,e_name以黄子开头的员工

092692baba63772b386f44492a5e8d52.png

2.查询employee中,e_name以龙字结束的员工

3d84492008ef4261f3e1ba8974c47aa7.png

3.为了达到效果重新建emp表

2e20589b720eeff4a3802cf11df792a4.png

查询emp中name里面有i 和a且两个字母之间只有一个字母的记录。

797d0fdd1f99680f5c7f4b40c5363d21.png

4. 查询name中,以字母x开头,且x后出现字母i 的记录

71363ddb86204e06b7e381b869a0fd25.png

因为*是匹配零次或是多次,所以x后没有i也会匹配

5.4.查询name中,以字母x开头,且x后出现字母i 至少一次的记录

2e389bb39c844d3d493f55e0bdcf5bf9.png

6..查询name中,包含en的名字

c6c54c6a359d46a06d6bf1bacaef3eff.png

7. 查询name中,包含en或是ao的名字:会删除重复的项

6348573f6d1f28cec9ff2abe0633e14a.png

8. 用like查询name字段中包含en 的名字

a9ff8a0d391737b687e7d0219f29bf49.png

9.数据库添加mao这个名字,查询名字中包含m或o,或是两者都有的名字

49c64036c6cd2fc03bf872545a50a8bc.png

10.查询id字段中包含2或是3,或是4的情况

eb5992492cdb1a521ad5a32aa329c51e.png

也可以写成[234]

10.查询id字段中包含2,3以外的情况

350a3515aaae7a97b19acd9e817206ed.png

11.查询name中字母 i至少出现一次的情况

2678c65fa0f275795aeedd01cdad7f05.png

总结:regexp和like

当like 查询以包含en字母的时,like ‘%en%’ ,这样的情况,regexp和 like一样的效果。

关于LIKE和REGEXP的区别:LIKE匹配整个列。如果被匹配的文本仅在列值中出现,LIKE并不会找到它,

相应的行也不会返回(当然,使用通配符除外)。而REGEXP在列值内进行匹配,如果被匹配的匹配的文本在列值中出现,

REGEXP将会找到它,相应的行将被返回,这时一个非常重要的差别(当然,如果适应定位符号^和$,可以实现REGEXP匹配整个列而不是列的子集)。

关于大小写的区分:MySQL中正则表达式匹配(从版本3.23.4后)不区分大小写 。

如果要区分大小写,应该使用BINARY关键字,如where post_name REGEXP BINARY 'Hello .000'

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值