单表查询

简单查询

- 创建表
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
`id` int() NOT NULL AUTO_INCREMENT,
`name` varchar() NOT NULL,
`age` tinyint() DEFAULT '',
`sex` enum('男','女','人妖') NOT NULL DEFAULT '人妖',
`salary` decimal(,) NOT NULL DEFAULT '250.00',
`hire_date` date NOT NULL,
`dept_id` int() DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT= DEFAULT CHARSET=utf8; -- 创建数据 -- 教学部
INSERT INTO `person` VALUES ('', 'alex', '', '人妖', '53000.00', '2010-06-21', '');
INSERT INTO `person` VALUES ('', 'wupeiqi', '', '男', '8000.00', '2011-02-21', '');
INSERT INTO `person` VALUES ('', 'egon', '', '男', '6500.00', '2015-06-21', '');
INSERT INTO `person` VALUES ('', 'jingnvshen', '', '女', '6680.00', '2014-06-21', ''); -- 销售部
INSERT INTO `person` VALUES ('', '歪歪', '', '女', '3000.00', '2015-02-21', '');
INSERT INTO `person` VALUES ('', '星星', '', '女', '2000.00', '2018-01-30', '');
INSERT INTO `person` VALUES ('', '格格', '', '女', '2000.00', '2018-02-27', '');
INSERT INTO `person` VALUES ('', '周周', '', '女', '2000.00', '2015-06-21', ''); -- 市场部
INSERT INTO `person` VALUES ('', '月月', '', '女', '4000.00', '2014-07-21', '');
INSERT INTO `person` VALUES ('', '安琪', '', '女', '4000.00', '2015-07-15', ''); -- 人事部
INSERT INTO `person` VALUES ('', '周明月', '', '女', '5000.00', '2014-06-21', '');
-- 鼓励部
INSERT INTO `person` VALUES ('', '苍老师', '', '女', '1000000.00', '2018-02-21', null);

准备表和数据

#查询语法:
select [distinct]*(所有)|字段名,...字段名 from 表名; #查询所有字段信息
select * from person; #查询指定字段信息
select id,name,age,sex,salary from person; #别名查询,使用的as关键字,as可以省略的
select name,age as'年龄',salary '工资' from person; #直接对列进行运算,查询出所有人工资,并每人增加100块.
select (/);
select name, salary+ from person; #剔除重复查询
select distinct age from person;

条件查询

条件查询:使用 WHERE 关键字 对简单查询的结果集 进行过滤

  1. 比较运算符: > < >= <= = <>(!=)

    2. null 关键字: is null , not null

    3.逻辑运算符: 与 and 或 or (多个条件时,需要使用逻辑运算符进行连接)

#查询格式:
select [distinct]*(所有)|字段名,...字段名 from 表名 [where 条件过滤] #比较运算符: > < >= <= = <>(!=) is null 是否为null
select * from person where age = ;
select * from person where age <> ;
select * from person where age is null;
select * from person where age is not null; #逻辑运算符: 与 and 或 or
select * from person where age = and salary =;
select * from person where age = or salary =;

区间查询

关键字 between 10 and  20 :表示 获得10 到 20 区间的内容

# 使用  between...and  进行区间 查询
select * from person where salary between and ;
ps: between...and 前后包含所指定的值
等价于 select * from person where salary >= and salary <= ;

集合查询

关键字: in, not null

#使用 in 集合(多个字段)查询
select * from person where age in(,,);
等价于: select * from person where age = or age = or age =; #使用 in 集合 排除指定值查询
select * from person where age not in(,,);

模糊查询

关键字 like , not like

    %:  任意多个字符

       _  : 只能是单个字符

#模糊查询  like %:任意多个字符,  _:单个字符

#查询姓名以"张"字开头的
select * from person where name like '张%';
#查询姓名以"张"字结尾的
select * from person where name like '%张';
#查询姓名中含有"张"字的
select * from person where name like '%张%'; #查询 name 名称 是四个字符的人
select * from person where name like '____';
#查询 name 名称 的第二个字符是 'l'的人
select * from person where name like '_l%'; #排除名字带 a的学生
select * from student where name not like 'a%'

排序查询

关键字: ORDER BY  字段1 DESC, 字段2 ASC

#排序查询格式:
select 字段|* from 表名 [where 条件过滤] [order by 字段[ASC][DESC]] 升序:ASC 默认为升序
降序:DESC
PS:排序order by 要写在select语句末尾 #按人员工资正序排列,注意:此处可以省略 ASC关键字
select * from person order by salary ASC;
select * from person order by salary; #工资大于5000的人,按工资倒序排列
select * from person where salary > order by salary DESC; #按中文排序
select * from person order by name; #强制中文排序
select * from person order by CONVERT(name USING gbk);
ps:UTF8 默认校对集是 utf8_general_ci , 它不是按照中文来的。你需要强制让MySQL按中文来排序

聚合查询

聚合:  将分散的聚集到一起.

 聚合函数: 对列进行操作,返回的结果是一个单一的值,除了 COUNT 以外,都会忽略空值

COUNT:统计指定列不为NULL的记录行数;

SUM:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;

MAX:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;

MIN:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

AVG:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

#格式:
select 聚合函数(字段) from 表名; #统计人员中最大年龄、最小年龄,平均年龄分别是多少
select max(age),min(age),avg(age) from person;

分组查询

分组的含义: 将一些具有相同特征的数据 进行归类.比如:性别,部门,岗位等等

 怎么区分什么时候需要分组呢?  

  套路: 遇到 "每" 字,一般需要进行分组操作.

  例如: 1. 公司每个部门有多少人.

      2. 公司中有 多少男员工 和 多少女员工.

#分组查询格式:
select 被分组的字段 from 表名 group by 分组字段 [having 条件字段]
ps: 分组查询可以与 聚合函数 组合使用. #查询每个部门的平均薪资
select avg(salary),dept from person GROUP BY dept; #查询每个部门的平均薪资 并且看看这个部门的员工都有谁?
select avg(salary),dept,GROUP_CONCAT(name) from person GROUP BY dept;
#GROUP_CONCAT(expr):按照分组,将expr字符串按逗号分隔,组合起来 #查询平均薪资大于10000的部门, 并且看看这个部门的员工都有谁?
select avg(salary),dept,GROUP_CONCAT(name) from person GROUP BY dept; having avg(salary)>;

where 与 having区别:
#执行优先级从高到低:where > group by > having 
#1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。
#2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数

分页查询

好处:限制查询数据条数,提高查询效率

#查询前5条数据
select * from person limit ; #查询第5条到第10条数据
select * from person limit ,; #查询第10条到第15条数据
select * from person limit ,; ps: limit (起始条数),(查询多少条数);

正则表达式

MySQL中使用 REGEXP 操作符来进行正则表达式匹配。

模式 描述
^ 匹配输入字符串的开始位置。 
$ 匹配输入字符串的结束位置。
. 匹配任何字符(包括回车和新行)
[...] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^...] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
p1|p2|p3 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
# ^  匹配 name 名称 以 "e" 开头的数据
select * from person where name REGEXP '^e'; # $ 匹配 name 名称 以 "n" 结尾的数据
select * from person where name REGEXP 'n$'; # . 匹配 name 名称 第二位后包含"x"的人员 "."表示任意字符
select * from person where name REGEXP '.x'; # [abci] 匹配 name 名称中含有指定集合内容的人员
select * from person where name REGEXP '[abci]'; # [^alex] 匹配 不符合集合中条件的内容 , ^表示取反
select * from person where name REGEXP '[^alex]';
#注意1:^只有在[]内才是取反的意思,在别的地方都是表示开始处匹配
#注意2 : 简单理解 name REGEXP '[^alex]' 等价于 name != 'alex' # 'a|x' 匹配 条件中的任意值
select * from person where name REGEXP 'a|x';   #查询以w开头以i结尾的数据
select * from person where name regexp '^w.*i$';
#注意:^w 表示w开头, .*表示中间可以有任意多个字符, i$表示以 i结尾

正则详情参考 :http://www.cnblogs.com/wangfengming/articles/8067037.html

SQL语句关键字执行顺序

查询:姓名不同人员的最高工资,并且要求大于5000元,同时按最大工资进行排序并取出前5条.

select name, max(salary)

from person  

where name is not null  

group by name  

having max(salary) > 

order by max(salary)

limit ,

SQL 语句的执行顺序如下:

   (1). 首先执行 FROM 子句, 从 person 表 组装数据源的数据

   (2). 执行 WHERE 子句, 筛选 person 表中 name 不为 NULL 的数据

   (3). 执行 GROUP BY 子句, 把 person 表按 "name" 列进行分组

   (4). 计算 max() 聚集函数, 按 "工资" 求出工资中最大的一些数值

   (5). 执行 HAVING 子句, 筛选工资大于 5000的人员.

   (7). 执行 ORDER BY 子句, 把最后的结果按 "Max 工资" 进行排序.

   (8). 最后执行 LIMIT 子句, . 进行分页查询

执行顺序: FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY ->limit  

习题链接:http://www.cnblogs.com/wangfengming/articles/7944029.html

MySQL数据查询之单表查询的更多相关文章

  1. (七)MySQL数据操作DQL:单表查询1

    (1)单表查询 1)环境准备 mysql> CREATE TABLE company.employee5( id int primary key AUTO_INCREMENT not null, ...

  2. MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询

    MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...

  3. MySQL数据库篇之单表查询

    主要内容: 一.单表查询的语法 二.关键字的执行优先级 三.简单查询 四.where约束 五.分组查询 group by 六.having过滤 七.查询排序 order by 八.限制查询的记录数 l ...

  4. MySQL简单查询和单表查询

    MySQL记录操作 概览 MySQL数据操作: DML 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用 ...

  5. SQL基本查询_单表查询(实验二)

    SQL基本查询_单表查询(实验二) 查询目标表结构及数据 emp empno ename job hiedate sal comn deptno 1007 马明 内勤 1992-6-12 4000 2 ...

  6. SQL基础--查询之一--单表查询

    SQL基础--查询之一--单表查询

  7. mysql第四篇:数据操作之单表查询

    单表查询 一.简单查询 -- 创建表 DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INCRE ...

  8. 查询数据SELECT 之单表查询

    一.单表查询的语法与关键字的执行优先级""" # 单表查询# 单标查询完整与法:# select distinct(关键字,代表查询的意思,后面跟)字段1,字段2...( ...

  9. MySql(六)单表查询

    十.单表查询 一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制 ...

随机推荐

  1. 查看docker容器的内存占用

    使用docker stats命令可以查看容器的内存,但是有时候docker stats命令获得的数据可能准确,可以参考下面这种方式 先通过docker ps -a 找到容器的container id ...

  2. html/css/js-如何利用jq来更改属性的值和获取属性的值

    jquery的使用在web开发中是非常广泛的,虽然说比较容易,易学,但在开发过程中,也总是会碰到各种各样的小问题. 我曾经就遇到这种问题,jq如何获取属性值和更改属性值的. 众所周知,attr()可以 ...

  3. Hive环境的安装

    hive是什么:hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能(HQL) hive有什么用 1.通过类SQL语句快速实现简单的Map ...

  4. Kafka介绍与消息队列

    消息队列的好处: 消息队列(Message Queue) 消息: 网络中的两台计算机或者两个通讯设备之间传递的数据.例如说:文本.音乐.视频等内容. 队列:一种特殊的线性表(数据元素首尾相接),特殊之 ...

  5. 详解vue-cli脚手架项目-package.json

    该随笔收藏自: 详解vue-cli脚手架项目-package.json package.json是npm的配置文件,里面设定了脚本以及项目依赖的库. npm run dev 这样的命令就写在packa ...

  6. 多端统一框架尝试--Taro

    参考资料 Taro官网Taro GitHubTaro资源汇总Taro-UI 我的demo代码 github地址 Taro介绍和尝试心得 Taro是基于React语法规范开发的多端统一的框架,一套代码可 ...

  7. 62.纯 CSS 创作一只蒸锅(感觉不好看呀)

    原文地址:https://segmentfault.com/a/1190000015389338 HTML code: <!-- steamer: 蒸锅: lid: 盖子: pot: 锅 --& ...

  8. scrollview嵌套recyclerview卡顿现象

    方式一xml: android:nestedScrollingEnabled="false" <android.support.v7.widget.RecyclerView ...

  9. C#设计模式(4)——抽象工厂模式(Abstract Factory)

    简单工厂模式: 简单工厂模式的工厂类随着产品类的增加需要增加额外的代码 工厂方法模式: 工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性 但是在实际应用中,一个工厂不止会创建单 ...

  10. Keil中 Program Size: Code RO-data RW-data ZI-data

    一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘. 现在我们就一个STM32的工程为例子 linking... Program Size: ...