1. 简单查询
select * from employee;
select name,salary from employee;

2. where条件        
   1.比较运算符:> < >= <= <> !=
   select name,salary from employee where salary > 10000;
   select name,salary from employee where salary > 10000 and salary < 20000;
   2.between
   select name,salary from employee where salary between 10000 and 20000;    # 包括10000和20000本身
   select name,salary from employee where salary not between 10000 and 20000;
   3.in
        select name,salary from employee where salary = 10000 or salary = 20000 or salary = 30000;
   等同于  select name,salary from employee where salary in (10000,20000,30000);    #条件相同时,可以这么用

   select * from employee where salary = 10000 or age = 18 or sex='male';       #查找条件不相同时,就不可以用in

   select * from employee where post_comment is Null;
   select * from employee where post_comment = Null;       #不可以用 =
   select * from employee where post_comment is not Null;

   is 判断是不是空(null)    = 是比较有没有值('')

  4.like
   select * from employee where name like '%n%';

   select * from employee where name like 'e__n';     # 一个_ 表示一个字符位
   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__';

3.group by分组
大前提:可以按照任意字段分组,但分完组后,只能查看分组的那个字段,要想取的组内的其他字段信息,需要借助函数

mysql> select depart_id,group_concat(name)  from employee group by depart_id;
+-----------+--------------------------------------------------------------+
| depart_id | group_concat(name)                                           |
+-----------+--------------------------------------------------------------+
|         1 | egon,alex,wupeiqi,yuanhao,liwenzhou,jingliyang,jinxin,成龙   |
|         2 | 歪歪,丫丫,丁丁,星星,格格                                     |
|         3 | 张野,程咬金,程咬银,程咬铜,程咬铁                             |
+-----------+--------------------------------------------------------------+
3 rows in set (0.00 sec)
mysql> select depart_id,count(name)  from employee group by depart_id;
+-----------+-----------+
| depart_id | count(id) |
+-----------+-----------+
|         1 |         8 |
|         2 |         5 |
|         3 |         5 |
+-----------+-----------+
3 rows in set (0.01 sec)
mysql> select depart_id,group_concat(id)  from employee group by depart_id;
+-----------+------------------+
| depart_id | group_concat(id) |
+-----------+------------------+
|         1 | 1,2,3,4,5,6,7,8  |
|         2 | 9,10,11,12,13    |
|         3 | 14,15,16,17,18   |
+-----------+------------------+
3 rows in set (0.00 sec)
mysql> select depart_id,count(id)  from employee group by depart_id;
+-----------+-----------+
| depart_id | count(id) |
+-----------+-----------+
|         1 |         8 |
|         2 |         5 |
|         3 |         5 |
+-----------+-----------+
3 rows in set (0.00 sec)
mysql> select depart_id,max(salary) from employee group by depart_id;
+-----------+-------------+
| depart_id | max(salary) |
+-----------+-------------+
|         1 |  1000000.31 |
|         2 |     4000.33 |
|         3 |    20000.00 |
+-----------+-------------+
3 rows in set (0.00 sec)
mysql> select depart_id,min(salary) from employee group by depart_id;
+-----------+-------------+
| depart_id | min(salary) |
+-----------+-------------+
|         1 |     2100.00 |
|         2 |     1000.37 |
|         3 |    10000.13 |
+-----------+-------------+
3 rows in set (0.00 sec)
mysql> select depart_id,sum(salary) from employee group by depart_id;
+-----------+-------------+
| depart_id | sum(salary) |
+-----------+-------------+
|         1 |  1070200.64 |
|         2 |    13001.47 |
|         3 |    84000.13 |
+-----------+-------------+
3 rows in set (0.00 sec)
mysql> select depart_id,avg(salary) from employee group by depart_id;
+-----------+---------------+
| depart_id | avg(salary)   |
+-----------+---------------+
|         1 | 133775.080000 |
|         2 |   2600.294000 |
|         3 |  16800.026000 |
+-----------+---------------+
3 rows in set (0.00 sec)
单独使用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 count from employee group by post;#按照岗位分组,并查看每个组有多少人

强调:

如果我们用unique的字段作为分组的依据,则每一条记录自成一组,这种分组没有意义
多条记录之间的某个字段值相同,该字段通常用来作为分组的依据
#参考链接:http://www.ywnds.com/?p=8184
#分组查询的常见问题:
mysql> select id,count from tt group by id;
ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.tt.count' which is
not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by #查看MySQL 5.7默认的sql_mode如下:
mysql> select @@global.sql_mode;
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION #去掉ONLY_FULL_GROUP_BY模式,如下操作:
mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; #!!!注意
ONLY_FULL_GROUP_BY的语义就是确定select target list中的所有列的值都是明确语义,简单的说来,在ONLY_FULL_GROUP_BY模式下,target list中的值要么是来自于聚集函数的结果,要么是来自于group by list中的表达式的值。

!!!MySQL 5.7默认ONLY_FULL_GROUP_BY语义介绍

python-day42--单表查询的更多相关文章

  1. python mysql 单表查询 多表查询

    一.外键 变种: 三种关系: 多对一 站在左表的角度: (1)一个员工 能不能在 多个部门? 不成立 (2)多个员工 能不能在 一个部门? 成立 只要有一个条件成立:多 对 一或者是1对多 如果两个条 ...

  2. Django学习——Django测试环境搭建、单表查询关键字、神奇的双下划线查询(范围查询)、图书管理系统表设计、外键字段操作、跨表查询理论、基于对象的跨表查询、基于双下划线的跨表查询

    Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 ...

  3. python实现简易数据库之二——单表查询和top N实现

    上一篇中,介绍了我们的存储和索引建立过程,这篇将介绍SQL查询.单表查询和TOPN实现. 一.SQL解析 正规的sql解析是用语法分析器,但是我找了好久,只知道可以用YACC.BISON等,sqlit ...

  4. 巨蟒python全栈开发django6: FBV&CBV&&单表查询的其他方法

    练习CBV用法 截图中的action="/cbv/",应该是这样 上边红图,说明mysql有问题,需要重启一下 返回,输入的内容 @wrapper==>cbv=wrapper ...

  5. python 3 mysql 单表查询

    python 3 mysql 单表查询 1.准备表 company.employee 员工id id int 姓名 emp_name varchar 性别 sex enum 年龄 age int 入职 ...

  6. Python进阶----pymysql模块的使用,单表查询

    Python进阶----pymysql模块的使用,单表查询 一丶使用pymysql ​   ​   1.下载pymysql包: pip3 install pymysql ​​   ​   2.编写代码 ...

  7. day42——外键的限制和解决方法、外键的三种约束模式、修改表(单表查询)

    day42 外键的限制和解决方法 可以添加外键关联的那个字段可以是 被唯一(unique)约束的字段 或者 主键 限制:+ 由于外键的使用,致使多个表之间产生了联系,当我们对这些表进行更新或删除操作的 ...

  8. python 全栈开发,Day62(外键的变种(三种关系),数据的增删改,单表查询,多表查询)

    一.外键的变种(三种关系) 本节重点: 如何找出两张表之间的关系 表的三种关系 一.介绍 因为有foreign key的约束,使得两张表形成了三种了关系: 多对一 多对多 一对一 二.重点理解如果找出 ...

  9. 巨蟒python全栈开发数据库攻略3:行记录的操作&单表查询3

    1.数据行的增删改 2.单表查询 select&where条件 3.group by&having&order by&limit

  10. python开发mysql:单表查询&多表查询

    一 单表查询,以下是表内容 一 having 过滤 1.1 having和where select * from emp where id > 15; 解析过程;from > where ...

随机推荐

  1. python之路----面向对象中的内置函数

    property属性 什么是特性property property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值 例一:BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法 ...

  2. 解析分布式锁之Zookeeper实现(一)

    实现分布式锁目前有三种流行方案,分别为基于数据库.Redis.Zookeeper的方案,本文主要阐述基于Zookeeper的分布式锁,其他两种会在后文中一起探讨.现在我们来看下使用Zookeeper如 ...

  3. c++第十五天

    <c++ primer, 5E> 第94页到第99页,笔记: 1.迭代器(iterator):一种比下标访问更通用的访问容器中元素的机制. (并不是所有标准库容器都支持下标访问,<运 ...

  4. SNMP学习笔记之SNMPv3报文认证和加密

    下面主要的内容就是SNMPv3的加密和认证过程! USM的定义为实现以下功能: 鉴别 数据加密 密钥管理 时钟同步化 避免延时和重播攻击 1.UsmSecurityParameters(安全参数) 安 ...

  5. 根据wsdl文件,soupUI生成webservice客户端代码

    根据wsdl文件,soupUI生成webservice客户端代码 功能介绍: 对于面向WebServie接口开发时,当我们已经获取到WSDL文件后,可以使用soapUI工具生成对应的客户端和服务端代码 ...

  6. android 实践项目三

    android 实践项目三 本周我主要完成的任务是将代码进行整合,然后实现百度地图的定位与搜索功能.在这次实现的 图形界面如下: 在本周的工作中主要的实现出来定位与收索的功能,在地图中能实现了定位,显 ...

  7. 思考卷积神经网络(CNN)中各种意义

    原文:https://blog.csdn.net/aimreant/article/details/53145063 思考卷积神经网络(CNN)中各种意义 只是知道CNN是不够,我们需要对其进行解剖, ...

  8. Cocos 开发笔记

    经发现: cocos creator 提供的hello world 模版中.只有HelloWorkd.js中 properties 属性 text的值不是'hello world!' Label 组件 ...

  9. luogu4473 BZOJ2143 2011[国家集训队]飞飞侠

    题目戳这里 有问题可以在博客@ 应该还会有人来看吧,嘻嘻 正题: 题目大意: 题目很清楚,就是一个点有一定的范围,会有一定的花费 求三个点中的任意两个点到另一个点的最小花费 (麻麻教育我千万读好题目( ...

  10. system.data.sqlite的源代码下载

    帮助文档 http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki 历史版本https://system.data.sqlit ...