基本查询
格式:select
[ all | distinct ]
<目标列的表达式1>[别名],
<目标列的表达式2>[别名]...
from <表名或视图名>[别名],<表名或视图名>[别名]...
[ where <条件表达式>]
[ group by <列名>
[ having <条件表达式>]]
[ order by <列名>[ asc | desc ]]
[ limit <数字或者列表>];
简化版语法
select * I 列名 from 表 where
别名查询
表名和列名都可以取别名,关键字as(可省略)
表名:select *from 表名 as sth
列名:select 列名as sth from 表名
去重查询:关键字distinct
select distinct * from 表名
运算查询
算数运算
算术运算符 | 说明 |
+ | 加法运算 |
- | 减法运算 |
* | 乘法运算 |
/或 DiV | 除法运算,返回商 |
%或 MOD | 求余运算,返回余数 |
比较运算
比较运算符 | 说明 |
= | 等于 |
<和<= | 小于和小于等于 |
>和>= | 大于和大于等于 |
<=> | 安全的等于,两个操作码均为 NULL 时,个操作码为 NULL 时,其所得值为0 |
<>或!= | 不等于 |
IS NULL 或 ISNULL | 判断一个值是否为 NULL |
IS NOT NULL | 判断一个值是否不为 NULL |
least | 当有两个或多个参数时,返回最小值 |
greastest | 当有两个或多个参数时,返回最大值 |
between and | 判断一个值是否落在两个值之间 |
IN | 判断一个值是 IN 列表中的任意一个值 |
NOT IN | 判断一个值不是 IN 列表中的任意一个值 |
LIKE | 通配符匹配 |
regexp | 正则表达式匹配 |
逻辑运算
逻辑运算符 | 说明 |
not或! | 逻辑非 |
and或&& | 逻辑与 |
or或|| | 逻辑或 |
xor | 逻辑或异 |
位运算符
位运算符 | 说明 |
| | 按位或 |
& | 按位与 |
^ | 按位异或 |
<< | 按位左移 |
>> | 按位右移 |
~ | 按位取反,反转所有比特 |
注:位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二然后再将计算结果从二进制数变回十进制数。
位与 同则留,异为0
select 3&5 ---1
3 0011
5 0101
---------
0001
位或 遇1则为1
select 3|5 ---7
3 0011
5 0101
---------
0111
位异或 相同为0,不同为1
select 3^5 ---6
3 0011
5 0101
---------
0110
位左移
select 3<<1
0011 <<1 ------>0110
位右移
select 3>>1
0011 >>1 ------>0001
位取反
select ~3
条件查询 关键词:where
例:select *from 表名 where 列名=***;
使用least求最小值
select least(10,11,23);----10
select least(10,null,23);---null
使用greastest求最大值
select greastest (10,11,23);-----23
select greastest (10,null,23);---null
注:使用least求最小值,greastest求最大值,遇见null,结果为null
查询以'A'字开头的所有商品
select *from 表名where列名 like'A%';
查询含有'A'字的所有商品
select *from 表名where列名 like'%A%';
查询第二个字为'A'字的所有商品
select *from 表名where列名 like'_A%';
查询价格是200或800的所有商品
select * from 表名 where price in(200,800);
select * from 表名 where price=200or price=800;
select * from 表名 where price =200||price=800;
排序查询
基本格式
select
字段名1,字段名2,……
from 表名
order by 字段名1 [asc|desc],字段名2[asc|desc]..
. 特点
1.asc代表升序,desc代表降序,如果不写默认升序
2.order by用于子句中可以支持单个字段,多个字段,表达式,函数,别名
3.order by子句,放在查询语句的最后面。LIMIT子句除外
-- 1.使用价格排序(降序)
select * from product order by price desc;
--2.在价格排序(降序)的基础上,以分类排序(降序)
select * from product order by price desc,category_id desc;
显示商品的价格(去重复),并排序(降序)
select distinct price from product order by price desc;
聚合查询
是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;
另外聚合函数会忽略空值。
聚合函数 | 作用 |
count() | 统计指定列不为NULL的记录行数; |
sum() | 计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0 |
max() | 计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算; |
min() | 计算指定列的最小值, 如果指定列是字符串类型,那么使用字符串排序运算; |
avg() | 计算指定列的平均值, 如果指定列类型不是数值类型,那么计算结果为0 |
例:select max(列名)from 表名;
聚合查询﹣ NULL 值的处理
1、 count 函数对 null 值的处理
如果 count 函数的参数为星号(*),则统计所有记录的个数。而如果参数为某字段
不统计含 null 值的记录个数。
2、 sum 和 avg 函数对 null 值的处理
这两个函数忽略 null 值的存在,就好象该条记录不存在一样。
3、 max 和 min 函数对 null 值的处理
max 和 min 两个函数同样忽略 null 值的存在。
分组查询
分组查询是指使用group by字句对查询信息进行分组。
格式:
select 字段1,字段2...
from 表名 group by 分组字段 having 分组条件;
操作
-- 1 统计各个分类商品的个数
select category_id ,count(*) from product group by category_id ;
如果要进行分组的话,则select子句之后,
只能出现分组的字段和统计函数,其他的字段不能出现;
分组之后的条件筛选﹣having
>分组之后对统计结果进行筛选的话必须使用having,不能使用where
>where子句用来筛选from子句中指定的操作所产生的行
> group by 子句用来分组where 子句的输出。
having 子句用来从分组的结果中筛选行
格式
select 字段1,字段2... from 表名 group by 分组字段 having 分组条件;
. 操作
--2.统计各个分类商品的个数◇且只显示个数大于4的信息
select category_id,count(*) from product group by category_id having count(*) >1;
分页查询 imit
数据量很大,显示屏长度有限,因此对数据需要采取分页显示方式。例如数据共
有30条,每页显示5条,第一页显示1-5条,第二页显示6-10条。
格式
--方式1﹣显示前 n 条
select 字段1,字段2... from 表明 limit n
--方式2﹣分页显示
select 字段1,字段2... from 表明 limit m , n
m :整数,表示从第几条索引开始,计算方式(当前页﹣1)*每页显示条数
n :整数,表示查询多少条数据
操作
--查询 product 表的前5条记录
select * from product limit 5
--从第4条开始显示,显示5条
select * from product limit 3,5
--第m页
select * from product limit (m-1)*n,n;
例:查询第3页,每页显示60条内容
select * from product limit 120,60;
select * from product limit (3-1)*60,60;
insert into select 语句
将一张表的数据导入到另一张表中,可以使用 INSERT INTO SELECT 语句。
.格式
inset intoTable2( fieldl ,field2,……) select valuel ,value2,…… from Tablel1
或者:
insert into Table2 select * from Tablel1
要求目标表Table2必须存在