09 MySQL 从入门到精通——数据查询
示例表:
tb_manager表
DROP TABLE IF EXISTS `tb_manager`;
CREATE TABLE `tb_manager` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`name` varchar(30) DEFAULT NULL,`PWD` varchar(30) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
INSERT INTO `tb_manager` VALUES ('1', 'mr', 'mrsoft');
INSERT INTO `tb_manager` VALUES ('2', 'mingrisoft', 'mingrisoft');
INSERT INTO `tb_manager` VALUES ('3', 'admin', '111');
tb_bookcase 表
DROP TABLE IF EXISTS `tb_bookcase`;
CREATE TABLE `tb_bookcase` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`name` varchar(30) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
INSERT INTO `tb_bookcase` VALUES ('4', '左A-1');
INSERT INTO `tb_bookcase` VALUES ('5', '左A-2');
INSERT INTO `tb_bookcase` VALUES ('6', '右A-1');
tb_bookinfo 表
DROP TABLE IF EXISTS `tb_bookinfo`;
CREATE TABLE `tb_bookinfo` (`id` int(11) NOT NULL AUTO_INCREMENT,`barcode` varchar(30) DEFAULT NULL,`bookname` varchar(70) DEFAULT NULL,`typeid` int(10) unsigned DEFAULT NULL,`author` varchar(30) DEFAULT NULL,`translator` varchar(30) DEFAULT NULL,`ISBN` varchar(20) DEFAULT NULL,`price` float(8,2) DEFAULT NULL,`page` int(10) unsigned DEFAULT NULL,`bookcase` int(10) unsigned DEFAULT NULL,`inTime` date DEFAULT NULL,`operator` varchar(30) DEFAULT NULL,`del` tinyint(1) DEFAULT '0',PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
INSERT INTO `tb_bookinfo` VALUES ('7', '9787302210337', 'Java Web开发实战宝典', '4', '王国辉', '', '302', '89.00', '834', '4', '2021-02-24', 'mr', '0');
INSERT INTO `tb_bookinfo` VALUES ('8', '9787115195975', 'Java Web开发典型模块大全', '4', '王国辉、王毅、王殊宇', '', '115', '89.00', '752', '5', '2021-02-24', 'mr', '0');
INSERT INTO `tb_bookinfo` VALUES ('9', '9787115195966', 'Java Web程序设计慕课版', '5', '明日科技', '', '115', '49.80', '350', '4', '2021-02-24', 'mr', '1');
INSERT INTO `tb_bookinfo` VALUES ('10', '9787115195988', 'Android程序设计慕课版', '4', '明日科技', '', '111', '49.80', '360', '4', '2021-02-24', 'mr', '1');
tb_borrow 表
DROP TABLE IF EXISTS `tb_borrow`;
CREATE TABLE `tb_borrow` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`readerid` int(10) unsigned DEFAULT NULL,`bookid` int(10) DEFAULT NULL,`borrowTime` date DEFAULT NULL,`backTime` date DEFAULT NULL,`operator` varchar(30) DEFAULT NULL,`ifback` tinyint(1) DEFAULT '0',PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;INSERT INTO `tb_borrow` VALUES ('7', '4', '7', '2021-02-24', '2021-03-16', 'mr', '1');
INSERT INTO `tb_borrow` VALUES ('8', '4', '7', '2021-02-24', '2021-03-16', 'mr', '0');
INSERT INTO `tb_borrow` VALUES ('9', '5', '8', '2021-02-24', '2021-04-05', 'mr', '0');
基本查询语句Usage:SELECT selection_list FROM 数据表名 WHERE primary_constraint GROUP BY grouping_columns ORDER BY sorting_cloumns HAVING secondary_constraint LIMIT count GROUP BY grouping_columns #分组ORDER BY sorting_cloumns #排序HAVING secondary_constraint 特殊限制LIMIT count #限制查询数量单表查询 比较运算符:=> < => <= != <>IS NULL IS NOT NULLBETWEEN IN NOT INLIKE NOT LIKE REGEXP 主要内容:查询所有字段查询指定字段查询指定数据带IN关键字的查询带BETWEEN AND的范围查询带LIKE的字符匹配查询用IS NULL关键字查询空值带AND的多条件查询带OR的多条件查询用DISTINCT关键字去除结果中的重复行用ORDER BY关键字对查询结果排序用GROUP BY关键字分组查询用LIMIT限制查询结果的数量 查询所有字段Usage:SELECT * FROM 表名;exampel:select * from tb_manager查询指定字段Usage:SELECT 字段名 FROM 表名;exampel:select name,PWD from tb_manager 查询指定数据Usage:SELECT 字段名 FROM 表名 where primary_constraint;exampel:select name,PWD from tb_manager where id=2;select name,PWD from tb_manager where name='mr';select id,name,PWD from tb_manager where id>=2; 带IN关键字的查询Usage:SELECT * FROM 表名 WHERE 条件 [NOT] IN(元素1,元素2,…,元素n);exampel:select name,PWD from tb_manager where name in('admin','mr');select name,PWD from tb_manager where name not in('admin','mr'); 带BETWEEN AND的范围查询Usage:SELECT * FROM 表名 WHERE 条件 [NOT] BETWEEN 取值1 AND 取值2;exampel:select id,bookname,inTime from tb_bookinfo where id between '9' and '10';select id,bookname,inTime from tb_bookinfo where inTime not between '2021-02-23' and '2021-02-24'; 带LIKE的字符匹配查询Usage:% #匹配多字符_ #匹配单字符exampel:select id,bookname,inTime from tb_bookinfo where bookname like 'java%';select * from tb_bookcase where name like '_A%';select * from tb_bookcase where name not like '_A-1'; 用IS NULL关键字查询空值Usage:IS [NOT] NULLexampel:select * from tb_admin where createtime is null;select * from tb_admin where createtime is not null; 带AND的多条件查询(与运算)Usage:SELECT * FROM 数据表名 WHERE 条件表达式1 AND 条件表达式2 […AND 条件表达式n];exampel:select * from tb_admin where createtime is null and password like '%2%' and id >2; 带OR的多条件查询(或运算)Usage:SELECT * FROM 数据表名 WHERE 条件1 OR 条件2 […OR 条件表达式n];exampel:select * from tb_admin where user='yi' or id >4; 用DISTINCT关键字去除结果中的重复行(查询的所有列表都相同才会去重)Usage:SELECT DISTINCT 字段名 FROM 表名;exampel:select distinct price from tb_bookinfo;select distinct price,bookname from tb_bookinfo where price >50;用ORDER BY关键字对查询结果排序Usage:ORDER BY 字段名 [ASC|DESC];exampel:select id,name,PWD from tb_manager where id>=2 order by id; #默认根据id升序排序select id,name,PWD from tb_manager where id>=2 order by id desc; #根据id降序排序select distinct price from tb_bookinfo order by price desc; select distinct id,price,bookcase from tb_bookinfo order by price,bookcase desc ; #先price升序排序然后再bookcase降序排序 用GROUP BY关键字分组查询exampel:select bookcase,count(*) from tb_bookinfo group by bookcase; #根据关键字bookcase进行分组,结果bookcase值为4的有3个,bookcase值为5的有1个,类似于unic -c,其中函数count()为统计数select group_concat(bookcase),count(*) from tb_bookinfo group by bookcase; #group_concat()函数为列出所有字段值,然后用逗号进行分割 用LIMIT限制查询结果的数量exampel:select id,bookcase,bookname from tb_bookinfo limit 2;select id,bookcase,bookname from tb_bookinfo order by id desc limit 2; #注意limit需要放在最后,否则会报错 聚合函数查询特点:根据一组数据求出一个值,聚合函数的结果值只根据选定行不是NULL的值来进行计算,如果这个值本身是NULL就会被忽略 常见的聚合函数:COUNT()函数SUM()函数AVG()函数MAX()函数MIN()函数 COUNT()函数:是聚合函数查询,COUNT()函数用于对除“*”以外的任何参数,返回所选择集合中非NULL值的行的数目。example:select count(*) from tb_bookinfo;select count(bookname) from tb_bookinfo where bookname like 'java%';SUM()函数:SUM()函数可以求出表中某个数值类型字段取值的总和。example:select sum(id) from tb_bookinfo where bookname like 'java%';AVG()函数:AVG()函数可以求出表中某个数值类型字段取值的平均值。example:select avg(price) from tb_bookinfo where bookname like 'java%';MAX()函数:MAX()函数可以求出表中某个数值类型字段取值的最大值。example:select max(price) from tb_bookinfo where bookname like 'java%';MIN()函数:MIN()函数可以求出表中某个数值类型字段取值的最小值。example:select min(price) from tb_bookinfo where bookname like 'java%';连接查询:把不同表的记录连到一起,然后获取到最终的查询结果内连接查询:最普遍的一种连接类型而且是匀称的,因为它要求构成连接的每一部分的每个表都匹配,如果不匹配那么就被删除掉example:select tb_manager.name,tb_bookcase.name from tb_manager,tb_bookcase; 多表查询,查询结果总条数为量表条数相乘select tb_bookinfo.id,tb_bookinfo.bookname,tb_bookinfo.author,tb_bookinfo.price,tb_borrow.borrowTime,tb_borrow.backTime,tb_borrow.operator from tb_bookinfo,tb_borrow where tb_bookinfo.id=tb_borrow.bookid;外连接查询Usage: 关键字 [OUTER] JOINSELECT 字段名称 FROM 表名1 [LEFT]|RIGHT JOIN 表名2 ON 表名1.字段名1=表名2.属性名2;#[LEFT] JOIN(默认为左连接):将左表中的所有数据分别与右表中的每条数据进行连接组合,返回的结果除内连接的数据外还包括左表中不符合条件的数据,并在右表的相应列中添加NULL#RIGHT JOIN(右连接):将右表中的所有数据分别与左表中的每条数据进行连接组合,返回的结果除内连接的数据外还包括右表中不符合条件的数据,并在左表的相应列中添加NULLexample:select bookid,borrowTime,backTime,bookname,price from tb_borrow join tb_bookinfo on tb_borrow.bookid=tb_bookinfo.id; #左连接此时主表为左表tb_borrow,会显示坐标所有的字段值,如果有值为空则显示为NULLselect bookid,borrowTime,backTime,bookname,price from tb_borrow right join tb_bookinfo on tb_borrow.bookid=tb_bookinfo.id; #右连接此时主表为右表tb_bookinfo,会显示右表所有的字段值,如果有值为空则显示NULL复合条件连接查询:在连接时可以增加其它的限制条件,通过多个条件的复合查询可以使查询结果更加准确,使用and关键字exanple:select bookid,borrowTime,backTime,bookname,price from tb_borrow [left] join tb_bookinfo on tb_borrow.bookid=tb_bookinfo.id and backTime like '%5';#注意这里是否加上left显示的是不同的,如果不加left会只显示符合条件的结果,如果加上left也会把不符合条件的值输出成NULL全部显示出来子查询:子查询就是指在一个查询语句中,还包括另一个查询语句。在外一层的查询中使用里面一层查询产生的结果集。主要内容:(适用方法在于子查询返回多少值,如果返回一个值可以用比较,如果多个可以用IN等。。)带IN关键字的子查询example:select id,bookname from tb_bookinfo where id in(select bookid from tb_borrow );带比较运算符的子查询example:select id,bookname from tb_bookinfo where id = (select bookid from tb_borrow limit 1 );select id,bookname from tb_bookinfo where id <= (select sum(bookid) from tb_borrow where bookid >7);带EXISTS关键字的子查询:EXISTS关键字用于检查子查询是否至少返回一行数据,如果有数据返回则为真,外层查询执行;该子查询如果“没有数据结果”(没有任何数据返回),则该EXISTS()结果为:false,外层查询不执行.EXISTS后面的子查询不返回任何实际数据,只返回真或假,当返回真时where条件成立。注意:EXISTS关键字,比IN关键字的运算效率高,因此,在实际开发中,特别是大数据量时,推荐使用EXISTS关键字,并且NULL也算结果,所以为真example:select id,bookname from tb_bookinfo where exists (select sum(bookid) from tb_borrow where bookid > '10000');select id,bookname from tb_bookinfo where exists (select 1=NULL);select id,bookname from tb_bookinfo where exists(select bookid from tb_borrow where bookid >10);带ANY关键字的子查询:表示满足其中任意一个条件。example:select * from tb_borrow where id = any(select id from tb_bookinfo where id >6 );select * from tb_borrow where id > any(select id from tb_bookinfo where id >6 );带ALL关键字的子查询:表示表示满足所有条件example:select * from tb_borrow where id > all(select id from tb_bookinfo where id <9 );合并查询结果: 合并查询结果是将多个SELECT语句的查询结果合并到一起关键字:UNION | UNION ALLexample:select name from tb_manager union select operator from tb_borrow; 去重select name from tb_manager union all select operator from tb_borrow; 显示所有定义表和字段的别名:为表取别名关键字:as,as可以省略example:未使用别名:select tb_borrow.bookid,tb_borrow.backTime,tb_borrow.borrowTime,tb_bookinfo.bookname,tb_bookinfo.price,tb_bookinfo.author from tb_bookinfo,tb_borrow where tb_bookinfo.id=tb_borrow.bookid;使用别名:select br.bookid,br.backTime,br.borrowTime,info.bookname,info.price,info.author from tb_bookinfo as info ,tb_borrow as br where info.id=br.bookid;为字段取别名select bookname as name from tb_bookinfo;使用正则表达式查询关键字:REGEXP匹配指定字符中的任意一个:[ ]example:select * from tb_manager where name regexp '[ai]';使用“*”和“+”来匹配多个字符“*”:匹配0到多个“+”:匹配1到多个example:select * from tb_manager where name regexp 'm*r';select * from tb_manager where name regexp 'm+r';匹配开头和结尾"^":匹配开头"$":匹配结尾example:select * from tb_manager where name regexp '^mi';select * from tb_manager where name regexp 'n$';
09 MySQL 从入门到精通——数据查询相关推荐
- MySQL从入门到精通:多表查询的灵活运用_02
我是 ABin-阿斌:写一生代码,创一世佳话,筑一揽芳华. 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦. 上一篇:MySQL从入门到精通:基本语法介绍与使用_01 下一篇:MySQL从 ...
- MySQL精讲(一) |DQL数据查询语句全解析
MySQL精讲系列文章(更新完毕) <MySQL入门必看知识> <MySQL精讲(一) | DQL数据查询语句全解析> <MySQL精讲(二) | DML数据操作语句全解 ...
- MySQL学习记录 (二) ----- SQL数据查询语句(DQL)
相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...
- MySQL数据库C接口的数据查询操作示例
MySQL数据库C接口的数据查询操作示例 命令行操作 (1)建库建表(已有则不用) 连接MySQL服务器,并登录之.选择某个数据库.假设用户在这个数据库下已有一个表了. (2)查询所有数据的方法 SE ...
- MySQL基础入门到精通学习教程汇总【基础+高级完整版】
MySQL是最流行的关系型数据库管理系统之一,这也是我们为什么要学习MySQL数据的库的原因之一,就连非互联网行业的人士也在开始学习MySQL去分析数据. 对于程序员来说,MySQL数据库更是需要熟练 ...
- MySQL从入门到精通
一.配置 MySQL服务启动 手动 cmd --> services.msc 打开服务的窗口 使用管理员打开cmd net start mysql:启动mysql的服务 net stop mys ...
- MySQL数据库入门(三)--- 查询、权限、join语法、外键、备份
MySQL数据库入门(三) 文章目录 MySQL数据库入门(三) @[toc] MySQL回顾 查询: 查看字段 权限管理 查询权限 授权查询 多表查询 join语法 外键 备份: 指定时间段备份: ...
- MySQL中SQL语句——DQL(数据查询语句)
前言: 首先对于数据库有一定的了解,会对于Mysql的学习有一定的帮助: 数据库主要分为 DB(数据库),DBMS(数据库管理系统),SQL(结构化查询语言,用于和DBMS通信的语言):这篇要讲的DQ ...
- mysql做十亿条数据查询_数据库优化:mysql数据库单机数十亿数据查询设计
很久没写文章,是不是想着写点什么东西,分享下我的数据库设计思路,主要是针对单机数十亿及以上数据查询优化技巧. 如果只是简单的查询,没有频繁的写入操作,对查询速度不要求在毫秒级别,就不需要什么大型的数据 ...
最新文章
- 实现DUBBO服务环境隔离
- 精通python设计模式-精通Python设计模式
- foxmail邮箱怎么导入邮件_163企业邮箱登录后怎么导入联系人?
- 关于空值null的排序问题 mysql 和oracle
- linux中查看文件指定行的数据
- 【转】C++怎么读写windows剪贴板的内容?比如说自动把一个字符串复制.
- 二叉树---树的深度递归理解
- 关于解决Python中requests模块在PyCharm工具中导入问题
- 《原力计划【第二季】》第 3 周周榜揭晓!!!
- python自学看什么书-如何自学Python ?自学看什么书比较好?
- 一个java项目的开发流程
- 解决苹果手机ios系统app store无法下载讯飞有声的问题
- vant 开始结束日期_在vant中使用时间选择器实现结束时间和开始时间
- HDU 2037 今年暑假不AC
- Spring Boot整合Admin
- C语言希冀平台作业-南京晓庄
- 阿里api文档链接地址
- 流利阅读 2019.2.23 China’s Forbidden City opens to the general public at night for the first time in 94
- 【学术相关】2021年国家自然科学基金高校立项情况最新数据
- 使用opencv从mp4视频中抽帧并保存