mysql学习之完整的select语句分分快三全天计划网站

作者:分分快三全天计划网站

 

高级删除

Delete from student where name = 'jake' limit 10;

删除:如果表中存在主键自增长,那么删除之后,自增长不会还原

思路:数据的删除是不会改变表结构,只能删除表后重新建表
Truncate 表名:--先删除改变,再创建 重置自增长

查询数据

完整语法:
select [select 选项] 字段列表[字段别名]/* from 数据源 [where 条件子句] [group by 子句] [having 子句] [order by 子句] [limit 子句];

去重选项::

 

  • 去重选项就是是否对结果中完全相同的记录(所有字段数据都相同)进行去重:
    • all:不去重
    • distinct:去重
  • 语法:select 去重选项 字段列表 from 表名;

 

 

示例:

去重前:分分快三全天计划网站 1 ,去重后分分快三全天计划网站 2

create table student(name varchar(15),gender varchar(15));
insert into student(name,gender) values("lilei","male");
insert into student(name,gender) values("lilei","male");
select * from student;
select distinct * from student;

 

 


Limit子句

方案1,:只用来显示长度(数据量): limit 数据量
方案2:限制起始位置,限制数量:limit 起始位置,长度;
limit 0, 2;
limit 2, 2
limit 4, 2;
limit 6, 2
主要用于实现数据的分页:为用户节省时间,提交服务器的响应效率,减少资源的浪费。

对于用户来讲:可以点击的分页按钮:1,2,3,4,5
对于服务器来讲: 根据用户选择的页码来获取不同的数据:limit offset,length;
length:每一页显示的数据量:基本不变
offset:offset = (页码 - 1) *每页显示量

蠕虫复制

蠕虫复制:从已有的数据中去获取数据,然后将数据又进行新增操作,数据成倍的增加。

  • 复制表结构(从已有表创建新表)
create table 表名 like 数据库.表名;
  • 复制数据:蠕虫复制:先查出数据,然后将查出的数据新增一遍
insert into 表名[(字段列表)] select 字段列表/* from 数据表名;

蠕虫复制的意义:
1.从已有表拷贝数据到新表中
2.可以迅速的让表中的数据膨胀到一定的数量级:测试表的压力以及效率

本文内容:

  • 完整语法
  • 去重选项
  • 字段别名
  • 数据源
  • where
  • group by
  • having
  • order by
  • limit

 

首发日期:2018-04-11


Order by子句

根据某个字段进行升序或者降序

order by 字段名 【asc/desc】; -- asc是升序(默认的)

SELECT *from student order BY age ASC; 

排序可以进行多个字段排序:先根据某个字段进行排序,然后排序好的内部,在按照某个数据进行再次排序;

select student *from student order by age, score desc;

分分快三全天计划网站 3

Paste_Image.png

6. having子句

与where子句一样:进行条件判断。
where是针对磁盘数据进行判断,进入到内存之后,会进行分组操作,分组结果就需要having来处理。
having能做where能做的几乎所有事情,但是where却不能做having能做的很多事。

分组统计的结果或者说统计函数都只有having能够使用。

-- 求出所有班级人数大于等于2的学生人数
select c_id, count(*) from my_student group by c_id having count(*) >= 2;

having能够使用字段别名:where不能:where是从磁盘取数据,而名字只可能是字段名;别名是在字段进入到内存后才会产生。

select c_id, count(*) as total from my_student group by c_id having total >= 2;

数据源

数据源:数据的来源 关系型数据库的来源都是数据表:本质上只要保证数据类似二维表最终都可以作为数据源

数据源分为多中: 单表数据源,多表数据源 查询语句

多表数据源
select *from 表名1, 表名2;

子查询:
select * from (select * from 表名) as 别名;

2. 字段别名

语法:字段名 [as] 别名;
最终以别名显示查询数据结果

完整语法:

select 去重选项 字段列表 [as 字段别名] from 数据源 [where子句] [group by 子句] [having子句] [order by 子句] [limit子句];

 


gruop by子句

Group by:分组,根据某个字段进行分组,(相同的放一组,不同的分到一组 )

基本语法:group by 字段名;
分组的意思:视为了统计数据(按组统计:按分组字段进行数据统计);
SQL:提供了一些列的统计函数:
count(): 统计分组后的记录数;每一组有多少记录
Max(): 统计每一组的最大的值
Min():统计最小的值
Avg():统计平均数
Sum:统计和

select sex, count(*), max(height), min(height), avg(age), sum(age) from student group by sex;

5. group by子句

分组,根据某个字段进行分组
基本语法:group by 字段名;
SQL提供了一系列统计函数:

  • count():统计分组后的记录数,每一组有多少记录
  • max():统计每组中的最大值
  • min():统计最小值
  • avg():统计平均值
  • sum():统计和
-- 按性别分组统计:身高高矮,年龄平均,总年龄
select sex, count(*), max(height), min(height), avg(age), sum(age) from my_student group by sex;

count函数:里面可以使用两种参数:*代表统计记录,字段名代表统计对应的字段(除了null的个数)。

分组会自动排序:根据分组字段:默认升序
group by 字段 [asc|desc];

多字段分组:先根据一个字段进行分组,然后对分组后的结果再按照其它字段进行分组

-- 多字段分组:先班级,后男女
select c_id, sex, count(*) from  my_student group by c_id, sex;

group_concat()函数:
可以对分组的结果中的某个字段进行字符串连接(保留该组所有的某个字段)

select c_id, sex, count(*), group_concat(name) from my_student group by c_id, sex;

回溯统计:with rollup:任何一个分组后都会有一个小组,最后都需要向上级分组进行汇报统计,根据当前分组的字段,这就是回溯统计,回溯统计的时候将分组字段置空。
多字段回溯:考虑第一层会有此回溯,第二次分组要看第一次分组的组数,组数是多少,回溯就是多少,然后加上第一层回溯即可。

limit子句:

 

limit是用来限制结果数量的。与wherehaving等配合使用时,可以限制匹配出的结果。但凡是涉及数量的时候都可以使用limit(这里只是强调limit的作用,不要过度理解)

语法:select 字段列表 from 表名 limit [offset,] count;

  • count是数量
  • offset是起始位置,offset从0开始,可以说是每条记录的索引号

 

-- 示例
select * from student limit 1;
select * from student limit 3,1;
select * from student where name ="lilei" limit 1;
select * from student where name ="lilei" limit 3,1;

 

 

 


where子句

Where子句:用来判断数据,筛选数据
Where 子句返回的结果:0 或者1,0代表false, 1代表true

判断条件
比较运算符:> 、< 、>= 、!= 、<>(不等于) 、=  、like, between and, in/not in
逻辑运算符:&&(and), ||(or), !(not)

where原理:where是唯一一个直接从磁盘获取数据的时候就开始判断;从磁盘取出记录,开始进行where判断:判断的结果,如果判断成立保存到内容;如果失败直接放弃

select * from student WHERE id in(1,3, 5); -- 逻辑判断
select * from student WHERE id = 3 || id =5; -- 落在集合中
4. where子句

where子句返回结果:0或者1,0代表false,1代表true
判断条件:

  • 比较运算符:>, <, >=, <=, !=, <>, =, like, between and, in/not in
  • 逻辑运算符:&&(and), ||(or), !(not)

where是唯一一个直接从磁盘获取数据的时候就开始判断的条件。
条件查询1:要求找出学生id为1或者3或者5的学生

select * from my_student where id = 1 || id = 3 || id = 5;
select * from my_student where id in(1, 3, 5);
-- 以上两条语句等价

条件查询2:查出区间落在180,190身高之间的学生。

select * from my_student where height >= 180 and height <= 190;
select * from my_student where height between 180 and 190;
-- 以上两条语句等价

between本身是闭区间,between左边的值必须小于或者等于右边的值。

order by 子句:

 

order by 可以使查询结果按照某个字段来排序

语法:select 字段列表 from 表名 order by 字段 [asc|desc];

  • 字段可以有多个,从左到右,后面的排序基于前面的,(比如:先按name排序,再按gender排序,后面的gender排序是针对前面name排序时name相同的数据)
  • asc代表排序是递增的
  • desc代表是递减的
  • 也可以指定某个字段的排序方法,比如第一个字段递增,第二个递减。只需要在每个字段后面加asc或desc即可(虽然默认不加是递增,但还是加上更清晰明确)。

 

-- 示例
select * from student order by name;
select * from student order by name,gender;
select * from student order by name asc,gender desc;

 

 


高级更新

update 表名 set 字段= 值 【 where 】;
高级新型 语法
UPDATE 表名 SET 字段 = 值 【where条件】【limit 更新数量】;

update student set name = 'jake' where name = 'xiaoming' limit 3;

1. select 选项:select对查出来的结果的处理方式
  • all:默认的,保留所有的结果
  • distinct:去重,查出来的结果,将重复给去除

补充:

实际上,group by 的作用主要是统计(使用情景很多,比如说统计某人的总分数,学生中女性的数量。。),所以一般会配合一些统计函数来使用:

  • count(x):统计每组的记录数,x是*时代表记录数,为字段名时代表统计字段数据数(除去NULL)
  • max(x):统计最大值,x是字段名
  • min(x):统计最小值,x是字段名
  • avg(x):统计平均值,x是字段名
  • sum(x):统计总和,x是字段名

group by 字段 后面还可以跟上asc或desc,代表分组后是否根据字段排序。

 


字段别名

字段别名:当数据进行查询出来的时候,有时候·名字并不一定就满足需求(多表查询会有同字段名),需要对字段名进行别名:别名
字段名【as】别名

SELECT id, mignZi as 名字, age as 年龄, score as 分数 from student;

分分快三全天计划网站 4

Paste_Image.png

8. limit子句

是一种限制结果的语句
两种方式:

  • 方案1:只用来限制长度(数据量):limit 数据量;
  • 方案2:限制起始位置,限制数量:limit 起始位置, 长度;
select * from my_student limit 0, 2;
-- 记录数是从0开始编号,从第一条数据开始取,一共取两条。

方案2主要用来实现数据分页,为用户节省时间,提交服务器的响应效率,减少资源的浪费。
对于用户来说:可以点击的分页按钮:1,2,3,4
对于服务器来讲:根据用户选择的页码来获取不同的数据:limit offset,length;
length:每页显示的数据量:基本不变
offset:offset = (页码 - 1) * 每页显示量。

where子句:

  • where子句是用于筛选符合条件的结果的。

 

where几种语法:

  • 基于值:
    • = : where 字段 =值  ;查找出对应字段等于对应值的记录。(相似的,<是小于对应值,<=是小于等于对应值,>是大于对应值,>=是大于等于对应值,!=是不等于)
    • like:where 字段 like 值 ;功能与 = 相似 ,但可以使用模糊匹配来查找结果。
  • 基于值的范围:
    • in: where 字段 in 范围;查找出对应字段的值在所指定范围的记录。
    • not in : where 字段 in 范围;查找出对应字段的值不在所指定范围的记录。
    • between x and y :where 字段 between x and y;查找出对应字段的值在闭区间[x,y]范围的记录。
  • 条件复合:
    • or : where 条件1 or 条件2… ; 查找出符合条件1或符合条件2的记录。
    • and:  where 条件1 and 条件2… ; 查找出符合条件1并且符合条件2的记录。
    • not : where not 条件1 ;查找出不符合条件的所有记录。
    • mysql学习之完整的select语句分分快三全天计划网站。&&的功能与and相同;||与or功能类似,!与not 功能类似。

 

 

高级select

基本语法
Select 字段列表/* from 表名【where条件】;
完整语法
Select [select选项] 字段列表【字段别名】/*from 数据源 【where 条件子句】【gruop by 子句】【having 子句】【order子句】【limit子句】;

  • Select选项
    Select选项:select对查出来的结果的处理方式
    All:默认的,保留所有的结果
    mysql学习之完整的select语句分分快三全天计划网站。Distinct:去重,查出来的结果,将重复给去除(所有的字段都相同);
    select * from student;
    select all * from student;

主键冲突

  • 主键冲突:更新操作(不常用)
insert into 表名[(字段列表:包含主键)] values(值列表) 
on duplicate key 
update 字段 = 新值;
  • 主键冲突:替换(常用)
replace into 表名[(字段列表:包含主键)] values(值列表);

补充:

  • where是从磁盘中获取数据的时候就进行筛选的。所以某些在内存是才有的东西where无法使用。(字段别名什么的是本来不是“磁盘中的数据”(是在内存这中运行时才定义的),所以where无法使用,一般都依靠having来筛选).

    select name as n ,gender from student where name ="lilei"; -- select name as n ,gender from student where n ="lilei"; --报错 select name as n ,gender from student having n ="lilei";

 


having子句

与where一样:进行条件判断的
where是针对磁盘数据进行判断:进入到内存之后,会进行分组处理:分组结果操作就需要having来处理;

having能做where能做的几乎所有的事情;

。。。。。

删除数据

delete from 表名 [where 条件] [limit 数量];

如果表中存在主键自增长,那么当删除之后,自增长不会还原。
如果想要自增长还原思路:
删除表后重建表

-- 清空表,重置自增长
truncate 表名;

字段别名:

 

  • 字段别名是给查询结果中的字段另起一个名字
  • 字段别名只会在当次查询结果中生效。
  • 字段别名一般都是辅助了解字段意义(比如我们定义的名字是name,我们希望返回给用户的结果显示成姓名)、简写字段名
  • 语法:select 字段 as 字段别名 from 表名;

 

示例:

使用前:分分快三全天计划网站 5,使用后分分快三全天计划网站 6

create table student(name varchar(15),gender varchar(15));
insert into student(name,gender) values("lilei","male");
insert into student(name,gender) values("lilei","male");
select * from student;
select  name as "姓名",gender as "性别" from student;

 

 


3. 数据源

数据的来源,关系型数据库的来源都是数据表,本质上只要保证数据类似二维表,最终都可以作为数据源。
数据源分为:单表数据源,多表数据源,查询语句

  • 单表数据源:select * from 表名;
  • 多表数据源:select * from 表名1,表名2...;
    从一张表中取出一条记录,去另一张表中匹配所有记录,而且全部保留。这种结果称为笛卡尔积,应该尽量避免。
  • 子查询:数据的来源是一条查询语句
    select * from (select 语句) as 表名;

having子句:

 

having功能与where类似,不过having的条件判断发生在数据在内存中时,所以可以使用在内存中才发生的数据,如“分组”,“字段别名”等。

语法:select 字段列表 from 表名 having 条件;【操作符之类的可以参考where的,增加的只是一些“内存”中的筛选条件】

 

 


7. order by子句

排序,根据某个字段进行升序或者降序排序,依赖校对集。
基本语法:order by 字段名 [asc|desc];

多字段排序:先根据某个字段进行排序,然后排序好的内部,再按照某个数据进行再次排序。

-- 先班级升序排序,后性别降序排序
select * from my_student order by c_id, sex desc;

group by 子句:

 

group by 可以将查询结果依据字段来将结果分组。

语法:select 字段列表 from 表名 group by 字段;

  • 【字段可以有多个,实际就是二次分组】分分快三全天计划网站 7

 

数据更新(限制记录)

高级更新语法

update 表名 set 字段 = 值 [where 条件] [limit 更新数量];

数据源:

 

  • 事实上,查询的来源可以不是“表名”,只需是一个二维表即可。那么数据来源可以是一个select结果。
  • 数据源可以是单表数据源,多表数据源,以及查询语句
    • 单表:select 字段列表 from 表名;
    • 多表: select 字段列表 from 表名1,表名2,…; 【多表查询时是将每个表中的x条记录与另一个表y条记录组成结果,组成的结果的记录条数为x*y】【可以称为笛卡尔积】
      • 分分快三全天计划网站 8
    • 查询语句:select 字段列表 fromr (select语句) as 表别名;【这是将一个查询结果作为一个查询的目标二维表,需要定义成一个表别名】

 

 

 


本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划 日记本 数据库 oracle的...