mysql 回顾
主键可以是一个或者是多个列,但所有的列(或者是列的组合)必须是唯一的,非空的
关键字distinct 可以去重,实现该效果还可以使用group by
limit 默认从 0 开始,limit 5 其实是 limit 0 5 , 0 为起始行,5 为读取的数量。limit 命令要放在 group by 后面。
如:
select vend_id from products group by(vend_id) limit 0 5;从0开始,取 5行,一共5行
select disctinct vend_id from products limit 1 offset 3;从第1行开始计数,取第三行;一共就一行
select vend_id from products where vend_id > 1002 group by(vend_id) having vend_id >= 1003 order by vend_id desc limit 3;
字句顺序
select ... from ... where ... group by ... having ... order ... limit ...
where 字句 用于对数据库原始数据集进行筛选,而having 用于对经过group by以后的数据集进行筛选。
where 可用的条件操作符如下:
= != > < >= <= between and in not
空值 null 检测用 is ,不能用 =
select name from testnull where name is null;
select name from testnull where name is not null; √
select name from testnull where name not is null;× 这么查是错的
使用and 和 or 过滤数据
select prod_id,prod_name from products where vend_id = 1003 and prod_price <= 10;
and 且, 必须同时满足两个条件
select prod_id,prod_name from products where vend_id = 1003 or prod_price <= 10;
or 或 只要满足这两个条件其一即可。(注意,这并不代表会涵盖所有数据)
例如满足这个过滤条件的产品是这样的:
1.该产品的vend_id = 1003 ,无论 该产品的 价格是否<=10,即使 >10 也没关系
2.该产品的 vend_id != 1003 ,那么该产品必须 <= 10 才能入选,
所以:
对于那些 vend_id != 1003 的且 价格 > 10 的产品,他们是不符合条件的。
and or 的优先级:
and 和or 同时出现时,and 的优先级比or高,也就是说,where子句过滤条件会先执行and子句,然后在执行or子句。如果想改变这种执行顺序,主要讲or子句用() 包裹即可。
select * from products where vend_id = 1002 or vend_id =1003 and prod_price >10;
这句话中,要求产品符合如下条件之一即可:
1.vend_id = 1002 ,其他价格什么的随意,没有任何限制
2.vend_id = 1003 且 price>10 这两个 条件都满足的产品才会被选中
select * from products where (vend_id=1002 or vend_id = 1003) and prod_price >10;
这句话,要求产品符合如下条件:
1.产品 vend_id =1002 或者是 =1003,都可以
同时要求:
2.price>10
以上这两个条件同时满足才行。
也就是说:筛选 1002 ,1003 生产的所有 价格 >10 的产品。
in not 操作符
select * from products where vend_id in (1002,1003); 效果和 vend_id = 1002 or vend_id = 1003 一样;但是 in 后面可以包含其他的 select 子句。
select * from products where vend_id not in(1002,1003);
not 的作用是否定它后面所跟着的任何条件
select * from products where vend_id between 1001 and 1004;
select * from products where vend_id NOT between 1001 and 1004;
like _ % 通配符 regexp 正则表达式
% 表示 任意 数量的 任意 字符 _ 仅表示 一个 字符;
除了 NULL
select * from products where vend_id like '1__2'; 以 1开头的 2结尾的中间两个随意的厂商。
select * from products where vend_id like '%2';以2为结尾的所有厂商;
select * from products where prod_name regexp '100';名字中包含 1000 的产品。
注意
like 和 regexp 的不同点
select * from products where prod_name like '1000'; 结果为空
select * from products where prod_name regexp '1000';有结果
因为 like 匹配整个列,也就是说,所有列中,某一列为 1000才符合条件,才会被选中,此例中就是 说满足条件的是且只能是 1000,因为没用通配符,所以它只匹配自己。
而 regexp 是匹配每一列的值,只要该列的值满足条件,那么就可以。此例中要想达到like的效果,
需要如下改进 regexp '^1000$'
concat 拼接 ,被拼接对象之间用 , 分隔。
as 使用别名(又叫 导出列)
select concat(vend_name,'【',vend_country,'】') as name from vendors ;
结果
ACME【USA】
trim rtrim ltrim 去掉空格(左右两端空格,右边空格,左边空格)
select * from testnull where trim(name) = 'xi';
testnull 表中有一行数据 name = ' xi '
计算
select prod_id,quantity,item_price,quantity*item_price as expanded_price from orderitems;
对字符串进行操作
upper lower trim substring length
**substring(name,1,4) ** 三个参数
处理日期的函数
日期格式 yyyy-mm-dd (eg:2000-01-01)
adddate增加一个日期
addtime 增加一个时间
curtdate 返回当前日期
curtime 返回当前时间
year 返回日期的年部分
month 返回日期的月份部分
day 返回日期的天部分
hour 返回时间的时部分
minute 返回时间的分部分
second 返回时间的秒部分
date 返回日期时间的日期部分
time 返回日期时间的时间部分
now返回当前时间
datediff两个日期的时间差
date_format 返回一个格式化的日期或时间串
数值函数
abs绝对值
mod 余数
pi 圆周率
rand 随机数
sqrt 平方根
sin cos tan
聚集函数
avg 平均数
count 行数
max最大值
min最小值
sum 和
分组
group by
分组 的重要规定
1. group by 子句可以包含任意数目的列(虽然我们应该用一个)
2. 如果 group by 子句中嵌套了分组,那么数据最后规定的分组上进行汇总
3. group by 子句列出的每个列必须是检索列或有效的表达式(但不能是聚合函数).如果在select中使用了表达式,则必须在group by 子句中指定相同的表达式。不能使用别名
4. 除聚集函数外,select 语句中的每个列都必须在group by子句中给出(也就是说,select后面的字段,要么做聚集函数的参数,被聚集函数使用,要么就必须出现在grgoup by 子句中)
5. 如果分组中列具有NULL 值,那么NULL 将作为一个分组返回。如果含有多个NULL那么他们将作为一个分组。
6. group by 子句必须在 where 子句之后,order by 之前
having 过滤分组
having 类似 where 都具有筛选的作用,只是一个筛选组,一个筛选行
where 大部分子句都可以用于having
select vend_id from products where vend_id > 1002 group by(vend_id) having vend_id >= 1003 order by vend_id desc limit 3;
字句顺序
select ... from ... where ... group by ... having ... order ... limit ...
where 字句 用于对数据库原始数据集进行筛选,而having 用于对经过group by以后的数据集进行筛选。
mysql 回顾的更多相关文章
- mysql 回顾小练习
Student(id,sname,age,sex) 学生表 Course(id,cname,t_id) 课程表 SC(s_id,c_id,score) 成绩表 Teacher(id,Tname) 教师 ...
- MySQL回顾
一. 对数据库的操作 1. 创建一个库 create database 库名 create database 库名 character set 编码 创建带有编码的 查看编码: 2. 删除一个库 dr ...
- MySQL 基础回顾
mysql 回顾 数据库的设计必须满足三范式 1NF: 强调列的原子性,列不可拆分 eg: 一张表(联系人) 有(姓名,性别,电话)三列,但是现实中电话又可分为家庭电话和公司电话,这种表结构设计就不符 ...
- Mysql学习笔记(八)由触发器回顾外键约束中的级联选项
近些天都没有写博客.在学习mysql的知识,通过学习和练习,也熟悉了mysql的函数.触发器.视图和存储过程.并且在实际的开发过程中也应用了一小部分.效果还是十分理想的. 今天晚上在学习触发器模仿in ...
- 回顾:Linux环境 Mysql新建用户和数据库并授权
回顾:Linux环境 Mysql新建用户和数据库并授权 一.新建用户 //登录Mysql @>mysql -u root -p @>密码 //创建用户 mysql> insert i ...
- MySQL多表查询回顾
----------------------siwuxie095 MySQL 多表查询回顾 以客户和联系人为例(一对多) 1.内连接 /*内连接写法一*/ select * from t_custom ...
- SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )
SQL 先说点废话,很久没发文了,整理了下自己当时入门 SQL 的笔记,无论用于入门,回顾,参考查询,应该都是有一定价值的,可以按照目录各取所需.SQL数据库有很多,MySQL是一种,本文基本都是SQ ...
- 快速回顾MySQL:简单查询操作
利用空闲时间花几分钟回顾一下 7.1 检索数据 为了查询出数据库表中的行(数据),使用SELECE语句. 格式: # 第一种 SELECT * FROM <table_name>; # 第 ...
- MySQL快速回顾:数据库和表操作
前提要述:参考书籍<MySQL必知必会> 利用空闲时间快速回顾一些数据库基础. 4.1 连接 在最初安装MySQL,可能会要求你输入一个管理登录(通常为root)和一个口令(密码). 连接 ...
- 回顾MySql的一些基本的增删改查
---恢复内容开始--- 回顾数据库的一些简单的增删查改的操作语法与注意点,来自菜鸟教程https://www.runoob.com/mysql/mysql-tutorial.html 关于数据库的操 ...
随机推荐
- Django的select_related 和 prefetch_related 函数优化查询
在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能.本文通过一个简单的例子详解这两个函数的作用.虽然Q ...
- phalcon断点调试(phpStorm+xdebug)
1.下载并添加chrome插件xdebug helper,下载地址:http://www.downcc.com/soft/261091.html 2.php添加xdebug扩展 mkdir -p /u ...
- 类似openDialog的弹窗
html <modal title="这里是标题" hidden="{{modalHidden}}" bindconfirm="modalCon ...
- 微信小程序中使用iconfont/font-awesome等自定义字体图标
小程序不能识别外部字体文件,但是转换成Base64就可以使用字体图标了. 以阿里巴巴的iconfont为例 1.下载图标 先去官网下载喜欢的图标==> 下载解压后的文件夹==> 2.在线转 ...
- c# 值类型与引用类型的传参(形参与实参)
形参是指被调用方法中的参数 实参是指传递给方法的参数 (1)值类型传参是按值传递 值类型传参,形参接受到的是实参的一个副本,即形参发生变化,实参不会发生任何变化 (2)引用类型参数按值传递 当参数传递 ...
- zepto引用touch模块后,click失效
近日,有个拼图小活动,引用了zepto,以及zepto的touch模块. 在拼图结束之后,进行抽奖的活动,该抽奖结果是以弹框展示. 这里的关闭按钮需要添加点击事件: $(document.body). ...
- python学习笔记_week18
note 1.JS 正则 test - 判断字符串是否符合规定的正则 rep = /\d+/; rep.test("asdfoiklfasdf89asdfasdf") # true ...
- 【ASP.NET 进阶】Flv视频文件在线播放示例
最近要做个播放Flv文件的东东,网上找到一个合适的,效果如下(GIF录制软件不太好,差不多就是这样子,不过在浏览器上很流畅,具体代码可以看源代码): 源代码:FlvVideoSee.zip 问题说明: ...
- 01.VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...
- ThinkPHP同时操作多个数据库
除了在预先定义数据库连接和实例化的时候指定数据库连接外,我们还可以在模型操作过程中动态的切换数据库,支持切换到相同和不同的数据库类型.用法很简单, 只需要调用Model类的db方法,用法: $this ...