SQL语句基础

SQL语句

SQL分类:

DDL:数据定义语句

create,alter,drop...

DML:数据操作语句

insert(添加记录),update(修改记录中的值),delete(删除记录),select(查询语句(表中))

添加记录:INSERT

语法1:

insert into 表名 (列名1,列名2,...,列名n)

values (值1,值2,...,值n);

语法2:

insert into 表名

values (值1,值2,...,值n);

注意:

列可以按照自己的顺序来写,值必须和列一一对应

主键列:如果设定为自动增长,不指定值,默认从1开始,如果已经有数据,取上一个记录值+1,也可以根据自己需要指定值,如果赋值0或者NULL,也是表示自动增长,建议使用NULL

单表查询:

select 字段,...

from

where 行筛选

group by 分组字段

having 组筛选

order by 列排序

limit m,n取结果中的一部分行;

1.基本查询语句:

select 字段,...,字段

from 表名;

注意:

1.执行流程:from,确定表-->select,确定列

2.如果要查询所有的列,可以用*

3.对于数值,日期时间类型的列可以做算术运算,  +,-,*,/

4.查询的结果称为结果集,由行和列组成

5.在查询时,可以修改结果集中的列名,就是给列取别名:

select 列名或者表达式 [as] 别名,...

from 表名;

6.查询时,可以把多个值拼接到一起,  concat(值1,值2,...,值n)

7.null: 代表的未知的,不确定的,不是一个固定值,一种语义的描述,很特殊

表达式中如果有空值,结果还是空,如果null需要转换成某一个值:

ifnull(列或表达式,特殊值)

列或表达式为空时,结果取特殊值

8.查询去重的结果,利用distinct

select distinct 字段

from 表;

2.查询语句之排序子句:order by

语法:

order by 字段 asc|desc,...,字段 asc|desc;

注意:

1.执行流程:from,确定表-->select,确定列,结果集确定->order by,排序

2.asc:升序,  desc:降序,  如果不指定升降,默认升序

3.如果要按照多个列排序

order by 列1 asc|desc,列2  asc|desc

优先看前面的列,前面的列值相等再看下一个列

3.查询语句之行筛选子句--where

语法:

where 条件表达式

注意:

1.执行流程:from,确定表-->where,行筛选,一行一行筛选->select,列->order by,排序

2.条件运算符

    关系运算符:>,>=,<,<=,=(等于),!=,<>(不等于)

    between...and...: 在...和...之间,闭区间,包含两个端点值

    in(点值,...):在列举的值中存在

    is null:是空的, null代表未知不确定,语义表达

    判断是否是空的,不能用=,无法查询结果,只能用is null

    like:模糊查询

    通配符:_:可以代表任意一个字符            %:可以代表任意个(0,1,多个)字符

    where 列或表达式 like '通配符组合表达式'

    eg:查询名字中包含a  '%a%'

逻辑运算符:

    not,  and,  or

    与或非和Java中一样

    注意:优先级,  not>and>or

    如果判断时,可以利用()改变顺序

    not使用

    not between...and...:

    not in(点值,...):

    is not null:

    not like:

4.limit:取一部分结果

语法:

limit m,n;

注意:

1.执行流程:from->where->select->order by,排序->limit,取一部分结果

2.limit m,n: 

    m:从第m条开始, 计数从0开始计数

    n:共取多少行

    如果从0开始,m可以省略  , limit n

作用:可以实现分页效果

eg:设定一页10条

  一共有105条,需要11页

  第1页:limit 0,10

  第2页:limit 10,10

  第n页:limit (n-1)*10,10

5.查询之分组子句---group by

目的:统计时,把数据分成多块,分别统计

语法:

group by 字段,...

注意:

1.执行流程:from->where,行的筛选->group by,剩下的所有行分组->

select,对每个组做统计,一个组得到一个结果->order by,排序->limit

2.当使用group by分组时,除了查询每组统计结果,建议把分组的列查询出来,这样会更有意义

3.如果查询中涉及到组, select中使用组函数,或者使用了group by子句,不能直接查询普通的列,但可以查询分组的列

4.同时按照多个列分组,多个列值都相等才算作一组

group by 列1,列2...

函数:

mysql中内置了很多函数

单行函数:一个行得到一个结果, ifnull(), concat()

多行函数(组函数):多个行(一个组)得到一个结果, 统计函数,聚合函数

如果所有的数据没有分组,算作一组

聚合函数,组函数:

sum(列或表达式):求和

avg(列或表达式):求平均

max(列或表达式):求最大值

min(列或表达式):求最小值

count(列或表达式):统计个数

注意:

1.组函数,统计是不包括空值

2.sum(),avg()只针对数值型,其它三个可以针对任意类型

3.count()为了统计有多少行,建议统计非空列,主键最合适,还可以用count(*)

4.select中使用组函数,就不能同时查询普通的列或使用单行函数

未完待续......

你可能感兴趣的:(SQL语句基础)