一、单表查询的语法

SELECT 字段1,字段2...

FROM 表名

WHERE 条件

GROUP BY field

HAVING 筛选

ORDER BY field

LIMIT 限制条数

二、关键字的执行顺序

1.找到表:from

2.拿着where指定的约束条件,去文件/表中取出一条条记录

3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组

4.将分组的结果进行having过滤

5.执行select

6.去重

7.将结果按条件排序:order by

8.限制结果的显示条数

SELECT 字段1,字段2... ⑤

FROM 表名     ①

WHERE 条件 ②

GROUP BY field ③

HAVING 筛选    ④

ORDER BY field  ⑥

LIMIT 限制条数 ⑦

三、简单查询

#简单查询

SELECT id,name,sex,age,hire_date,post,post_comment,salary,office,depart_id

FROM employee;

SELECT * FROM employee;

SELECT name,salary FROM employee;

#避免重复DISTINCT

SELECT DISTINCT post FROM employee;

#通过四则运算查询

SELECT name, salary*12 FROM employee;

SELECT name, salary*12 AS Annual_salary FROM employee;

SELECT name, salary*12 Annual_salary FROM employee;

#定义显示格式

CONCAT() 函数用于连接字符串

SELECT CONCAT('姓名: ',name,' 年薪: ', salary*12) AS Annual_salary

FROM employee;

CONCAT_WS() 第一个参数为分隔符

SELECT CONCAT_WS(':',name,salary*12) AS Annual_salary

FROM employee;

结合CASE语句:

SELECT

(

CASE

WHEN NAME = 'egon' THEN

NAME

WHEN NAME = 'alex' THEN

CONCAT(name,'_BIGSB')

ELSE

concat(NAME, 'SB')

END

) as new_name

FROM

emp;

四、where约束

where字句中可以使用:

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

2. between 80 and 100 值在10到20之间

3. in(80,90,100) 值是10或20或30

4. like 'egon%' pattern可以是%或_, %表示任意多字符 _表示一个字符

5. 逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not

#1:单条件查询

SELECT name FROM employee

WHERE post='sale';

#2:多条件查询

SELECT name,salary FROM employee

WHERE post='teacher' AND salary>10000;

#3:关键字BETWEEN AND

SELECT name,salary FROM employee

WHERE salary BETWEEN 10000 AND 20000;

SELECT name,salary FROM employee

WHERE salary NOT BETWEEN 10000 AND 20000;

#4:关键字IS NULL(判断某个字段是否为NULL不能用等号,需要用IS)

SELECT name,post_comment FROM employee

WHERE post_comment IS NULL;

SELECT name,post_comment FROM employee

WHERE post_comment IS NOT NULL;

SELECT name,post_comment FROM employee

WHERE post_comment=''; 注意''是空字符串,不是null

ps:

执行

update employee set post_comment='' where id=2;

再用上条查看,就会有结果了

#5:关键字IN集合查询

SELECT name,salary FROM employee

WHERE salary=3000 OR salary=3500 OR salary=4000 OR salary=9000 ;

SELECT name,salary FROM employee

WHERE salary IN (3000,3500,4000,9000) ;

SELECT name,salary FROM employee

WHERE salary NOT IN (3000,3500,4000,9000) ;

#6:关键字LIKE模糊查询

通配符’%’

SELECT * FROM employee

WHERE name LIKE 'eg%';

通配符’_’

SELECT * FROM employee

WHERE name LIKE 'al__';

五 分组查询:GROUP BY

1 什么是分组?为什么要分组?

#1、首先明确一点:分组发生在where之后,即分组是基于where之后得到的记录而进行的

#2、分组指的是:将所有记录按照某个相同字段进行归类,比如针对员工信息表的职位分组,或者按照性别进行分组等

#3、为何要分组呢?

取每个部门的最高工资

取每个部门的员工数

取男人数和女人数

小窍门:‘每’这个字后面的字段,就是我们分组的依据#4、大前提:

可以按照任意字段分组,但是分组完毕后,比如group by post,只能查看post字段,如果想查看组内信息,需要借助于聚合函数

2 GROUP BY

单独使用GROUP BY关键字分组

SELECT post FROM employee GROUP BY post;

注意:我们按照post字段分组,那么select查询的字段只能是post,想要获取组内的其他相关信息,需要借助函数

GROUP BY关键字和GROUP_CONCAT()函数一起使用

SELECT post,GROUP_CONCAT(name) FROM employee GROUP BY post;#按照岗位分组,并查看组内成员名

SELECT post,GROUP_CONCAT(name) as emp_members FROM employee GROUP BY post;

GROUP BY与聚合函数一起使用

select post,count(id) as countfrom employee group by post;#按照岗位分组,并查看每个组有多少人

强调:

如果我们用unique的字段作为分组的依据,则每一条记录自成一组,这种分组没有意义

多条记录之间的某个字段值相同,该字段通常用来作为分组的依据

3 聚合函数

#强调:聚合函数聚合的是组的内容,若是没有分组,则默认一组

示例:

SELECT COUNT(*) FROM employee;

SELECT COUNT(*) FROM employee WHERE depart_id=1;

SELECT MAX(salary) FROM employee;

SELECT MIN(salary) FROM employee;

SELECT AVG(salary) FROM employee;

SELECT SUM(salary) FROM employee;

SELECT SUM(salary) FROM employee WHERE depart_id=3;

4 HAVING过滤

HAVING与WHERE不一样的地方在于!!!!!!

#!!!执行优先级从高到低:where > group by > having#1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。

#2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数

mysql>select @@sql_mode;+--------------------+

| @@sql_mode |

+--------------------+

| ONLY_FULL_GROUP_BY |

+--------------------+

1 row in set (0.00sec)

mysql> select * from emp where salary > 100000;+----+------+------+-----+------------+---------+--------------+------------+--------+-----------+

| id | name | sex | age | hire_date | post | post_comment | salary | office | depart_id |

+----+------+------+-----+------------+---------+--------------+------------+--------+-----------+

| 2 | alex | male | 78 | 2015-03-02 | teacher | NULL | 1000000.31 | 401 | 1 |

+----+------+------+-----+------------+---------+--------------+------------+--------+-----------+

1 row in set (0.00sec)

mysql> select * from emp having salary > 100000;

ERROR1463 (42000): Non-grouping field 'salary' is used inHAVING clause

mysql> select post,group_concat(name) from emp group by post having salary > 10000;#错误,分组后无法直接取到salary字段

ERROR 1054 (42S22): Unknown column 'salary' in 'having clause'mysql> select post,group_concat(name) from emp group by post having avg(salary) > 10000;+-----------+-------------------------------------------------------+

| post | group_concat(name) |

+-----------+-------------------------------------------------------+

| operation | 程咬铁,程咬铜,程咬银,程咬金,张野 |

| teacher | 成龙,jinxin,jingliyang,liwenzhou,yuanhao,wupeiqi,alex |

+-----------+-------------------------------------------------------+

2 rows in set (0.00 sec)

验证

六 查询排序:ORDER BY

按单列排序

SELECT * FROM employee ORDER BY salary;

SELECT * FROM employee ORDER BY salary ASC;

SELECT * FROM employee ORDER BY salary DESC;

按多列排序:先按照age排序,如果年纪相同,则按照薪资排序

SELECT * from employee

ORDER BY age,

salary DESC;

七 限制查询的记录数:LIMIT

示例:

SELECT * FROM employee ORDER BY salary DESC

LIMIT 3; #默认初始位置为0

SELECT * FROM employee ORDER BY salary DESC

LIMIT 0,5; #从第0开始,即先查询出第一条,然后包含这一条在内往后查5条

SELECT * FROM employee ORDER BY salary DESC

LIMIT 5,5; #从第5开始,即先查询出第6条,然后包含这一条在内往后查5条

八 使用正则表达式查询

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结尾

mysql怎么进行单表查询_MySQL之单表查询相关推荐

  1. mysql左连接去重查询_mysql之单表查询、多表查询

    mysql查询 单表查询 """ 增: insert [into] [数据库名.]表名[(字段1[,...,字段n])] values (数据1[,...,数据n])[, ...

  2. mysql单表历史记录_Mysql之单表记录查询

    数据记录查询: 1.简单数据记录查询: select * from table_name; select allfield from table_name; select distinct(属性名) ...

  3. mysql分片库分页查询_Mysql分库分表

    一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就 ...

  4. mysql连接多个存储存储_Mysql(三):多表查询和存储程序

    今天内容: ● 多表查询(内连接 外连接 子查询) ● 存储程序(存储过程 函数) 多表查询 ​同时从多张数据表中查取到需要的数据即是多表查询. 多表查询时,参与查询的表中每条数据进行组合,这种效果称 ...

  5. mysql关联表分页查询_MySQL一对多分页查询-主表关联表条件查询问题

    文章目录 1 摘要 2 情景复现 2.1 数据模型 2.2 核心代码 2.3 测试数据 2.4 拓展一点 1 摘要 分页查询是后台项目中最常见的一种操作,在一对多(one to many)的关系表中, ...

  6. MySQL数据库应用 多表查询_mysql数据库-多表查询

    今日任务 完成对MYSQL数据库的多表查询及建表的操作 教学目标 掌握MYSQL中多表的创建及多表的查询 掌握MYSQL中的表关系分析并能正确建表 昨天内容回顾: ​ 数据库的创建 : create ...

  7. mysql如何链表查询_mysql怎样两表查询?

    mysql两表查询的方法:1.使用"select 字段列表 from 表1,表2 [where 条件]"进行查询:2.使用"SELECT 字段列表 FROM 表1 关键字 ...

  8. mysql 数据库分表查询_mysql数据库分表及实现

    项目开发中,我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. 当出现这种情况时,我们可以考虑分表,即将单 ...

  9. mysql怎样两表查询_mysql怎样两表查询?

    mysql两表查询的方法:1.使用"select 字段列表 from 表1,表2 [where 条件]"进行查询:2.使用"SELECT 字段列表 FROM 表1 关键字 ...

  10. mysql数据库表的连接查询_mysql数据库多表连接查询问题

    我有5个表 chanet_cmiims_person_info表 chanet_cmiism_person_commitstate表 chanet_cmiims_commitstate_type表 c ...

最新文章

  1. 自我学习SSM框架集成(二)
  2. 微信小程序设置域名、不校验域名
  3. 5月26 留言板练习题
  4. DS汽车通过采用沉浸式虚拟现实技术实现展厅转型
  5. java中有关文件流的操作
  6. linux中命令对c文件进行编译,Linux下C语言编译基础及makefile的编写
  7. jqGrid数据增删查改
  8. python模板怎么写,Python模板
  9. 滴滴 Web 移动端组件库 cube-ui 开源
  10. WordPress的wp-cumulus插件------------标签云插件
  11. 图片太大怎么压缩变小?教你四招快捷压缩图片
  12. 【Spring系列】 Ioc 实现原理,Spring获取bean的方式,创建对象的方式和懒加载
  13. 2015CGMC 参赛游戏名单
  14. 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 6.全局防护盲点的总结上篇
  15. win10高危服务_Win10有哪些可以安全禁用的服务?Win10安全禁用服务
  16. centos 配置证书_如何在CentOS 8上设置和配置证书颁发机构(CA)
  17. C语言程序设计——猜数字游戏
  18. Python-苹果手机编程
  19. 如果一只股票退市,那么里面所持有这只股票人的钱该怎么办?
  20. 2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队

热门文章

  1. linux yum安装expect,CentOS安装expect
  2. spdy_header
  3. 如何在 Linux 系统启用 UEFI 的 Secure Boot
  4. linux下通过命令行使用Vtune统计处理器微体系结构特征
  5. Python课设:网站设计
  6. 如何免费将多个PDF进行合并
  7. spring 框架的作用
  8. python函数def里面嵌套def_python 函数嵌套函数_Python中的嵌套函数
  9. 《中美日的管理哲学》
  10. Microsoft Edge快捷键