mysql 30入门_mysql入门(三)
数据库查询操作
关键字:select
select 结果集 from 数据源 [where 条件] [group by(分组)] [having 条件] [order by(排序) asc|desc] [limit(限制) s,n]
结果集(字段,*代表所有字段);s start 从第几条开始,查询n条数据,s不写默认从第一条开始。
(1)字段表达式
select 除了可以做查询,还可以调用函数,也可以用来做计算。
select rand();
(2)from子句
from 子句后面跟的是数据源。
(3)dual表
dual不是一个真实的表,只是一个语法;
dual的主要作用是为了保证select语句的完整性而设计的。
(4)where子句
where子句的作用,筛选过滤数据;
一般跟在数据源的后面,位置不能乱放。
(5)is null | is not null
筛选数据是否为空或不为空;
放在where的后面,是where的判断条件之一。
(6)between | not between
筛选数据的范围,用在数字集上
select * from user where uid between 2 and 4;select * from user where uid>1 and uid<5;
(7)MySQL中的运算符
a.算数运算符
+ - * / % ++ --
b.比较运算符
> = <= != (<>)
c.逻辑运算符
and 与
or 或
not 非
(8).聚合函数
max() 最大值
min() 最小值
sum() 求和
avg() 平均值
count() 计数聚合函数只能写在结果集中。
(9).通配符
_ :一次通配一个字符
% :一次通配多个字符
(10).模糊查询(like)
作用:查找长字符串中的某一个关键字
select * from user where passwd like '_介石';
select * from user where passwd like '%介石%';
(11).分组查询
关键字:groupby
将相同的值分为N个类别,使得统计变的更加的便捷。
create tablestuinfo(
sidint auto_increment primary key comment'学号',
snamechar(64) comment'姓名',
sex enum('女','男'),
agetinyintunsigned,
citychar(64)
);insert into stuinfo values(null,'小马',2,20,'杭州'),(null,'小王',2,21,'潮州'),(null,'小林',2,18,'大连'),
(null,'小强',2,30,'宿迁'),(null,'小军',2,80,'仙桃');insert into stuinfo values(null,'小梅',1,18,'杭州'),(null,'小芳',1,34,'潮州'),(null,'小宝',2,18,'大连'),
(null,'小天',1,21,'宿迁'),(null,'小杨',1,11,'仙桃');create tablestumarks(
stunoint comment'学号',
chfloat comment'语文',
mafloat comment'数学');insert into stumarks values(1,88,99),(2,100,0),(3,0,0),(4,80,59),(5,100,100);insert into stumarks values(6,88,99),(7,100,0),(8,10,0),(9,80,59),(10,100,100);
分组查询
--根据性别分组查询 (得不到想要的结果)
select * from stuinfo group bysex;--根据性别+城市
select * from stuinfo group bysex,city;
--group_concat(),concat是级联(合并);得到根据性别分好的两组姓名
select group_concat(sname) from stuinfo group by sex;
(12).回溯统计(了解)
关键字:with rollup。不常用,放在group by 的后面,在统计的基础上在统计一次。
select *,group_concat(sname) from stuinfo group by sex with rollup;
(13).having条件
where:设置筛选条件,只能在group by前面;
having:设置筛选条件,要求条件匹配的字段必须在结果集当中,在group by后面。
select * from stuinfo where age > 18; #正确
select* from stuinfo having age > 18; #正确
select snamefrom stuinfo where age > 18; #正确
select sname,agefrom stuinfo having age > 18; #错误
select* from stuinfo where age>18 group by sex; #正确
select* from stuinfo having age>18 group by sex; #错误
select sname,agefrom stuinfo where city='杭州' group by sex having age>18; #正确
(14).order by排序[asc|desc]
order by 添加在group by 的后面,只是负责排序
1.asc,升序排列,默认值
2.desc,降序排列
select * `count` from stuinfo where age>18 order by sid desc;
(15).limit限制
limit 在分页的时候是经常使用的;limit 在order by 的后面,是最后一个子句。
1. limit 10 #默认从第一条开始,向后取10条
2. limit 10,10 #从第10条开始向后取10条
select * from stuinfo limit 3;
select * from stuinfo limit 0,3;
select * from stuinfo limit 5,5;
select * from stuinfo where age>18 order by sid desc limit 3;
(16).查询数据中的选项
distinct:去重。
select distinct city from stuinfo;
(17).on duplicate key update
on duplicate key update 有重复则更新,配合insert使用的一组工具型sql子句。
假如数据库当中有了已经有了一个id为1的实体,我还箱在插入id为1的实体,一定不能成功。
如果表中没有id为11的实体则插入,如果有,则执行指定的更新:
insert into stuinfo values(11,'四毛',2,20,'杭州') on duplicate key update sname='四毛',sex=1;
数据库联合查询
关键字:union
1.all:可写可不写;2.distinct:去重。
--查找大连的男生和杭州的女生
select * from stuinfo where city='大连' and sex=2 union select * from stuinfo where city='杭州' and sex=1;select * from stuinfo where (city='大连' and sex=2) or (city='杭州' and sex=1);
使用union的要求:
1.两边的字段数要相同;
2.字段名和数据类型可以不一致,按照左边的表字段返回。
select sid,sname,age from stuinfo union select * from stumarks; --会报错,两边字段数不相等
select sid,sname,age from stuinfo union select * from stumarks;
男生的年龄降序,女生的年龄升序。
使用union分段排序一定不会成功,必须添加limit,limit的值要足够大(100w就可以了)。为什么给100就可以了:每张极限效率在80W左右。
(select * from stuinfo where sex=2 order by age desc limit 999999999) union (select * from stuinfo where sex=1 order by age limit 999999999);
多表查询
分类
1.内连接 inner join
2.外连接 outer join
左外连接 left join
右外连接 right join
3.交叉连接 cross join
4.自然连接 natural join
(1).内连接(inner join)
连接的关键字应当写在表和表之间;
给表起别名 stuinfo as a == stuinfo a,as默认可以省略;
给两张变建立关联,on a.sid = b.stuno;
select * from stuinfo a inner join stumarks b on a.sid = b.stuno;
inner join 可以直接写成 join
select * from stuinfo a join stumarks b on a.sid = b.stuno;
内连接的特点:内连接在关联表两边的数据完全对等的情况下才返回,任何一个表的数据不完整,则不显示。
(3).外连接(outer join)
a.左外连接
特点:以左边表的数据为基准,只要左边表有该条数据,右表数据为空自动填补Null
select * from stuinfo a left outer join stumarks b on a.sid = b.stuno;
b.右外连接
特点:以右边表的数据为基准,只要右边表有该条数据,左表数据为空自动填补Null
select * from stuinfo a right outer join stumarks b on a.sid = b.stuno;
(4).交叉连接(cross join)
--交叉连接的返回结果和内连接一致
select * from stuinfo a cross join stumarks b on a.sid=b.stuno;
--笛卡尔积写法
select * from `stuinfo`,`stumarks`;
(5).自然连接(natural join)
自动查找关联字段。
1.自动判断条件,依据同名字段;
2.如果没有同名字段,返回的是笛卡尔积;
3.自动返回并整理结果:a.连接的字段返回一个;b.连接的字段放前面。1). natural join 自然内连接
2). natural left join 自然左外连接
3). natural right join 自然右外连接
select * from stuinfo a natural join stumarks b;
(6).using()
using()是一个MySQL内置函数。作用:自动连接关联字段。
select * from stuinfo left join stumarks using(`sid`);
练习
--1.显示地区和每个地区参加语文考试的人数,按照地区人数降序排列/*count(ch) as `count`:这里的count为什么起别名,函数只可以写在结果集当中,排序需要使用count的结果,别名可以避免这个规则.
count不统计Null*/
select city,count(ch) as `count` from stuinfo left join stumarks using(`sid`) group by `city` order by `count` desc;--2.显示男生和女生人数
select sum(sex=1) 女,sum(sex=2) 男 fromstuinfo;select sex,count(sex) from stuinfo group bysex;select sex,count(sex) from stuinfo where sex=1 union select sex,count(sex) from stuinfo where sex=2;--3.显示每个地区的男生人数和女生人数,总人数
select sum(sex=1) 女,sum(sex=2) 男,count(sex) 总人数 from stuinfo group by city;
子查询
查询语句中包涵一个查询,外面的查询是父查询,里面的就是子查询,子查询是为父查询提供查询条件。
查询数学成绩大于80分的学生信息(不包含成绩);
子查询返回的值应该是单一的一个字段;
在子查询能用in的,绝对不用=。
select * from stuinfo where sid in (select sid from stumarks where ma > 80);
select a.* from stuinfo a left join stumarks using(sid) where ma>80;
查找数学成绩最高分的学生信息
select max(b.ma),a.* from stuinfo a left joinstumarks b using(sid);
写子查询,先理清楚关系:返回数学最高分的学生sid,查找学生信息
select * from stuinfo where sid in (select sid from stumarks where ma in (select max(ma) from stumarks));
(1)in | not in
在查询中,返回的结果是一个集合,等于号会发生错误,这时是用in 和 not in来解决集合问题
--查询数学成绩不及格的学生
select * from stuinfo where sid not in (select sid from stumarks where ma>=60);
select * from stuinfo where sid in (select sid from stumarks where ma<60);
--查询没有参加数学考试的学生
select * from stuinfo where sid in (select sid from stumarks where ma is null);
--查询没有参加考试的学生
select * from stuinfo where sid in (select sid from stumarks where ma is null or ch is null);
(2)some,all,any
some和any是一样的,表示的是一些,类似于in。
!=some 和 !=any != not in; !=all = in
--查询数学成绩不及格的学生
select * from stuinfo where sid =some (select sid from stumarks where ma<60);
select * from stuinfo where sid =any (select sid from stumarks where ma<60);select * from stuinfo where sid =all (select sid from stumarks where ma<60); --查不出
--查询数学成绩90分以上的学生
select * from stuinfo where sid !=some (select sid from stumarks where ma<90); --查不出
select * from stuinfo where sid !=any (select sid from stumarks where ma<90); --查不出
select * from stuinfo where sid !=all (select sid from stumarks where ma<90);
select * from stuinfo where sid not in (select sid from stumarks where ma<90);
主要记住in和 not in即可。
(3)exists | not exists
返回bool值
--如果有人数学成绩达到100分,则显示所有人的信息
select * from stuinfo where exists(select sid from stumarks where ma=100);
--上面的条件取反(找到有不成立的条件)
select * from stuinfo where not exists(select sid from stumarks where ma < 0);
mysql 30入门_mysql入门(三)相关推荐
- mysql sql优化入门_Mysql入门SQL 语句优化方法30例
作者:VEPHP 时间 2017-09-27 <Mysql入门SQL 语句优化方法30例>要点: 本文介绍了Mysql入门SQL 语句优化方法30例,希望对您有用.如果有疑问,可以联系 ...
- mysql中的%_mysql入门
MySQL 数据库 1 数据库概念(了解) 1.1 什么是数据库 数据库就是用来存储和管理数据的仓库! 数据库存储数据的优先: 可存储大量数据: 方便检索: 保持数据的一致性.完整性: 安全,可共享: ...
- c语言连接mysql(入门)_MySQL入门之C语言操作MySQL
基本概念 C APIs包含在mysqlclient库文件当中,与MySQL的源代码一块发行,用于连接到数据库和执行数据库查询.#include #include #include #include # ...
- sae mysql 同步本地_MYSQL入门之三_将本地MySQL数据导入SAE数据库_MySQL
bitsCN.com MYSQL入门之三_将本地MySQL数据导入SAE数据库 1. MySQL字符集 MySQL的默认字符集是latin1,将本地MySQL库导出成sql,再导入到SAE的MySQL ...
- mysql install语句_MySQL入门学习(一)安装与基本操作
安装篇 PHP+MySQL+Linux目前已逐渐成为小型web服务器的一种经典组合.在Windows环境下构筑和调试MySQL数据库是许多网站开发者的一种首选.本人在Windows98环境下初学MyS ...
- mysql unit类型_mysql入门-数据类型(二)
mysql入门-数据类型(二) 今天说一下mysql的数据类型日期,mysql的日期类型有date.datetime.time.year.timestamp. date其实就是日期,例如2019年07 ...
- mysql简单概述_MySQL入门很简单: 1 数据库概述
1. 数据库概述 1.1 数据存储方式: 1)人工管理阶段 2)文件系统阶段: 文件系统通过文件的存储路径和文件名称访问文件中的数据 3)数据库系统阶段:Oracle, SQL Server, MyS ...
- spss和mysql哪个好学_MYSQL 入门全套
2 数据库管理是干什么用的? a. 将数据保存到文件或内存 b. 接收特定的命令,然后对文件进行相应的操作 a. 将数据保存到文件或内存 b. 接收特定的命令,然后对文件进行相应的操作 PS:如果有了 ...
- mysql 6.3 入门_Mysql 入门小练习
7.1 查询所有雇员月薪和: SELECT SUM(sal) FROM emp; 7.2 查询所有雇员月薪和,以及所有雇员佣金和: SELECT SUM(sal) AS '月薪和',SUM(com ...
- mysql存储过程入门_MySQL入门之存储过程
1 什么是存储过程 存储过程,带有逻辑的sql语句 之前的sql没有条件判断,没有循环 存储过程带上流程控制语句(if while) 2 存储过程特点 1)执行效率非常快!存储过程是在数据库的服务器端 ...
最新文章
- Flask自定义转换器,实现路由匹配正则表达式参数
- Laravel 的数据库迁移
- BCVP第2期:项目已完成升级.NET5.0
- 两行代码实现微信小程序联系人sidebar
- 如何更改static控件的字体大小
- paip.声音按键音延迟的解决
- pywin32、win32api、win32gui、win32com、win32con 都是啥?
- 二阶系统的性能分析(开环相幅和阶跃响应)——自动控制原理基础补充(三)
- 什么是发动机号,发动机号码是什么?
- 微操作、微命令、微指令、微程序、微周期、微地址
- grib2文件格式说明 文件结构
- 绘图计算机配置清单,主攻专业设计制图 5000元以下i5-7500独显电脑配置清单推荐...
- 外贸企业邮箱开通入口,企业邮箱开通全流程攻略
- 终端插双电信卡都能打电话么?
- 回头看singleton(单件)
- JavaScript03
- 工作文档撰写——产品体验报告
- 亲亲小嘴后,不应该就是摸摸小胸么
- laravel-excel表格导出乱码或有问题(仅供参考)
- QT 串口通信,操作程控电源 Agilent 66312A
热门文章
- 谢旭升《操作系统教程》课后习题解答
- android方法中添加 N,AndroidN(7.0)Settings模块界面加载流程学习
- PHP修改防火墙ip,利用防火墙进行同网段下的ip地址欺骗
- mysql 分表例子_mysql分表查询的简单例子
- php curl 12306,pany
- python公式_魔方字母公式转ABC公式python小工具
- 高斯混合模型聚类_高斯混合模型的解释及Python实现
- echarts使用_做数据可视化,为什么我们不再直接使用D3.js、Echarts
- Jepsen mysql_Hello Clojure - Jepsen
- 以下哪些可以成为html文件的扩展名_今天在我的visual studio code里装了以下插件,现在用着很爽...