mysql查询语句

文章目录

  • mysql查询语句
    • 准备数据
    • 查询
    • 条件查询
    • 逻辑运算符
    • 模糊查询
    • 范围查询
    • 空判断
    • 排序
    • 聚合函数
    • 分组
    • 分页
    • 连接查询
    • 自关联
    • 子查询

准备数据

准备一个数据库
两个表students,classes
准备数据students

insert into students values
(0,'小明',18,180.00,2,1,0),
(0,'小月月',18,180.00,2,2,1),
(0,'彭于晏',29,185.00,1,1,0),
(0,'刘德华',59,175.00,1,2,1),
(0,'黄蓉',38,160.00,2,1,0),
(0,'凤姐',28,150.00,4,2,1),
(0,'王祖贤',18,172.00,2,1,1),
(0,'周杰伦',36,null,1,1,0),
(0,'程坤',27,181.00,1,2,0),
(0,'刘亦菲',25,166.00,2,2,0),
(0,'金星',33,162.00,3,3,1),
(0,'静香',12,180.00,2,4,0),
(0,'郭靖',12,170.00,1,4,0),
(0,'周杰',34,176.00,2,5,0);

准备数据classes

insert into classes values(0,"python_01期"),(0,"python_02期"),(0,"python_04期");

查询

查询所有字段

select * from 表名;
select * from students;
select * from classes;

一定条件查询

select * from 表名 where 条件;
select * from student where name="老王";
select * from student where id=3;

查询指定字段

select 字段1,字段2... from 表名;
select name,age from students;

可以使用as为字段指定别名

select 字段1 as 别名1,字段2 as 别名2... from 表名;
select name as 姓名,ager as 年龄 from students;
select gender as 性别,name as 姓名 from students;

可以使用as为指定别名

select 表别名.字段1,表别名.字段2... from 表名  as 表别名;
select sss.name,sss.age from students as sss;
select student.name,student.age from students as sss;(失败);

消除重复行

select distinct 字段 from 表名;
select distinct gender from students;

条件查询

select ... from 表名 where ....

比较运算符

  • >

查询大于18岁的信息

select * from students where age>18;
  • <

查询小于18岁的信息

select * from students where age<18;
  • <=
  • >=

查询小于等于/大于等于18岁的信息

select * from students where age<=18;
select * from students where age>=18;
  • =

查询等于18岁的所有学生的名字

select name from students where age=18;
  • !=

查询不等于18岁的所有学生的名字

select name from students where age!=18;

逻辑运算符

  • and

18到28之间的所以学生信息

select * from students where age>18 and age<28;
select * from students where age>18 and <28(这样会报错)

18岁以上的女性

select * from students where age>18 and gender="女";
select * from students where age>18 and gender=2;
  • or

18以上或者身高超过180(包含)以上

select * from students where age>18 and height>=180;
  • not

不在18岁以上的女性这个范围内的信息

select * from students where not age>18 and gender=2;
select * from students where not (age>18 and gender=2); -- (正确)

年龄不是小于或者等于18并且是女性

select from students where not age<=18 and gender=2;

模糊查询

  • like

    • %替换1个或多个
    • _替换1个(必须有一个)

查询姓名中 以“小”开始的名字

// select name from students where name="小";
select name from students where name like "小%";

查询姓名中 有“小”的名字

select name from students where name like "%小%";

查询有2个字的名字

select name from students where name like "__";

查询有3个字的名字

select name from students where name like "___";

查询至少有2个字的名字

select name from students where name like "__%";
  • rlike 正则

查询以 周 开始的姓名

select name from students where name rlike "^周.*";

查询以 周 开始,伦 结尾的姓名

select name from students where name rlike "^周.*伦$";

范围查询

  • in

in(1,3,8)表示在一个非连续的范围内

查询年龄为18、34的姓名

select name,age from students where age in (12,18,34);
  • not in不非连续性的范围之内

查询年龄不是18、34之间的信息

select name,age from students where age not in (12,18,34);
  • between ... and ... 表示在一个连续的范围内

查询年龄在18到34之间的的信息

select name,age from students where age between 18 and 34;
  • not between ... and ...表示不在一个连续的范围内

查询年龄不在 在18到34之间的的信息

select * from students where age not between 18 and 34;
// 下面是失败的例子
select * from students where age not (between 18 and 34);
select * from students where not age between 18 and 34;

空判断

  • 判空 is null

查询身高为空的信息

select * from students where height is null;
  • 判非空 is not null
select * from students where height is not null;

排序

  • order by 字段

  • asc从小到大排列,即升序

  • desc从大到小排序,即降序

查询年龄在18到34岁之间的男性,按照年从小到大排序

select * from students where (age between 18 and 34) and gender=1;
select * from students where (age between 18 and 34) and gender=1 order by age;
select * from students where (age between 18 and 34) and gender=1 order by age asc;//从小到大
select * from students where (age between 18 and 34) and gender=1 order by age desc;//从大到小

查询年龄在18到34岁之间的女性,身高从高到矮排序

select * from students where (age between 18 and 34) and gender=2 order by height desc;
  • order by 多个字段

查询18到34岁之间的女性,身高从高到矮排序,如果身高相同的情况下按照年龄从小到大排序

select * from students where (age between 18 and 34) and gender=2 order by height desc,age asc;

查询18到34岁之间的女性,身高从高到矮排序,如果身高相同的情况下按照年龄从小到大排序,如果年龄也相同那么按照id从大到小排序

select * from students where (age between 18 and 34) and gender=2 order by height desc,age asc,id desc;

按照年先按龄从小到大、再同时按身高从高到矮的排序

select * from students order by age asc,height desc;

聚合函数

  • count总数

查询男性有多少人,女性有多少人

select count(*) as 男性人数 from students where gender=1;
select count(*) as 女性人数 from students where gender=2;
  • max最大值
  • min最小值

查询最大/最小的年龄

select age from students ;
select max(age) as 最大年龄 from students ;
select min(age) as 最大年龄 from students ;

查询女性的最高/最矮身高

select max(height) as 最高身高 from students where gender=2;
select min(height) as 最高身高 from students where gender=2;
  • sum求和

计算所有人的年龄总和

select sum(age) from students ;
  • avg平均值

计算所有人的平均年龄

select avg(age) from students ;

计算平均年龄 sum(age)/count(*)

select sum(age)/count(*) from students ;
  • round(123.23,1)四舍五入,保留一位小数

计算所有人的平均年龄,保留两位小数

select round(sum(age)/count(*),2) from students;

计算男性的平均身高,保留两位小数

select round(avg(height),2) from students where gender=1;

分组

分组(配合聚合函数使用)

  • group by

按照性别分组,查询所有的性别

select gender from students group by gender;

计算每种性别的信息

select gender,count(*) from students group by gender;
select gender,avg(age) from students group by gender;
select gender,max(age) from students group by gender;

计算男性的人数

select gender,count(*) from students where gender=1 group by gender;
  • group_concat(...)

查询同种性别中的姓名

select gender,group_concat(name) from students where gender=1 group by gender;
select gender,group_concat(name,age,gender) from students where gender=1 group by gender;
select gender,group_concat(name,"_",age,"_",gender) from students where gender=1 group by gender;
  • having 查出结果进行判断

查询平均年龄超过30岁的性别,以及姓名 having avg(age) >30

select gender,group_concat(name),avg(age) from students group by gender having avg(age) >30;

查询每种性别中的人数多于2的信息

select gender,group_concat(name) from students group by gender having count(*)>2;

分页

  • limit start(开始位置),count(总数)

限制查询出来的数据个数

select * from students where gender=1 limit 2;

查询前5个数据

select * from students where gender=1 limit 开始位置,数据个数;
select * from students where gender=1 limit 0,5;
select * from students where gender=1 limit 5,5;
select * from students where gender=1 limit 10,5;

查询id6-10(包含)的顺序

select * from students where gender=1 limit 5,5;

每页显示2个,第1个页面

select * from students where gender=1 limit 0,2;

每页显示2个,第2个页面

select * from students where gender=1 limit 2,2;

每页显示2个,第3个页面

select * from students where gender=1 limit 4,2;

每页显示2个,第4个页面

select * from students where gender=1 limit 6,2;

*limit (第N页-1)每页个数,每页个数;

每页显示2个,显示第6个页面的信息,按照年龄从小到大排序

limit 在最后

(失败)select *from students limit 2*(6-1),2;
(失败)select *from students limit 10,2 order by age asc;
select * from student order by age asc limit 10,2;

查询所有女性的身高信息,从高到矮排序,只显示两个

select * from students where gender=2 order by height desc limit 0,2;

连接查询

  • inner join ... on

select … from 表A inner join 表B;

select * from students inner join classes;

查询 有能够对应班级的学生以及班级信息

select * from students inner join classes on students.cls_id=classes.id;

按照要求显示姓名班级

select students.* ,classes.name from students inner join classes on students.cls_id=classes.id;

给数据表起名字

select s.name ,c.name from students as s inner join classes as c on s.cls_id=c.id;

查询 有能够对应班级的学生以及班级信息,显示学生的所有信息,只显示班级名称

select s.* ,c.name from students as s inner join classes as c on s.cls_id=c.id;

在以上查询中,将班级姓名显示在第1列

select c.name,s.*  from students as s inner join classes as c on s.cls_id=c.id;

查询 有能够对应班级的学生以及班级信息,按照班级进行排序

select c.name,s.*  from students as s inner join classes as c on s.cls_id=c.id order by c.name;

当时同一个班级的时候,按照学生的id进行从小到大排序

select c.name,s.*  from students as s inner join classes as c on s.cls_id=c.id order by c.name,id;
  • left join

查询每位学生对应的班级信息

select * from students as s left join classes as c on s.cls_id=c.id;

查询没有对应班级信息的学生

从原表里面找用where,从结果表中找用having

select * from students as s left join classes as c on s.cls_id=c.id where c.id is null;
select * from students as s left join classes as c on s.cls_id=c.id having c.id is null;

right join

将数据表名字互换位置,用left join完成

自关联

一张表的时候

select * from areas as province inner join areas as city on city.pid=province.aid having province.atitle="xx省";

子查询

selcet语句里面嵌套一个子select,先执行子select

查询最高的男生信息

select * from students where height = (select max(height) from students);

【MySQL】查询语句相关推荐

  1. mysql 查询语句执行顺序_MySQL 查询语句执行过程

    MySQL 查询语句执行过程 Mysql分为server层和存储引擎两部分,或许可以再加一层连接层 连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注的是, ...

  2. php面试专题---MYSQL查询语句优化

    php面试专题---MYSQL查询语句优化 一.总结 一句话总结: mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存) ...

  3. mysql 查询语句_MySQL相关(一)- 一条查询语句是如何执行的

    前言 学习一个新知识最好的方式就是上官网,所以我先把官网贴出来 MySQL官网 (点击查阅),如果大家有想了解我没有说到的东西可以直接上官网看哈~目前 MySQL 最新大版本为8.0,但是鉴于目前应用 ...

  4. mysql查询语句详解_基于mysql查询语句的使用详解

    1> 查询数据表除了前三条以外的数据. 起初我想到的是这条语句 SELECT * FROM admin WHERE userid NOT IN (SELECT userid FROM admin ...

  5. php通过数组存取mysql查询语句的返回值

    php通过数组存取mysql查询语句的返回值 1.示例1 $res = mysql_query($mysqli, $sql) or die(mysql_error($mysql)); $a=array ...

  6. java mysql查询语句_Mysql查询语句执行过程

    Mysql查询语句执行过程 Mysql分为server层和存储引擎两部分,或许可以再加一层连接层 连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注的是, ...

  7. MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介

    网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...

  8. left join 最后一条_一条Mysql查询语句的西天取经之路,你真的了解吗?

    数据库,大家都不陌生,这是程序员的基本技能了.当然,我们更多时候只是去了解如何使用数据库,而对数据库一些底层原理却比较陌生,今天我们来了解一下,一条数据库查询语句的取经之路. 基本分层 个人认为,My ...

  9. mysql 处理一条语句卡死_一条MySQL查询语句,卡死机器,不知道为什么,求高手指点!...

    你的位置: 问答吧 -> MySQL -> 问题详情 一条MySQL查询语句,卡死机器,不知道为什么,求高手指点! 我的这条查询语句有什么问题吗?为什么一运行,机器就卡死了!N久查询不出结 ...

  10. 两小时学会MySQL查询语句(下篇)

    学生表 #创建表 CREATE TABLE LX_student( studentId INT(8) PRIMARY KEY NOT NULL, studentName VARCHAR(8) NOT ...

最新文章

  1. 查询显示注释_SQL汇总--简单查询
  2. 红帽子linux安装ftp,Linux 安装 vsftpd ftp软件包
  3. electron打包
  4. 你见过哪些堪称绝妙的数学证明?
  5. 【2016年第5期】卫星影像大数据情报分析与应用
  6. 2017.4.21 2^k进制数 思考记录
  7. unity3d-ngui UIScrollView 滚动方向与滚轮相反
  8. android 多媒体封装格式详解---MKV
  9. ttl低电平接大电阻_谈谈上拉、下拉电阻
  10. robosense激光雷达使用及适配autoware
  11. Python中随机梯度下降法
  12. Photoshop 制作水晶按钮
  13. 企业物流营销组合模式探讨 (zt)
  14. gta5因为计算机丢失,GTA5丢失MSVCR100.dll怎么办 修复方法介绍
  15. 2023上学期学习计划
  16. html显示宇宙星星,回复评论
  17. php+创建微信标签,微信公众号——创建标签,给粉丝打标签。
  18. 口袋取球的取法问题(C++实现)
  19. iOS开发 ---- 其他控件,弹窗,滑块,菊花,步进,分段等
  20. ORACLE对象权限被非授权用户收回的可行性探究

热门文章

  1. 中国科幻扛鼎之作,原来真的不止刘慈欣
  2. BTF社区不忘初心共筑未来通证新经济
  3. SQL进阶之路03:三值逻辑和NULL
  4. 【ybt金牌导航8-7-1】数对统计 / 关于莫比乌斯函数的少量内容
  5. 脑电波实时数据收集——RDA—数据包定义
  6. ArcGIS Pro鹰眼图快速制图
  7. cesium 入门开发系列地图鹰眼功能(附源码下载)
  8. 动态算法一(转载——逸仙时空)
  9. 基于PaddlePaddle框架对CIFAR-100数据集在简易CNN(LeNet-5修改)和简易DNN的效果对比
  10. 在数据库中一个汉字到底占几个字节