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 时。 相关子查询 子查询的查询条件需要引用父查询表中的属性值,这一类查询就叫做相关子查询。 相关子查询的查询顺序: 选取父查询表中的第一行记录,子查询利用此纪录的相关属性进行查询,父查询再根据子查询返回的结果判断此行是否满足查询条件,满足条件则放入结果集中。 重复以上操作,知道处理完父查询表中的每一行数据位置。 查询不讲授语文课的老师的信息 合并查询 利用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 条件; (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |