mysql之DQL
来源:互联网 发布:java游戏编程书 编辑:程序博客网 时间:2024/06/06 02:12
数据查询语句
select 字段 as 别名 from 表达式 where 条件 group by 分组 having 分组条件 order by 排序 limit 限制 ;
输出项 包括 "表达式或字段或字段别名"
字段或表达式 as 别名;
all 和distinct
all 不消除重复 默认值
distinct 消除重复
from 数据源1,数据源2;
where字句 对数据源进行删选的字句
算术运算符 + - * / %
比较运算符 > >= < <= =(等于)
比较运算符 and or not
select count(name) as 数量 from tab_option group by name having ;
is运算符: 空值和布尔值的判断
xxx is null
xxx is not null;
xxx is true
xx is false;
所谓bool值
between 运算符: 用于判断某个字段的数据值是否在某个给定的范围
适用于数字类型;
xx between 值1 and 值2;
含义:
xx自读啊的值在给定"值1"和"值2"之间
in 运算符: 给定确定数据的范围判断
语法:
xx in (值1,值2,值3,...)
like运算符: 模糊查询
语法:
XX like
eg:select * from tab_option where name like 'y%' ;
实现对字符串的某种特征信息的模糊查找.
它其实依赖于2个特殊的"符号":
% : 它代表"任何个数的任何字符"
_ : 它代表"一个字符";
nam like '%罗%'; 表示name中 "罗" 这个字的所有数据行
name like '罗%'; // 以罗开头的所有数据行
name like '%罗'; // 以罗结尾的所有字符
一个新的问题:
如果我要找某个字段中含"%"(或_)的行,怎么办?
运用转义知识.
XX like %\%%'; 表示XX中含有百分号(%)这个字符的所有行
\% 表示xx中的%号
group by 字句: 分组
形式:
group by 字段1 [desc|asc], 字段2 [desc|asc],....
说明:
1. 分组是对"前述"已经找出的数据(即 where子句 已经删选过的数据),按照某种标准
进行排序.
2. 标准就是指字段,即根据字段进行分组,可以同时指定其 "排序方式":
desc:倒序,asc: 升序
什么叫做分组:
分组的结果,一定要理解为:只有一个个组了
则结果是:在select语句中的"输出"部分,
只应该出现组信息,
不能说这个组的名称是什么,
也不能说他的价格,
也不能说出它的类型,
但可以确定
select 组信息1,组信息2,... from 数据源 group by 字段;
我们可以对组信息进行
最大值: max(字段名);
最小值: min(字段名);
平均值: avg(字段名);
cunt(*):每一组的个数
sum : 求和
对组的删选
having的作用跟where完全一样,
但其只对"分组的结果数据"进行删选;
eg:
select pingpai,count(*) as 数量,max(price) as
最高价,min(price) as 最低价 avg(price) as 平均价
from product group by pingpai having count(*)>2
order by 子句
它用于将前面"取得"的数据以设定的标准(字段)来进行排序以输出结果
形式:
order by 字段 [asc|desc]
说明:
1, 对前面的结果数据以指定的一个或多个字段排序;
2. 多个字段的排序,都是在前一个字段排序基础上,如果还有"相等值",就继续以后后续字段.
limit 子句
含义:
它用于将"前述取得的数据", 按指定的行取出来
形式:
limit 起始行号,要取出的行数.
说明:
1. 起始行号都是从0开始算起;
2. 起始行号跟数据中的任何一个字段,没有关系
3. 要取出的行数也是一个数字
4. 有一个简略形式:limit 行数,表示直接从第0行开始
对整个select语句的一些总结
从from的数据源中获得"所有数据",然后使用where对这些数据进行"筛选",然后对筛选的数据进行
分组 ,having负责在这些分组中,挑选出一组合适的数据,order by 对这些分组的数据进行排序,将排序过后的数据源
进行挑选出指定的行数,这是最终的数据源,然后from前面的对这个最终的数据源进行处理.
连接查询
基本概念:
就是将两个或两个以上的表,"连接起来",当做一个数据源,并从中取得所需要的数据
到底怎么连接?
对接完的行个数 = 表1的行数 X 表2的行数
select * from 表1,表2;
select * from 表1 join 表2;
select * from 表1 cross join 表2;
连接的基本形式
表1 [链接形式] join 表2 [on 连接条件]
如果是3个表,则进一步 扩展为:
表1 [连接形式] join 表2 [on 连接条件] [连接形式] join 表3 [on 连接条件];
交叉连接:
对于表1(n1个字段,n2行),表2(m个字段,m2行)
n1+m1个列;
n2*m2个列;
内连接:
select * from inner join 表2 on 连接条件
内连接就是找出普通连接中有效的数据.
select * from product inner join product_type on product product.typeid = product_type.id;
结果就将普通连接中的无效数据连接在一起了.
而连接条件,就是,我们之前所设置的外键.
但并不是有外键才能使用
左外连接:
含义就是将两个表的内连接结果,再"加上"左边表的不符合内连接所设定
的条件 的条目.
形式:
表1 (左边) left outer join 表2(右边) on 连接条件
右外连接:
表1 (左边) right outer join 表2(右边) on 连接条件
结果集是,表1和表2的内连结果 + 右边表中没有匹配上的数据项
全外连接:
mysql 不支持
即内连接结果 + 左表中不匹配的数据 + 右表中不匹配的数据.
子查询
基本含义:
一个select语句,就是一个查询语句;
select 字段或表达式 from 数据源 where xx 条件判断;
可以在下面这集中奇光下出现子查询
select 字查询 from 子查询 wher 子查询
exists 的查询
形式:
where exists(子查询);
含义:
该子查询如果有"数据", 则exists的结果是true
联合查询: union
基本概念:
将两个查询语句的结果,以 "上下堆叠"的方式,合并为一个查询结果
语法形式:
select 语句1
union [all | distinct]
select 语句2
自动消除重复行,默认是distinct的
如果想要将所有数据都显示(允许重复行),就用
all.
select * from join2
union
select * from join1 order by id2 desc;
正确的和order by使用.
select 字段 as 别名 from 表达式 where 条件 group by 分组 having 分组条件 order by 排序 limit 限制 ;
输出项 包括 "表达式或字段或字段别名"
字段或表达式 as 别名;
all 和distinct
all 不消除重复 默认值
distinct 消除重复
from 数据源1,数据源2;
where字句 对数据源进行删选的字句
算术运算符 + - * / %
比较运算符 > >= < <= =(等于)
比较运算符 and or not
select count(name) as 数量 from tab_option group by name having ;
is运算符: 空值和布尔值的判断
xxx is null
xxx is not null;
xxx is true
xx is false;
所谓bool值
between 运算符: 用于判断某个字段的数据值是否在某个给定的范围
适用于数字类型;
xx between 值1 and 值2;
含义:
xx自读啊的值在给定"值1"和"值2"之间
in 运算符: 给定确定数据的范围判断
语法:
xx in (值1,值2,值3,...)
like运算符: 模糊查询
语法:
XX like
eg:select * from tab_option where name like 'y%' ;
实现对字符串的某种特征信息的模糊查找.
它其实依赖于2个特殊的"符号":
% : 它代表"任何个数的任何字符"
_ : 它代表"一个字符";
nam like '%罗%'; 表示name中 "罗" 这个字的所有数据行
name like '罗%'; // 以罗开头的所有数据行
name like '%罗'; // 以罗结尾的所有字符
一个新的问题:
如果我要找某个字段中含"%"(或_)的行,怎么办?
运用转义知识.
XX like %\%%'; 表示XX中含有百分号(%)这个字符的所有行
\% 表示xx中的%号
group by 字句: 分组
形式:
group by 字段1 [desc|asc], 字段2 [desc|asc],....
说明:
1. 分组是对"前述"已经找出的数据(即 where子句 已经删选过的数据),按照某种标准
进行排序.
2. 标准就是指字段,即根据字段进行分组,可以同时指定其 "排序方式":
desc:倒序,asc: 升序
什么叫做分组:
分组的结果,一定要理解为:只有一个个组了
则结果是:在select语句中的"输出"部分,
只应该出现组信息,
不能说这个组的名称是什么,
也不能说他的价格,
也不能说出它的类型,
但可以确定
select 组信息1,组信息2,... from 数据源 group by 字段;
我们可以对组信息进行
最大值: max(字段名);
最小值: min(字段名);
平均值: avg(字段名);
cunt(*):每一组的个数
sum : 求和
对组的删选
having的作用跟where完全一样,
但其只对"分组的结果数据"进行删选;
eg:
select pingpai,count(*) as 数量,max(price) as
最高价,min(price) as 最低价 avg(price) as 平均价
from product group by pingpai having count(*)>2
order by 子句
它用于将前面"取得"的数据以设定的标准(字段)来进行排序以输出结果
形式:
order by 字段 [asc|desc]
说明:
1, 对前面的结果数据以指定的一个或多个字段排序;
2. 多个字段的排序,都是在前一个字段排序基础上,如果还有"相等值",就继续以后后续字段.
limit 子句
含义:
它用于将"前述取得的数据", 按指定的行取出来
形式:
limit 起始行号,要取出的行数.
说明:
1. 起始行号都是从0开始算起;
2. 起始行号跟数据中的任何一个字段,没有关系
3. 要取出的行数也是一个数字
4. 有一个简略形式:limit 行数,表示直接从第0行开始
对整个select语句的一些总结
从from的数据源中获得"所有数据",然后使用where对这些数据进行"筛选",然后对筛选的数据进行
分组 ,having负责在这些分组中,挑选出一组合适的数据,order by 对这些分组的数据进行排序,将排序过后的数据源
进行挑选出指定的行数,这是最终的数据源,然后from前面的对这个最终的数据源进行处理.
连接查询
基本概念:
就是将两个或两个以上的表,"连接起来",当做一个数据源,并从中取得所需要的数据
到底怎么连接?
对接完的行个数 = 表1的行数 X 表2的行数
select * from 表1,表2;
select * from 表1 join 表2;
select * from 表1 cross join 表2;
连接的基本形式
表1 [链接形式] join 表2 [on 连接条件]
如果是3个表,则进一步 扩展为:
表1 [连接形式] join 表2 [on 连接条件] [连接形式] join 表3 [on 连接条件];
交叉连接:
对于表1(n1个字段,n2行),表2(m个字段,m2行)
n1+m1个列;
n2*m2个列;
内连接:
select * from inner join 表2 on 连接条件
内连接就是找出普通连接中有效的数据.
select * from product inner join product_type on product product.typeid = product_type.id;
结果就将普通连接中的无效数据连接在一起了.
而连接条件,就是,我们之前所设置的外键.
但并不是有外键才能使用
左外连接:
含义就是将两个表的内连接结果,再"加上"左边表的不符合内连接所设定
的条件 的条目.
形式:
表1 (左边) left outer join 表2(右边) on 连接条件
右外连接:
表1 (左边) right outer join 表2(右边) on 连接条件
结果集是,表1和表2的内连结果 + 右边表中没有匹配上的数据项
全外连接:
mysql 不支持
即内连接结果 + 左表中不匹配的数据 + 右表中不匹配的数据.
子查询
基本含义:
一个select语句,就是一个查询语句;
select 字段或表达式 from 数据源 where xx 条件判断;
可以在下面这集中奇光下出现子查询
select 字查询 from 子查询 wher 子查询
exists 的查询
形式:
where exists(子查询);
含义:
该子查询如果有"数据", 则exists的结果是true
联合查询: union
基本概念:
将两个查询语句的结果,以 "上下堆叠"的方式,合并为一个查询结果
语法形式:
select 语句1
union [all | distinct]
select 语句2
自动消除重复行,默认是distinct的
如果想要将所有数据都显示(允许重复行),就用
all.
select * from join2
union
select * from join1 order by id2 desc;
正确的和order by使用.
0 0
- mysql之DQL
- MySQL之DDL,DQL,DML,DCL
- MySQL数据库之单表的DQL
- MYSQL操作之DML和DQL
- Mysql的数据查询语言DQL之基本查询
- Mysql的数据查询语言DQL之连接查询
- MySql学习笔记(一)之DQL常用查询
- mysql DQL exercise
- MySQL-DQL篇
- MYSQL基础(DQL)
- Mysql中的DQL查询语句
- Mysql笔记——DQL
- MySql的DQL语句,查询
- MYSQL基本查询语句DQL
- [Mysql]数据查询语言(DQL)
- mysql--数据查询语言DQL
- DQL
- DQL
- 公约数2
- Android 获取应用数字签名
- Android JSON解析(JSONObject和JSONArray)
- 基于ES6,使用React、Webpack、Babel构建模块化JavaScript应用
- iOS 文本处理 ----- 两行文本后面添加 ... 查看更多
- mysql之DQL
- 初探的嫩芽(2)
- 使用VC++6.0操作EXCEL
- AES加解密JS和php互相处理字符
- Andriod初体验-小白一天中遇到的坑
- big three三大函数:拷贝构造拷贝赋值析构函数
- Android开源库集合(点击各标题可进入GitHub查看)
- Linux命令格式和帮助
- ListActivity的使用方法