MySQL查询
DQL 操作
DQL 数据查询语言(重要)
数据库执行DQL语句不会对数据做出任何改变,而是让数据库发送结果集给客户端。
查询返回的结果是一张虚拟表。
查询关键字:SELECT -- 查询:基于表中已经存在的数据,得到我们想要的数据
1基础查询:
SELECT 列名/字段名,..., FROM 表名 -- 查询指定列
SELECT*FROM 表名 -- *表示表中所有字段
2条件查询:
条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:
♦ =、!=、<>、<、<=、>、>=;
♦ BETWEEN...AND;
♦ IN(set); -- 查询一定范围内的记录 如: SELECT*FROM stu WHERE id IN('1001','1002','1003');
♦ IS NULL / IS NOT NULL;
--查询年龄为NULL(空)的记录,NULL不是一个值,不能用=符号; 正确示例如:
SELECT*FROM stu WHERE age IS NULL;
♦ AND;
♦ OR;
♦ NOT; -- 查询排除一定范围内的其他记录 如: SELECT*FROM stu WHERE id NOT IN('1001','1002','1003');
查询性别为女,并且年龄25岁以下的记录:
SELECT*FROM stu
WHERE gender = 'fenmale' AND age<=25;
3模糊查询:
当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。
通配符:
_ 任意一个字母 '张_' -- 姓张,名字为两个字的所有人
% 任意0~n个字母 '张%' -- 姓张的所有人
SELECT*FROM stu
WHERE NAME LIKE '____i'; -- 名字由5个字母构成,并且第五个字母必须为i的人
4字段控制查询:
4.1去除重复记录
去除重复记录(两行或两行以上的记录中的数据都相同),例如,在员工表emp中,sal字段就存在相同的记录。当只查询emp表的sal字段时,那么会出现重复记录,想去除重复记录,需要使用DISTINCT。
SELECT DISTINCT sal FROM emp;
SELECT DISTINCT 字段1,字段2 FROM emp; -- 滤除所指定的两个字段都重复的多余字段
4.2查看雇员的月薪与奖金之和
因为sal和comm两列的类型都是数值类型,所以可以做加运算。如果sal或comm中有一个字段不是数值类型的,那么会出错。任何类型的数据和NULL相加都是NULL。
SELECT sal+comm FROM emp;
-- 如果comm为NULL,利用IFNULL()函数将comm赋0后再相加
SELECT sal+IFNULL(comm,0) FROM emp;
-- 将求和后显示出的字段重命名为“总工资”,并与对应的姓名一起显示。AS可以省略。
SELECT name,sal+IFNULL(comm,0) AS 总工资 FROM emp;
-- 同时给name一栏也个起别名
SELECT name AS 姓名,sal+IFNULL(comm,0) AS 总工资 FROM emp;
4.3查询时添加常量列
在查询stu表时添加一个班级列,内容为“java班”。
SELECT id,NAME,age,gender,'java班' AS '班级' FROM emp; -- 此处AS不可省略
5排序查询:
默认情况下按插入的先后顺序排序
5.1 查询所有学生记录,按年龄升序排列
SELECT*
FROM stu
ORDER BY age ASC;
或者
SELECT*
FROM stu
ORDER BY age; -- 默认升序排序
5.2 查询所有学生记录,按年龄降序排列
SELECT*
FROM stu
ORDER BY age DESC , id ASC; -- 主要条件和次要条件
6聚合查询(使用聚合函数的查询)
常用的聚合函数:sum()、avg()、max()、min()、count()
-- 需求:查询学生的servlet的总成绩
SELECT SUM(servlet) AS 'servlet的总成绩' FROM student;
-- 需求: 查询学生的servlet的平均分
SELECT AVG(servlet) AS 'servlet的平均分' FROM student;
-- 需求: 查询当前servlet最高分
SELECT MAX(servlet) AS '最高分' FROM student;
-- 需求: 查询最低分
SELECT MIN(servlet) AS '最低分' FROM student;
-- 需求: 统计当前有多少学生(count(字段))
SELECT COUNT(*) FROM student; -- 统计每个字段的有效数目(不含NULL),取最大值。
SELECT COUNT(id) FROM student;
-- 注意:count()函数统计的数量不包含null的数据
-- 使用count统计表的记录数,要使用不包含null值的字段
7分页查询(limit 起始行,查询几行)
- 起始行从0开始
- 分页:当前是第几页 每页显示多少条
- 分页查询当前页的数据的sql: SELECT * FROM student LIMIT (当前页-1)*每页显示多少条,每页显示多少条;
-- 查询第1,2条记录(第1页的数据)
SELECT * FROM student LIMIT 0,2;
-- 查询第3,4条记录(第2页的数据)
SELECT * FROM student LIMIT 2,2;
-- 查询第5,6条记录(第3页的数据)
SELECT * FROM student LIMIT 4,2;
-- 查询第7,8条记录 (没有记录不显示)
SELECT * FROM student LIMIT 6,2;
8分组查询(group by)
-- 需求: 查询男女的人数
-- 1) 把学生按照性别分组(GROUP BY gender)
-- 2) 统计每组的人数(COUNT(*))
SELECT gender,COUNT(*) FROM student GROUP BY gender;
9分组查询后筛选
-- 需求: 查询总人数大于2的性别
-- 1) 查询男女的人数
-- 2)筛选出人数大于2的记录(having)
--- 注意: 分组之前条件使用where关键字,分组之后条件使用having关键字
数据表:
命令:SELECT gender,COUNT(*) FROM student GROUP BY gender;
结果:
命令:
-- 在math大于70分的人中按性别分组查询
SELECT gender,COUNT(*) FROM student WHERE math>70 GROUP BY gender;
结果:
命令:
-- 查询出该组中所有人math分数大于70,且人数大于2人的gender组
SELECT gender,COUNT(*) FROM student WHERE math>70 GROUP BY gender HAVING COUNT(*)>2;
结果:
MySQL查询的更多相关文章
- mysql查询性能优化
mysql查询过程: 客户端发送查询请求. 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行. 服务器进行sql解析,预处理,再由优化器生成执行计划. Mysql调用存储引擎API执行优化 ...
- Mysql查询——深入学习
1.开篇 之前上一篇的随笔基本上是单表的查询,也是mysql查询的一个基本.接下来我们要看看两个表以上的查询如何得到我们想要的结果. 在学习的过程中我们一起进步,成长.有什么写的不对的还望可以指出. ...
- Mysql 查询练习
Mysql 查询练习 ---创建班级表 create table class( cid int auto_increment primary key, caption ) )engine=innodb ...
- mysql 查询去重 distinct
mysql 查询去重 distinct 待完善内容..
- MySQl查询区分大小写的解决办法
通过查询资料发现需要设置collate(校对) . collate规则: *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 *_cs: ca ...
- 【转】mysql查询结果输出到文件
转自:http://www.cnblogs.com/emanlee/p/4233602.html mysql查询结果导出/输出/写入到文件 方法一: 直接执行命令: mysql> select ...
- MySQL查询缓存
MySQL查询缓存 用于保存MySQL查询语句返回的完整结果,被命中时,MySQL会立即返回结果,省去解析.优化和执行等阶段. 如何检查缓存? MySQL保存结果于缓存中: 把SELECT语句本身做h ...
- mysql 查询数据时按照A-Z顺序排序返回结果集
mysql 查询数据时按照A-Z顺序排序返回结果集 $sql = "SELECT * , ELT( INTERVAL( CONV( HEX( left( name, 1 ) ) , 16, ...
- MySQL查询今天/本周/上周/本月/上个月份的数据
MySQL查询的方式很多,下面为您介绍的MySQL查询实现的是查询本周.上周.本月.上个月份的数据,如果您对MySQL查询方面感兴趣的话,不妨一看. 查询当前今天的数据 SELECT name,sub ...
- [转]向facebook学习,通过协程实现mysql查询的异步化
FROM : 通过协程实现mysql查询的异步化 前言 最近学习了赵海平的演讲,了解到facebook的mysql查询可以进行异步化,从而提高性能.由于facebook实现的比较早,他们不得不对php ...
随机推荐
- HTML5解决跨域问题
HTML5解决跨域问题 由于浏览器的同源策略,网络连接的跨域访问是不被允许的,XHR对象不能直接与非同源的网站处理数据交互.而同源指的是什么呢?同源的范畴包括:规则(协议),主机号(域名.ip等),端 ...
- 【BZOJ 2154】Crash的数字表格 (莫比乌斯+分块)
2154: Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能 ...
- 最简单的CRC32源码-查表法
这个算法是在逐BYTE法的基础上进行修改的,在上一篇文章里我们说过,如果不查表的话,逐BYTE法和逐BIT法没什么区别,现在我们就把这个算法写出来,注意在调用CRC校验函数前需要先调用表生成函数: u ...
- Android推送通知Notification
参考: 1.http://www.cnblogs.com/anrainie/archive/2012/03/07/2383941.html 总结: 代码:
- 【原创】如何构建MIPS交叉编译工具链
运行环境:Ubuntu12.04PC提前安装库:flex,bison,libncureses5-dev,texinfo,这些库提前apt-get install.需要重新安装:gawk(先apt-ge ...
- 【HDOJ】3560 Graph’s Cycle Component
并查集的路径压缩. #include <stdio.h> #include <string.h> #define MAXNUM 100005 int deg[MAXNUM], ...
- 利用dhtmlxGrid做的表格排序的功能。
dhtmlxGrid支持tree和grid. grid之间.grid内部进行拖拽, 如在grid内部进行拖拽,可以增加一行:在grid之间拖拽,第一个grid的记录删除,第二个grid增加一行记录.
- 【Android 复习】:第02期:引导界面(二)使用ViewPager实现欢迎引导页面
一.实现的效果图 也许是养成了这样一个习惯,每次看别人的代码前,必须要先看实现的效果图达到了一个什么样的效果,是不是跟自己想要实现的效果类似,有图才有真相嘛,呵呵. 二.编码前的准 ...
- 关于Session
转自:http://blog.csdn.net/wang379275614/article/details/9627755 Session理解: Session:在计算机中,尤其是在网络应用中,称 ...
- [PeterDLax著泛函分析习题参考解答]第6章 Hilbert 空间
1. 证明满足 (6) 的范数可以由一个内积诱导出来. 这个结论属于 von Neumann. 证明: 以实线性空间为例, 取内积 $$\bex \sex{x,y}=\cfrac{1}{4}[\sen ...