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查询的更多相关文章

  1. mysql查询性能优化

    mysql查询过程: 客户端发送查询请求. 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行. 服务器进行sql解析,预处理,再由优化器生成执行计划. Mysql调用存储引擎API执行优化 ...

  2. Mysql查询——深入学习

    1.开篇 之前上一篇的随笔基本上是单表的查询,也是mysql查询的一个基本.接下来我们要看看两个表以上的查询如何得到我们想要的结果. 在学习的过程中我们一起进步,成长.有什么写的不对的还望可以指出. ...

  3. Mysql 查询练习

    Mysql 查询练习 ---创建班级表 create table class( cid int auto_increment primary key, caption ) )engine=innodb ...

  4. mysql 查询去重 distinct

    mysql 查询去重 distinct   待完善内容..

  5. MySQl查询区分大小写的解决办法

    通过查询资料发现需要设置collate(校对) . collate规则: *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 *_cs: ca ...

  6. 【转】mysql查询结果输出到文件

    转自:http://www.cnblogs.com/emanlee/p/4233602.html mysql查询结果导出/输出/写入到文件 方法一: 直接执行命令: mysql> select ...

  7. MySQL查询缓存

    MySQL查询缓存 用于保存MySQL查询语句返回的完整结果,被命中时,MySQL会立即返回结果,省去解析.优化和执行等阶段. 如何检查缓存? MySQL保存结果于缓存中: 把SELECT语句本身做h ...

  8. mysql 查询数据时按照A-Z顺序排序返回结果集

    mysql 查询数据时按照A-Z顺序排序返回结果集 $sql = "SELECT * , ELT( INTERVAL( CONV( HEX( left( name, 1 ) ) , 16, ...

  9. MySQL查询今天/本周/上周/本月/上个月份的数据

    MySQL查询的方式很多,下面为您介绍的MySQL查询实现的是查询本周.上周.本月.上个月份的数据,如果您对MySQL查询方面感兴趣的话,不妨一看. 查询当前今天的数据 SELECT name,sub ...

  10. [转]向facebook学习,通过协程实现mysql查询的异步化

    FROM : 通过协程实现mysql查询的异步化 前言 最近学习了赵海平的演讲,了解到facebook的mysql查询可以进行异步化,从而提高性能.由于facebook实现的比较早,他们不得不对php ...

随机推荐

  1. bzoj 3823: 定情信物 线性筛逆元

    3823: 定情信物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 108  Solved: 2[Submit][Status] Descriptio ...

  2. ANDROID_MARS学习笔记_S03_004_getAllProviders、LOCATIONLISTENER、getBestProvider

    一.代码 1.xml(1)activity_main.xml <uses-permission android:name="android.permission.ACCESS_FINE ...

  3. eclipse导入已有源码

    http://blog.csdn.net/scruffybear/article/details/1917301 如有转载,请注明出处,并保持文章的完整性,谢谢! 最近工作之余在研究国外经典书籍< ...

  4. JMS的作用

    JMS就是生产者与消费者模式.消费者负责消费生产者产生的消息.通过JMS可以做后台的异步操作,应用到具体工作中的话,有用它来发内部消息的.发邮件的.发短信的,做大操作时在后台做异步操作的. Java ...

  5. 【HDOJ】2955 Robberies

    01背包.将最大金额作为容量v.概率做乘法. #include <stdio.h> #include <string.h> #define mymax(a, b) (a> ...

  6. VM Depot 助您使用本地开源软件架设开发 Web 站点

     发布于 2014-04-25 作者 云 浪生 使用 VM Depot 中的镜像在 Azure 上创建.开发.部署网站与应用不仅方便快捷而且省时省力!感谢开源社区的大力支持,我们的VM Depot ...

  7. DELL笔记本拆机添加内存条

    在笔记本后面拧开7个螺丝 然后打开后盖 掰开卡口,内存条会弹出,此时按住内存条两侧的缺口往外用力就可以拔出内存条. 装入内存条时,先插入内存条,按下即可.

  8. NIO的学习

    参考 http://wenku.baidu.com/link?url=rq-BEp3Et4JRrE62f2Lv9hq8nT_Gq0XPb65h8OBqTAt-ILfqKmdjIhVEp8bctIdm0 ...

  9. Closure Compiler(封闭编辑器), Closure Inspector, Closure Templates, 封闭图书馆(Closure Library) Google- 摘自网络

    谷歌日前宣布,将自己开发者使用的一系列工具对外开放.这些工具曾用来开发谷歌的主要产品,包括Gmail.谷歌文档(Google Docs)和谷歌地图(Google Maps). 第一个工具叫做Closu ...

  10. 【ImageMagick】Unix Windows 源码安装

    [ Unix 源码安装 | Windows 源码安装 ] 首先检查一下电脑里已经安装的ImageMagick版本,输入:   convert -version 除非你想要把对另外的图像格式的支持或升级 ...