加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL数据库的查询操作

发布时间:2022-10-15 09:01:23 所属栏目:MySql教程 来源:未知
导读: 首先展示一下我们的表
课程表 course

成绩表 sc

学生表student

教室表 teacher

SQL查询的基本操作
从上面的表展示可以看出我获得表的数据是通过
select * from 表 展示了表的所有内容数

首先展示一下我们的表

课程表 course

在这里插入图片描述

成绩表 sc

在这里插入图片描述

学生表student

在这里插入图片描述

教室表 teacher

在这里插入图片描述

SQL查询的基本操作

从上面的表展示可以看出我获得表的数据是通过

select * from 表 展示了表的所有内容数据库查询操作,这就是查询的最基本操作。

基本查询

select 属性1 from 表名;

查询 表 中所有记录的 属性1( * 号代表全部属性)

在这里插入图片描述

条件查询:

select 属性 from 表 where 条件表达式;

表示在 表 中查询 满足条件 的 记录的属性

在这里插入图片描述

带 in 查询

select 属性1 from 表 where 属性2 in (x,x,x);

表示在表中查找满足 属性2 只要包含于后面这个集合,那么就打印此记录的属性1。

在这里插入图片描述

或者 在 in 前面加 not 就表示 只要属性2 不包含于后面这个集合,那么就打印此记录的属性1。

select 属性1 from 表 where 条件 not in (xx,xx,xx);

在这里插入图片描述

范围查询

select 属性1 from 表 where 条件 属性2 between a and b。

表示查询 表 中 满足条件 属性2 在a 到 b 区间(闭区间)的记录的属性1 。

在这里插入图片描述

或者加上not 就表示不在此区间的记录的 属性1。

select 属性1 from 表 where 条件 属性2 not between a and b;

在这里插入图片描述

模糊查询

假如我要查一位学生我只直到它的第二个字是 ‘兰’ ,那么我们可以快速查询出来名字第二个字是兰的学生信息。

’‘ 和 ’%‘ 都叫通配符。但是 表示占用一个字符位置,%可以表示任意字符位置

select 属性1 from 表 where 属性2 like ‘_兰’;

在这里插入图片描述

那么问题来了,假如我再插入一个学生叫做 纳兰性德 ,结果还是如此么?

在这里插入图片描述

这就说明了_占用1个字符。

但这不是我想要的查询结果我并不知道名字有几个字,我只确定第二个字是兰 所以我们还需要再兰字后面加上通配符 % 即可。

在这里插入图片描述

空值查询

select 属性1 from 表 where 属性2 is NULL;

select 属性1 from 表 where 属性2 is not NULL;

表示在 表 中 查询属性2 为空 和 属性2 不为空的记录的属性1。

在这里插入图片描述

在这里插入图片描述

多条件查询

select 属性1 from 表 where 条件1 and 条件2;

在 表 中查询 同时满足条件1 和 条件2 的记录的属性1

select 属性1 from 表 where 条件1 or 条件2;

在 表 中查询 满足条件1 或者 条件2 的记录的属性1

在这里插入图片描述

去重查询

拿学生表举例,我就查寻男同学的年龄情况,我只需要知道有哪些年龄就行,我没必要把多个 20岁 给列出来。所以我们就用 distinct 关键字来解决。

select distince 属性1 from 表 where 条件

在这里插入图片描述

对结果进行排序

order by 属性名 [asc| desc];

asc:升序(默认是胜序) desc:降序

select 属性1 from 表 where 条件 order by 属性2 asc;

表示在 表 中查询 满足条件 的记录的属性1 ,并且按照属性2 进行升序排序。

在这里插入图片描述

分组查询

分组查询表示,我按照某种条件进行分组,我分别对每个组进行查询。

所以这包含了两个条件,怎么分组?怎么查询?

select 属性1 from 表 group by 分组条件 having 查询条件。

例如:我要查询每一门课程中分数大于60的记录。

在这里插入图片描述

分页查询

假如说查询的结果极其之长,那么我们就需要用到分页查询。

select 属性1 from 表 where 条件 limit index , num;

表示对表 查询属性1 并且对结果进行 分页,只展示从index1 开始的num条数据

在这里插入图片描述

从以上结果可以看出,单写一个数字也是可以的,默认第一个index 为0。

别名

select 属性 from 表 as 表的别名;

select 属性 from 表 (空格) 表的别名;

当表太多的时候,我们就可以起别名方便我们码SQL

在这里插入图片描述

函数

AVG(属性)计算记录中属性的平均值

SUM(属性)计算记录中属性的和

MAX(属性)计算记录中属性的最大值

MIN(属性)计算记录中属性的最小值

COUNT(属性)计算查询结果的总记录数。

例如:

select MAX(Sage) from Student;

在这里插入图片描述

多表查询

内连接,外连接:左连接、右连接

内连接查询

select 属性1 from 左表 inner join 右表 on 条件;

说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分。

在这里插入图片描述

左连接查询

select 属性1 from 左表 left join 右表 on 条件

左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

在这里插入图片描述

右连接查询

select 属性1 from 左表 rigth join 右表 on 条件

与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。

在这里插入图片描述

自连接查询

一个表与自己自身进行连接操作时,称为自连接

在这里插入图片描述

假如我要查比吴兰年龄大的学生的信息。这些信息都在同一个表里,所以我们要用到自查询。

select 属性1 from 表1 a,表1 b where 条件;

select 属性1 from 表1 a inner join 表1 b having 条件;

在这里插入图片描述

子查询

子查询也就是嵌套查询,在Where 子句中包含一个形同 Select-from-where的查询块,这类查询,就叫做子查询。并且子查询的执行是由内向外。**

普通子查询

select 属性1 from 表1 where 属性2 = (select 属性2 from 表2 where

条件);

例如:查询 成绩等于80 的同学信息

在这里插入图片描述

ANY

当子查询返回的值不只一个值,而是一个集合。但我最终想要的结果就只想要一个的时候。我们就可以使用ANY。

select 属性1 from 表1 where 属性2 =ANY (select 属性2 from 表2 where 条件);

查询成绩大于60的学生信息

在这里插入图片描述

当然我们也可以用 in 来代替 =ANY

select 属性1 from 表1 where 属性2 in (select 属性2 from 表2 where 条件);

在这里插入图片描述

ALL

ALL的含义就是全部,意思是查询所有满足子查询集合的查询记录。

select 属性1 from 表1 where 属性2 ALL (select 属性2 from 表2 where 条件);

在这里插入图片描述

图片来源

EXISTS

当子查询使用EXISTS关键字时,表示对子查询的结果进行判定也就是让它返回 true 或者 false,如果查询结果存在就返回 true,不存在就返回 false。并且只有当子查询返回为true的时候才会进行父查询,否则不进行查询或者查询为空。

selec 属性1 from 表1 where EXISTS(select 属性2 from 表2 where 条件);

如果学生表中存在sid= 1 的学生,那么就进行子查询,否则不查询

在这里插入图片描述

当子查询返回false 时。

相关子查询

子查询的查询条件需要引用父查询表中的属性值,这一类查询就叫做相关子查询。

相关子查询的查询顺序:

选取父查询表中的第一行记录,子查询利用此纪录的相关属性进行查询,父查询再根据子查询返回的结果判断此行是否满足查询条件,满足条件则放入结果集中。

重复以上操作,知道处理完父查询表中的每一行数据位置。

查询不讲授语文课的老师的信息

select

合并查询

利用UNION关键字和UNION ALL关键字去拼接多个查询记录

格式:

select 属性1 from 表1

UNION(UNION ALL)

select 属性2 from 表2

UNION(UNION ALL)

。。。。。

select 属性n from 表n;

例子:

在这里插入图片描述

我们可以看出这是将所有查询的数据进行拼接而成的,那么假如我两个查询结果时相同的呢?

在这里插入图片描述

UNION关键字进行了去重的操作

在这里插入图片描述

而UNION ALL 关键字仅仅只是拼接了结果而已

把查询结果存储到表中

insert into 目标表 select 属性1 属性2.。。。from 来源表 where 条件;

将来源表的查询数据结果存储到目标表中

目标表:

在这里插入图片描述

在这里插入图片描述

如果我们只是将若干个属性插入到目标表的话

insert into 目标表(属性1, 属性2 …)select 属性1,属性2 … from 来源表 where 条件;

在这里插入图片描述

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!