关键字:

select * from 表名
where
group by
having
distinct
order by
limit a,b
between * and *

测试数据

# 测试数据
create table stu(id int primary key auto_increment,name char(10),math float,english float);
insert into stu values(null,"赵云",90,30);
insert into stu values(null,"小乔",90,60);
insert into stu values(null,"小乔",90,60);
insert into stu values(null,"大乔",10,70);
insert into stu values(null,"李清照",100,100);
insert into stu values(null,"铁拐李",20,55);
insert into stu values(null,"小李子",20,55);
1. where关键字

# where后面可以接 运算符
select *from stu where english > 60;
select *from stu where english < 60;
select *from stu where english = 60;
select *from stu where english <= 60;
select *from stu where english >= 60; # where后面可以接 in ,not in
select *from stu where english in (60,70,80);
select *from stu where english not in (60,70,80); # where后面可以接 逻辑运算符 and,or,not
select *from stu where english >= 60 and math >=60;
select *from stu where english >= 60 or math >=90;
select *from stu where not english >= 60; # 英语小于60分的记录
select *from stu where not english >= 60 and math >=60; # 英语小于60 and 数学大于等于60
select *from stu where not (english >= 60 and math >=60); # 去掉 英语大于等于60 并且 数学大于等于60 的人。 换一句话说,只要有一门不及格就显示出来。 # where后面可以接 模糊查询 like % 表示 0个或多个。_表示一个任意字符
select * from stu where name like "小%"; # where后面可以接 BINARY 区分大小写
select * from stu where BINARY name like "a%"; # 查询以小写字母a开头的姓名 # 练习题1:查询name以小开头的名字,math < 80 并且 英语大于 20的人的数学成绩
select math from stu where math < 80 and english >20 and name like "小%";

2. between * and *

select * from stu where english between 60 and 90;

3. distinct 去除重复记录

# distinct 写在 * 的前面
select distinct * from stu; # 只有 所有的字段 都存在重复的,才会去重
select distinct name from stu; # 只要 name 重复,就会去掉重复

4. group by

测试数据
create table emp (id int,name char(10),sex char,dept char(10),job char(10),salary double);

insert into emp values
(1,"刘备","男","市场","总监",5800),
(2,"张飞","男","市场","员工",3000),
(3,"关羽","男","市场","员工",4000),
(4,"孙权","男","行政","总监",6000),
(5,"周瑜","男","行政","员工",5000),
(6,"小乔","女","行政","员工",4000),
(7,"曹操","男","财务","总监",10000),
(8,"司马懿","男","财务","员工",6000); 简单练习:
1.查询每个部门有几个人 2.计算每个部门的平均工资 3.计算每个岗位的平均工资 4.计算每个部门每个岗位的平均工资 5.查询平均工资大于5000的部门
# gourp 是分组的意思,即将一个整体按照某个特征或依据来分为不同的部分

# 为什么会有分组?  为了统计,例如统计男性有几个,女性有几个

# 统计函数
# 也称为聚合函数,就是将一堆数据经过计算得出一个结果 # 练习题
# 求最大工资的姓名。
select name from emp where salary = max(salary); # 这个sql执行报错,max()需要遍历完所有的结果。where 字句 后面并没有遍历完,所以聚合函数不能放到where的后面 # 聚集函数
AVG() # 求平均数 SUM() # 求和 MAX() # 求最大值 MIN() # 求最小值 COUNT() # 在查询某个字段有多少行时,null是不计入count的。 # 如何使用group by
select [字段1,...,字段n|*] from 表名 group by 字段1,...,字段n # 容易出现问题
select * from emp group by dept;
mysql5.6 下查询的结果是name仅显示该分组下的一个数据。(按理应该报错,但是在5.6之后,开启了模糊模式。我们可以改成严格模式) # 练习题
1. 查询出部门人数小于3个人的部门名称,人员姓名,具体的人数
mysql> select dept,group_concat(name),count(dept)as person_nums from emp group by dept having person_nums <3;
+--------+--------------------+-----+
| dept | group_concat(name) | person_nums |
+--------+--------------------+-----+
| 财务 | 曹操,司马懿 | 2 |
+--------+--------------------+-----+
1 row in set (0.28 sec) # as 去别名,可以省略
select name, english + math as 总分 from stu;
select name, english + math 总分 from stu;
having # 过滤
# 作用:
"""
1. 用于对分组后的数据进行刷选
2. 作用跟where相同,用于过滤
""" # having与where的不同点
"""
1. 不同点在于where是从文件读取数据时的过滤条件,这导致了where中不能使用聚合函数
2. having是分组后进行的过滤。
""" # 为什么 不分组的时候在select 前面可以使用聚合函数呢?
"""
select SUM(salary) from where ...;
因为你where比select 后面的字段筛选更早执行 此时数据全都已经读取了 所以可以进行统计
""" # 练习题
"""
1. 查询 岗位平均薪资高于6000的 岗位名称和平均薪资
select dept,avg(salary) from emp group by dept having avg(salary) > 6000 ;
2. 查询 部门人数少于3的 部门名称 人员名称 人员个数
select dept,group_concat(name),count(*) from emp group by dept having count(name) < 3;
"""

5. 聚合函数:

# 用户处理字符串的函数
concat(str1,str2,str3…) # 合并字符串函数
strcmp(str1,str2) # 比较字符串大小函数
length(str) # 获取字符串字节数函数
char_length(str) # 获取字符串字符数函数

6. order by

select 字段1,...字段n from 表名 order by 字段名1,...字段名n; # 默认asc升序

select 字段1,...字段n from 表名 order by 字段名1,...字段名n desc;  # 降序

select 字段1,...字段n from 表名 order by 字段名1 desc,...字段名n asc;  # 字段1降序,字段n升序

7. limit

# 模式
"""
select 字段1,...字段n from 表名 order by 字段名1,...字段名n limit 10;
""" # 作用
"""
1. 用于限制显示的记录数
2. limit [start,] count;
start 开始位置,第一行,start为0
count 显示条数
不指定start时,则从第一条开始显示
3. limit可用于分页
分页原理:先查询总数据条数,设为a
确定每页数量b,
总页数为c = a / b 如果除不尽则需要加1 例如 10 / 3 正确页数为4
查询语句的起始位置为s = 当前页数d 减去1 乘以每页数量
即 s = (d - 1) * b
语句为:select*from table_name limit s,b
""" # 练习
"""
1. 查看前三人
select *from emp limit 3;
2. 查看工资最高的那个人信息
select *from emp order by salary desc limit 1;
3. 指定起始位置,查看id为3-6的人
select *from emp limit 2,4; """

MySQL之关键字的更多相关文章

  1. MySQL保留关键字

    今天在使用hibernate关联映射导出表的时候因为映射了一个表名为option,是MYSQL的关键字,总是生成错误,一开始以为是映射文件和代码问题,检查不出问题才想到可能用到数据库的保留关键字了,查 ...

  2. MySql 分页关键字(limit)

    mysql分页关键字: limit m,n --m:表示从哪一行开始查,n:查询多少条 oracle分页关键字:: rownum SqlServer:top(2005以下版本)  row_number ...

  3. mysql status关键字 数据表设计中慎重使用

    mysql status关键字  数据表设计中慎重使用

  4. mysql JOIN关键字 语法

    mysql JOIN关键字 语法 作用:用于根据两个或多个表中的列之间的关系,从这些表中查询数据.大理石量具 说明:数据库中的表可通过键将彼此联系起来.主键(Primary Key)是一个列,在这个列 ...

  5. 转:mysql保留关键字

    原文链接:http://www.tuicool.com/articles/Brauq2e 从网上找了一个mysql的保留字列表,仅供参考. ADD ALL ALTER ANALYZE AND AS A ...

  6. mysql 函数,关键字,特性

    ## mysql 截取函数 left(),right(),substring(),substring_index()SELECT LEFT('www.baidu.com',3); # wwwSELEC ...

  7. [转]mysql使用关键字作为列名的处理方式

    转自:https://blog.csdn.net/xpnidaye/article/details/52388669 下面是一个创建表的语句,而其中key是一个关键字,所以不能直接写key. crea ...

  8. mysql查询关键字补充与多表查询

    目录 查询关键字补充 having过滤 distinct去重 order by排序 limit分页 regexp正则 多表查询 子查询 连表查询 查询关键字补充 having过滤 关键字having和 ...

  9. mysql保留关键字 BigDecimal Double 四舍五入

    `desc`   需要加引号 BigDecimal progress = new BigDecimal(0.444); progress=progress.setScale(2, BigDecimal ...

随机推荐

  1. [python] VSCode+Jupyter 安装步骤以及注意事项

    1. 安装Python2. 安装Jupyter, pip install 安装Jupyter(若使用Anaconda,则需要将其添加到环境变量中)3. 将Python的Scripts文件夹添加到系统环 ...

  2. Drawer 侧边栏、以及侧边栏内 容布局

    一.Flutter Drawer 侧边栏 在 Scaffold 组件里面传入 drawer 参数可以定义左侧边栏,传入 endDrawer 可以定义右侧边栏.侧边栏默认是隐藏的,我们可以通过手指滑动显 ...

  3. 503,display:none;与visibility:hidden;的区别

    联系:他们都能让元素不可见 区别: display:none:会让元素从渲染树中消失,渲染的时候不占据任何空间: visibility:hidden:不会让元素从渲染树中消失,渲染时袁旭继续占据空间, ...

  4. oracle创建、删除索引等操作

    1.创建索引 create index 索引名 on 表名(列名); 2.删除索引 drop index 索引名; 3.创建组合索引 create index 索引名 on 表名(列名1,,列名2); ...

  5. Go递归

    1. 递归介绍 package main import ( "fmt" ) func test(n int) { if n > 2 { n-- test(n) } fmt.P ...

  6. Ubuntu执行sudo apt-get update报错E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无法对目录 /var/lib/apt/lists/ 加锁

    一.强制解锁,执行语句 sudo rm /var/lib/apt/lists/lock 二.终端输入 ps -aux | grep apt-get 查看一下apt-get的相关进程.然后sudo ki ...

  7. Python学习之面向对象进阶

    面向对象进阶当然是要谈谈面向对象的三大特性:封装.继承.多态 @property装饰器 python虽然不建议把属性和方法都设为私有的,但是完全暴露给外界也不好,这样,我们给属性赋值的有效性九无法保证 ...

  8. LoadRunner通过webservice协议调用WSDL接口时,返回值不正确

    有可能是某些传参空的值导致的. 解决办法:注释掉空值传参.或者将其值转变为true ”ProductIDSpecified=true“,

  9. C:函数 注意点

    形参 在定义函数时指定的形参,在未出现函数调用时,它们并不占内存中的存储单元,因此称它们是形式参数或虚拟参数,简称形参,表示它们并不是实际存在的数据,所以,形参里的变量不能赋值. C不像C++里一样可 ...

  10. C语言与汇编的嵌入式编程:main中模拟函数的调用(两数交换)

    编写一个两数交换函数swap,具体代码如下: #include<stdio.h> void swap(int *p1,int *p2) { int temp; temp = *p1; *p ...