1 sql基础
1.1 sql的组成部分
- sql分为DML(数据操作语言)和DDL(数据定义语言)
1.1.1DML(数据操作语言)
- a. 查询:select
- b. 更新:update set
- c. 删除:delete
- d. 插入:insert into
1.1.2 DDL(数据定义语言)
- a. 创建:create(datebase table index)
- b. 修改:alter(datebase table)
- c. 删除:drop(table index)
1.2 sql的基本语法
- sql的基本语法包括:
select
update
delete
insert
1.2.1 select语法
- select的定义:用于从表中选取数据,结果被存储在一个结果表中(结果集)
- select的基本用法:
a. 查询所有:select * from 表名
b. 查询列:select 列名 from 表名
注意:查询列名时,列名用逗号隔开,最后的列名不要加逗号
1.2.2 insert into语法
- insert into的定义:用于向表格中插入新的行
- insert into的基本用法:
a. 插入一列:insert into 表名 values(值,值...)
b. 插入指定列的数据:insert into 表名(列,列...) values(值,值...)
1.2.3 update set语法
- update set的定义:用于修改表中的数据
- update的基本用法:
a. 跟新一列数据:update 表名 set 更新内容 where 条件
b. 跟新多列数据:update 表名 set 更新内容1,跟新内容2 where 条件
1.2.4 delete语法
- delete的定义:用于删除表中的行
- delete的基本用法:
a. 删除一行: delete from 表名 where 条件
b. 删除全部: delete from 表名
1.3 sql的关键字
1.3.1 distinct关键字
- 定义:列出不同的值(在表中,可能包含重复的值,关键字distinct用于返回唯一不同的值)
- 用法:select distinct 列名 from 表名
1.3.2 where关键字
- 定义:用于条件选择
- 用法:select 列名 from 表名 where 列名 运算符 值
可以在where中使用的运算符:
= 等于
!=(<>) 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
between 在..的范围内
like 模糊查询(搜素某种模式)
注意:使用条件判断时,值是文本值请用“”,数子就不用“”。
1.3.3 连接关键字(and和or)
1.3.3.1and关键字
- 定义:在where子语句中把两个或多个条件结合起来(and的条件都成立,and运算符才会显示一条数据)
- 用法:select * from 表名 where 条件1 and 条件2
1.3.3.2 or关键字
- 定义:在where子语句中把两个或多个条件结合起来(or的条件只要有一条成立,or运算符就会显示一条数据)
- 用法:select * from 表名 where 条件1 or 条件2
1.3.4 order by关键字
- 定义:对查询结果进行排序(默认升序,在结尾使用desc关键字就是降序)
- order by的基本用法
a.(升序):select 列名 from 表名 order by 列名
b.(降序序):select 列名 from 表名 order by 列名 desc
c.(结合使用):select 列名 from 表名 order by 列名 desc 列名 asc
2.sql进阶
2.1 top子句
- 定义:top字句用于规定要放回返回的记录的数目
- 基本用法:select top 数目 * from 表名
2.2 like操作符
- 定义:用于在where字句中搜索列中的指定模式(模糊查找)
- 基本用法: select * from 表名 where 列名 like 值
注意:like可以使用通配符使用
如:%e 以e结尾的
k% 以k开头的
%f% 含有f的
not like 不包含
2.3 通配符
- 定义:在模糊查找时,可以使用通配符代替一个或者多个字符
- sql中的通配符:
% 替代一个或多个字符
_ 仅替代一个字符
[charlist] 字符列中的任意单一字符
[^charlist]([!charlist]) 不在字符列中的任意单一字符
- 通配符的使用
a. %的使用:select * from 表名 where 列名 like a% 查询以a开头的
b. _的使用:select * from 表名 where 列名 like a_ 查询以a开头的2个字符的值
c. []的使用:select * from 表名 where 列名 like [asd]% 查询以a,s或d开头的
d. [!]的使用:select * from 表名 where 列名 like [!asc]% 查询不以a,s或d开头的
2.4 in操作符
- 定义:允许在where子句中规定多个值
- 基本用法:select * from 表名 where 列名 in (value,value…)
2.5 between and操作符
- 定义:选取介于两个值之间的数据范围
基本用法:select * from 表名 where 列名 between 值 and 值
注意:在between and前面加not是不在范围内
2.5 as操作符(取别名)
- 定义:为列和表指定别名
- 基本用法:select 列名 as 别名 from 表名 as 别名
2.6 join操作符
- 定义:用于两个或多个表中的列之间的关系,从这些表中查询数据。
- join操作符有4种:
a. inner join(内连接):两个表中至少有一个匹配,则返回行
b. left join(左连接):即使右表中没有匹配,也可以从左表中返回行
c. right join(右连接):即使左表中没有匹配,也可以从右表中返回行
d. full join(外连接):只要其中一个表存在匹配/就返回行
- join的基本用法:
a. inner join(内连接):select * from 左表 inner join 右表 on 左表.列名=右表.列名
b. left join(左连接):select * from 左表 left join 右表 on 左表.列名=右表.列名
c. right join(右连接):select * from 左表 right join 右表 on 左表.列名=右表.列名
d. full join(外连接):select * from 左表 full join 右表 on 左表.列名=右表.列名
2.7 union操作符
- 定义:用于合并两个或多个select语句的结果集
基本用法:select from 表1 union select from 表2
注意:
1.union内部的select语句必须拥有相同数量的列
2.列必须拥有相同的数据类型
3.每条select语句中的列的顺序必须相同
4.union默认选取不同的值,如果允许重复,请使用union all
2.8 select into操作符
- 定义:用于创建表的备份复件或者用于对记录进行存档(从一个表中选取数据,然后把数据插入另一个表中)
- 基本用法: select * into 备份表 in ‘数据库名’ from 表
- 注意:语句中的in用于向另一个数据库中拷贝
2.9 create操作符
- 定义:用于创建数据库或表
- 基本用法:
a. 创建数据库:create datebase 数据库名
b. 创建表:
create table 表名
{
列名 数据类型,
列名 数据类型,
列名 数据类型,
......
}
- 注意:创建表时,最后的列名 数据类型不要加逗号
2.10 constraints(约束)
- 定义:用于限制加入表的数据的类型(可在create和alter语句中进行约束)
- 常用的几种约束:
not null:约束列不接受null值
unique:约束唯一标识数据库表中的每条记录
primary key:主键
foreign key:外键
check:用于限制列中的值的范围
default:用于向列中插入默认值
- 注意:命名约束要使用constraint 约束名
2.11 create index语句
- 定义:用于在表中创建索引,索引只能用来加速搜索/查询
- 基本用法:create index 别名 on 表名(列名)
2.12 drop语句
- 定义:通过drop可以删除索引,表,数据库。
- 基本用法:
a. 删除索引:alter table 表名 drop index 索引名
b. 删除数据库:drop datebase 数据库名
c. 删除表:drop table 表名
- 注意:清除表中的数据使用truncate table 表名
2.13 alter语句
- 定义:用于在已有的表中添加,修改和删除列。
- 基本用法:
a. 添加列:alter table 表名 add 列名 数据类型
b. 删除列:alter tabke 表名 drop column 列名
c. 改变列的数据类型: alter table 表名 alter column 列名 数据类型
2.14 auto_increment(自增)
- 定义:在新记录插入表中时生成一个唯一的数字
- 基本用法:
a.创建时:create table 表名{ 列名 数据类型 约束 auto_increment}
b.自增以其他值起始:alter table 表名 auto_increment=值
- 注意:zuto_increment的开始值是1
2.15 view(视图)
- 定义:视图是基于sql语句的结果集的可视化的表
- 基本用法:
a. 创建视图:create view 视图名 as select 列名 from 表名 where
b. 删除视图:drop view 视图名
c. 更新视图:create view 视图名 as select * from 表名 where 条件
2.16 date(日期)
- 日期函数:
now() 返回当前的日期和时间
curdate() 返回当前的日期
curtime() 返回当前的时间
date() 提取日期或日期/时间表达式的日期部分
extract() 返回日期/时间按的单独部分
date_add() 给日期添加指定的时间间隔
date_sub() 从日期减去指定的时间间隔
datediff() 返回两个日期之间的天数
date_format() 用不同的格式显示日期/时间
- date 数据类型:
date 格式 yyyy-mm-dd
datetime 格式 yyyy-mm-dd hh-mm-ss
timestamp 格式 yyyy-mm-dd hh-mm-ss
year 格式 yyyy或yy
2.17 null
- 定义:表中的列是可选的,我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。该字段将以 NULL 值保存。
- 基本用法:null的判断: select * from 表名 where 列 is null
3.sql函数
- 函数的类型
a. aggregate函数(合计函数):面向一系列的值,并返回一个单一的值
b. scalar函数:面向某个单一的值,并返回基于输入值的一个单一的值
3.1 avg()函数(平均値)
- 定义:AVG 函数返回数值列的平均值。NULL值不包括在计算中
- avg()语法:select avg(列名) from 表名
3.2 count()函数
- 定义:返回匹配指定条件的行数
- 基本用法:
a. count(列名)的语法: select count(列名) from 表名 返回指定列的值的数目
b. count(*)的语法:select count(*) from 表名 返回表中的记录数
c. count(distinct 列名) from 表名 返回指定列的不同值的数目
3.3 first()函数
- 定义:返回指定的字段中第一个记录的值
- 基本用法:select first(列名) from 表名
3.4 last()函数
- 定义:返回指定的字段中最后一个记录的值
- 基本用法:select last(列名) from 表名
3.5 max()函数
- 定义:返回一列中的最大值
- 基本语法:select max(列名) from 表名
3.6 min()函数
- 定义:返回一列中的最小值
- 基本语法:select min(列名) from 表名
3.7 sum()函数
- 定义:返回数值列的总数
- 基本语法:select sum(列名) from 表名
3.8 group by
- 定义:用于结合合计函数,根据一个或多个列对结果集进行分组
- 基本用法:select * from 表名 group by 列名
3.9 having
- 定义:where关键字无法和合计函数一起使用,就用having代替
- 基本用法:select 合计函数(列名) from 表名 having 合计函数条件
3.10 ucase()函数
- 定义:把字段的值转换为大写
- 基本用法: select ucase(列名) from 表名
3.11 lcase()函数
- 定义:把字段的值转换为小写
- 基本用法: select lcase(列名) from 表名
3.12 mid()函数
- 定义:用于从文本字段中提取字符
- 基本用法:select mid(列名,开始位置,返回值大小) from 表名
3.13 len()函数
- 定义:返回文本字段中值得长度
- 基本用法:select len(列名) from 表名
3.14 round函数
- 定义:用于把数值字段含入为指定的小数位数
- 基本用法:select round(列名,小数位数) from 表名(后面的小数位数会4舍5入)
3.15 now()函数
- 定义:返回当前的日期和时间
- 基本用法:select now() from 表名
3.16 format()
- 定义:用于对字段的显示进行格式化
- 基本用法:select format(列名,显示格式) from 表名