西西老师博客菜鸟教程

一、符号

注释:
使用双中划线,-- xxx

通配符:
一般用作条件,查询或修改某字段对应的值

  • %:占位符,代表任意长度,任意内容;举例:like %xxx%
  • _:占位符,代表一个长度,任意内容;举例:like x_
  • like:模糊匹配;举例:
  • like ‘s%’:模糊匹配以s开头任意长度、任意内容的值
  • like ‘s_’:模糊匹配s后一个长度、任意内容的值
  • like ‘%s%’:模糊匹配s两头任意长度、任意内容的值
  • or:两个以上或条件;举例:name = ‘张三’ or age = 18
  • and:两个以上与条件;举例:name = ‘张三’ and age = 18
  • in:两个以上包含条件;举例:age in(1,3,6)

二、查询:SELECT

  • 常用基本查询
select * from 表名
select 字段1,字段2... from 表名
  • where:查询条件约束
select * from 表名 where 字段名=‘值’
  • limit:查询个数约束(分页)
select * from 表名 limit 2

limit 2:查询count限制n数据
limit 1,2:查询下标1~2的数据
limit 0,-1:查询所有数据,高版本已不可用
  • count:表的行数查询
select count(*) from 表名
  • distinct:不重复的行数查询(去重查询)
-- 写法1
select count(distinct 字段名) from 表名

-- 写法2,省略count()
select distinct 字段名 from 表名
  • length:查询约束长度

value是中文的情况下查询时需注意:

  • 在utf-8编码下,一个汉字占3个长度;
  • 在gbk编码下,一个汉字占2个长度;
  • 在Oracle的gbk编码下,一个汉字占1个长度
-- 如果值是纯中文,以下语句查询到的会是2个汉字以上的条件
select * from 表名 where length(字段名) >= 6

-- aCHAR_LENGTH() 能够做到一个汉字一个字符,以下语句查询到的是6个汉字或字符以上的条件
select * from 表名 where char_length(字段名) >= 6

三、插入:INSERT INTO

注意:不可空字段是必传的

  • 字段名与值一一对应
insert into 表名(字段1, 字段2 ...) value(字段1值, 字段2值 ...)
  • 无关字段名,必须传入所有字段
insert into 表名 value(字段1值,字段2值 ...)

四、修改:UPDATE

  • 无条件修改所有该字段的值
update 表名 set 字段 = 值
  • 加条件修改某字段的值
update 表名 set 字段1=字段1值 where 字段2=字段2值 or 字段3=字段3值

五、删除:DELETE

  • 清空表
delete from 表名
  • 加条件删除字段
delete from 表名 where 字段1=字段1值

六、高级用法

一、别名:AS
别名不修改原字段,只是在查询结果中显示,一旦拥有别名,必须使用 别名.字段

-- 表别名
select 字段 from 表名 as xxx
select xxx.字段1, xxx.字段2 from 表名 as xxx

-- 字段别名
select 字段1 as 别名1, 字段2 别名2 from 表名

二、时间

-- yyyy-MM-dd HH:mm:ss
select NOW()
select SYSDATE()

-- yyyy-MM-dd
select CURRENT_DATE

三、排序:ORDER BY
(asc是升序(默认),desc是降序)

-- 升序
select 字段 from 表名 order by 字段条件

-- 降序
select 字段 from 表名 order by 字段条件 desc

四、分组:GROUP BY

select 字段 from 表名 group by 字段条件

五、区间:BETWEEN、OR、IN

-- BETWEEN,查询区间的值
select 字段 from 表名 where 字段条件 between ‘start值’ AND ‘end值’

-- OR,查询符合的其中一个值 
select 字段 from 表名 where 字段1=字段1值 or 字段2=字段2值

-- IN,查询包含的值
select 字段 from 表名 where 字段条件 in(1, 3, 5)

六、聚合函数

  • SUM:总数
select sum(字段) from 表名
  • AVG:平均数
select avg(字段) from 表名
  • MAX:最大值
select max(字段) from 表名
  • MIN:最小值
select min(字段) from 表名

七、连表查询

内连接:单表查询

外连接:多表查询

  • where
-- 内连接
select * from a表名 where id = 1

-- 外连接
select * from a表名, b表名 
where a.id = b.aid
  • inner join:相连的表均有同一个字段,返回结果

使用场景:对所有数据的完整性要求较高,不允许出现空数据时使用

举例:a(1、2、3、4) b(1、3、4、5),结果(1、3、4)

select * from a表名 
inner join b表名
on a.id = b.aid
  • left join:罗列左表所有数据,右表关联数据显示,未关联数据显示NULL

使用场景:以父级表id,查询每条数据所关联的每一条子级数据,子级无数据显示NULL

举例:a(1、2、3、4) b(1、3、4、5),结果(1、2、3、4)

select * from a表名 
left join b表名
on a.id = b.aid
  • right join:罗列→表所有数据,左表关联数据显示,未关联数据显示NULL

使用场景:快速检索与上一级表关联脱钩的数据

举例:a(1、2、3、4) b(1、3、4、5),结果(1、3、4、5)

select * from a表名 
right join b表名
on a.id = b.aid

tips:

  1. 不允许有遗漏数据时,不可使用inner join
  2. 别名不修改原字段,只是在查询结果中显示,一旦拥有别名,必须使用 别名.字段