MySQL_连接、联合查询、子查询、正则表达式查询

1568-青同学

发表文章数:45

热门标签

首页 » MySQL » 正文

一、查询语句补充

(1)ORDER BY 排序
实现排序功能,加在查询语句的最后,除了LIMIT之外。

(2)LIMIT 限制显示的条数
LIMIT 显示条数
LIMIT 偏移量, 显示条数 # 偏移量表示从第几个开始

(3)更新记录和删除记录
之前讲的比较单一,可以把更新和查询放在一起
给更新加上条件。
WHERE
ORDER BY 
栗子:
UPDATE cms_user SET age=age+10 ODER BY
id DESC LIMIT 3;
LIMIT  # 更新和删除只能加上一个值

二、内连接和外连接

(1)什么是连接查询
将两个以上的表按某个条件连接起来使用。

(2)内连接查询
JOIN | CROSS  JOIN |  INNER JOIN
通过ON 连接条件
显示两个表中符合条件的记录

# 栗子
SELECT cms_user.id, user_name,proName FROM
cms_user, provinces 
WHERE cms_user.proId = province.id; # 这是连接条件
SELECT u.id,u.username,u.email,u.sex, p.proName
FROM cms_user AS u
INNER JOIN provinces AS p  # 用CROSS JOIN 结果一样
ON u.proId = p.id; # 这是连接条件
# 这里可以再放一些WHERE、GROUP BY 或者HAVING 等等

# 连接三个表就再JOIN一次就好

(3)外连接 # 一般内连接用的多
# 左外连接、右外连接
## 左外连接:显示左表的全部记录以及右表符合连接的记录
LEFT JOIN     ON
比如左表某个值找不到右表对应的值,该记录再该字段显示NULL
(比如坐标的课程编号在右表找不到对应的课程)
##右外连接:显示右表的全部记录以及左表符合连接的记录
比如左表某个值找不到右表对应的值,就不会显示该记录

(4)外键查询  # 上面例子的情况可以用外键避免
# 保证垃圾数据不被写入成功

1、在建表的时候创建
FOREIGN KEY (字段) REFERENCES tb2_name(这各字表的主键)
#主表和从表,后者是主表。要对从表操作,必先安置好主表。
#比如要清除某个课程,先让所有学生不选该课

2、添加外键
建表: 
CONSTRANT 外键名称 FOREIGN KEY (字段) REFERENCES  
tb2_name(这各字表的主键) # 指定外键名称

cmd中: 
ALTER TABLE 表名 ADD CONSTRANT 外键名称 
FOREIGN KEY (字段) REFERENCES  tb2_name(字表的主键)

3、删除外键
ALTER TABLE 表名称 DROP FOREIGN KEY 外键名称;
用SHOW CREATE TALBE 表名    来查看

4、父表和子表记录同步
#在创建外键的语句后加上 ON DELET CASCADE
同步删除记录(子表删了课程,父表学生选课也没了)
同样 ON AUDATE CASCADT, 父子表同时变
# 除了CASCADE 还有RESTRICT : 拒绝对父表删除和更新
# NO ACTION 与RESTRICT 相同

三、联合查询和子查询

(1)联合查询  #连接查询的最后一个
UNION  # 合并,去掉相同的记录
UNION ALL  # 简单的合并
SELECT username FROM emplyee UNION SELECT 
username FROM cms_user;

(2)子查询 
# 将一个查询语句嵌套在另一个查询语句中
#内层查询作为外层查询的条件

1、由IN|NOT IN 引发的子查询
SELECT id,username FROM employee WHERE depId
IN(SELECT id FROM department)

2、比较运算符的子查询
SELECT id,username FROM student WHERE score>=
(SELECT level FROM scholarship WHERE id=1);

3、[NOT] EXISTS()的子查询
#如果是EXISTS(查询语句),查询结果不为NALL则为真
SELECT username FROM employee WHERE EXISTS
(SELECT * FROM department WHERE id=5)

4、ANY|SOME 或者ALL 的子查询(与运算符配合)

MySQL_连接、联合查询、子查询、正则表达式查询

SELECT id,username FROM student WHERE score>=
ANY(SELECT level FROM scholarship)
# 子查询查到了达到奖学金的的最低分数
# 上面是 >= 与 ANY 的组合,其余可以自己组合
# <>ALL 相当于NOT IN
# = ANY 相当于 IN

5、将查询结果写入到数据表
INSERT [INTO] 表名 [(字段名, )] SELECT ......
栗子:
INSERT test1(id, name) SELECT id,score FROM student

6、创建数据表的同时将查询些过写入到数据表
CREATE TABLE [IF NOT EXISTS] tb_name 
[create_definition,...]
查询语句
# 例子
CREATE TABLE test2(
id TINYINT USIGNED AUTO_INCREMENT KEY,
num TINYINT UNSIGNED) 
SELECT id,score FROM student;

四、正则表达式查询
MySQL_连接、联合查询、子查询、正则表达式查询

SELECT * FROM cms_user WHERE username 
REGEXP '^t' ; # 查询名称以t/T 开头的人
SELECT * FROM cms_user WHERE username 
REGEXP 'Q..g'; #两个点表示两个任意字符
SELECT * FROM cms_user WHERE username 
REGEXP ‘[lto]’ # 这三个字符任何一个都显示
SELECT * FROM cms_user WHERE username 
REGEXP ‘[^lto]’ # 除了这三个字符
标签:

未经允许不得转载:作者:1568-青同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《MySQL_连接、联合查询、子查询、正则表达式查询》 发布于2021-02-07

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录