前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学会Mysql第三天

学会Mysql第三天

作者头像
白胡杨同学
发布2020-04-16 14:54:55
7210
发布2020-04-16 14:54:55
举报
文章被收录于专栏:白胡杨同学
常规查询

基本语法:

代码语言:javascript
复制
select 字段名 from 表名 
select * from my_stu;
select name from my_stu;
条件查询

基本语法:

代码语言:javascript
复制
select 字段 from 表名 where 条件

例:查询id为2的学生姓名:

代码语言:javascript
复制
select name from my_stu where id =1;

where使用时注意事项:

  • where 子句可以指定任何条件
  • where 字句条件可以是一个,也可以是多个:这些条件可以用and和or连接
  • where 子句类似if条件。

例:查询25~25之间的学生用between

代码语言:javascript
复制
select * from my_stu where age between 15 and 25;
联合查询

union 操作符用于合并两个或多个select 语句的结果集

代码语言:javascript
复制
select 字段 from 表1
union
select 字段 from 表2;

union 和union all 的区别:

union all 显示所有的查询结果

union 显示删除重复后的结果

不重复查询
代码语言:javascript
复制
select distinct 字段 from 表名;
模糊查询

模糊查询,使用like关键字,基本语法:

代码语言:javascript
复制
select 字段 from 表名 where 字段 like 值;

这里的值是模糊的,需要用到通配符:

1、“%”的使用

用来匹配0个或者多个字符,可以匹配任意类型和长度的字符,对长度没有限制。

例如:查询名字中带有e的学生信息

代码语言:javascript
复制
select * from my_stu where name like '%e%';
2、“_”的使用

“_”用来匹配任意单个字符,常用来限制表达式的字符长度。

例如:查询学生姓名以T开头,后面有2个字符的记录:

代码语言:javascript
复制
select * from my_stu where name like 'T__';
having 语句

1、having 是在 group by 子句之后:可以针对分组数据进行统计筛选。

查询班级人数大于等于个的班级:

代码语言:javascript
复制
select class_id,count(*) from my_student group by class_id having count(*)>=4
排序查询

用order by 关键字来进行排序

代码语言:javascript
复制
select 字段名 from 表名 where 条件 order by field1 desc/asc ,field2 desc/asc,...;
代码语言:javascript
复制
desc:降序
asc:升序--默认
限制查询

用limit 关键字进行限制查询

代码语言:javascript
复制
select 字段 limit 起始偏移量,行数
聚合

基本语法:

代码语言:javascript
复制
select 字段 聚合函数 from 表名 where 条件  group by 分组条件 having 条件;

一些聚合函数

count() 统计字段数量,不统计NULL。 avg() 求平均值 sum() 求和 max() 求最大值 min() 求最小值

统计公司所有员工的工资(sal),以及最高和最低工资

代码语言:javascript
复制
select sum(sal),max(sal),min(sal) from emp;

查询班级人数小于2的班级:

代码语言:javascript
复制
select count(*) as num ,cid from student group by cid having num<2;

group by 一旦执行:结果就是只返回一行记录:第一行

子查询

子查询是嵌套查询下层的程序模块。当一个查询是另一个查新的条件时,成为子查询

指在一条select语句中,嵌入另外一条select语句,那么被嵌入的select语句称为子查询

主查询

主查询指的是主要查询的查询对象,第一条select语句,确定了用户所有获取的数据目标

标量子查询

子查询得到的结果是一个数据(一行一列)

基本语法:

代码语言:javascript
复制
select * from 数据源 where 条件判断 =/<> (select 字段名 from 数据源 where 条件判断)

知道一个学生的名字:小猪,想知道他在哪个班级(班级名字)

代码语言:javascript
复制
select * from my_class where class_id=(select class_id from my_student where stu_name ='小猪');
行子查询

得到的结果是一行多列

行元素:字段元素是指一个字段对应的值,行元素对应的是多个字段:多个字段合起来作为一个元素参与运算,称之为行元素

基本语法:

主查询 where 条件[(构造一个行元素)]=(行子查询);

获取班级上年龄最大,且身高最高的学生:

代码语言:javascript
复制
select * from my_student where (stu_age,stu_height) =  (select max(stu_age),max(stu_heigh)from my_student);
列子查询

得到的结果是一列数据(一列多行)

基本语法:

主查询 where 条件 in (列子查询);

获取已经有学生在班的所有的班级名字

代码语言:javascript
复制
select name from my_class where class_id in (select class_id from my_student);
表子查询

得到结果是多行多列。

行子查询用于where条件判断:where子查询

表子查询是用于from数据源:from 子查询

基本语法:

select 字段表 from (表子查询)as 别名 [where/group by/having/order by/limit]

获取每个班上最高身高的学生(一个)

代码语言:javascript
复制
select * from (select * from my_student order by stu_height desc)  as temp group by class_id;
子查询中特定关键字的使用
in

主查询 where 条件 in (列子查询);

代码语言:javascript
复制
select * from my_student where class_id in (select classs_id from my_class);
any

任意一个:

=any(列子查询):条件在查询结果中有任意一个匹配即可,等价于in

<>any (列子查询):条件在查询结果中不等于任意一个。

代码语言:javascript
复制
select * from my_student where class_id any (select classs_id from my_class);
代码语言:javascript
复制
select * from my_student where class_id <> any (select classs_id from my_class);
some

与any完全一样.

all

全部:

=all(列子查询):等于里面所有

<>all(列子查询):不等于里面所有

代码语言:javascript
复制
select * from my_student where class_id = all (select classs_id from my_class);
代码语言:javascript
复制
select * from my_student where class_id <> all (select classs_id from my_class);

如果对应的匹配字段有null,那么不参与匹配

总结:

常见的三个子查询:

标量子查询、列子查询和行子查询:都属于where子查询

在select语句中,如果from子句引用了多个表源或试图,则可以用join关键字连接

1、内连接

内连接:inner join,从一张表中取出所有的记录去另外一张表中匹配,利用匹配条件

进行匹配。

基本语法:

代码语言:javascript
复制
表1[inner] join 表2 on 匹配条件

1、如果内连接没有条件(允许),那么就是交叉连接

2.使用匹配条件进行匹配

3、因为表的设计通常容易产生同名字段,尤其是ID,为了避免重名出现错误,通常

使用表名.字段名,确保唯一性.

代码语言:javascript
复制
select * from my_student inner join my_class on my_student.class_id=my_class

4、通常,如果条件中使用对应的表名,而表名通常比较长,所以可以通过表别名来简化

5、内连接匹配的时候,必须保证匹配到才保存

6、内连接可以在数据匹配完成后,使用where条件来限制,效果与on一样(推荐使用on).

using 关键字

是在连接查询中用来代替对应的on关键字的,进行条件匹配

1、在连接查询时,使用on的地方用using代替

2、使用using的前提是对应的两张表连接的字段是同名

3、如果using关键字,那么对应的同名字段,最终在结果中只会保留一个

基本语法:

代码语言:javascript
复制
表1[inner,left,right] join 表2 using (同名字段列表)//连接字段
代码语言:javascript
复制
select * from my_student a left join my_class b on a.class_id=b.class_id;
select * from my_student left join my_class using(class_id)
交叉连接

交叉连接:将两张表的数据与另外一张表彼此交叉。

基本语法:

代码语言:javascript
复制
表1 cross join 表2;
外连接

outer join,按照某一张表作为主表(表中所有记录在最后都会保留),根据条件去连接另外一张表

外连接分为两

种:左外连接(left join),右连接(right join)

左连接:左表是主表有连接:有表是主表

1、确定连接主表:左连接就是 left join 左边的表为主表;right join 就是右边为主表

2、拿主表的每一条记录,去匹配另外一张表的每一条记录

3、如果满足匹配条件:保留;不满足不保留。

4、如果主表记录在从表中一条都没有匹配成功,那么也要保留该记录,从表对应的字段值都为null;

基本语法:

代码语言:javascript
复制
左连接:主表 left join 从表 on 连接条件;
右连接: 主表 right join 从表 On 连接条件;

左连接对应的主表数据在左边;右连接对应的主表数据在右边;

代码语言:javascript
复制
select * from my_stydent as s lefy join my_clas c on s.class_id =c.class_id;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常规查询
  • 条件查询
  • 联合查询
  • 不重复查询
  • 模糊查询
    • 1、“%”的使用
      • 2、“_”的使用
      • having 语句
      • 排序查询
      • 限制查询
      • 聚合
      • 子查询
      • 主查询
      • 标量子查询
      • 行子查询
      • 列子查询
      • 表子查询
      • 子查询中特定关键字的使用
        • in
          • any
            • some
              • all
              • 总结:
              • 1、内连接
              • using 关键字
              • 交叉连接
              • 外连接
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档