什么是SQL
Sql是访问和处理数据库的标准计算机语言。
SQL特点:结构化查询语言,访问数据库,ANSI标准计算机语言,对大小写不敏感
Sql语言可以分为DML(数据操作语言)和DDL(数据定义语言)。
DML包括
select update delete insert into
DDL 包括
create database /alter database/create table/alter table/drop table/create index/drop index等。
常见语法
查询
Select distinct 列名 from 表名 where (运算符值,AND/OR连接) order by 列名 [DESC]
解释:distinct 去掉重复条目
[DESC] 按指定的列名降序,没有默认为升序。
插入新行
Insert into 表名 values(值1,值2,…)
Insert into 表名 (列1,列2,…)values(值1,值2,…)
更新指定行
Update 表名 set 列名=新值(可以有多个)where 列名=某值
删除指定行
Delete from 表名 where 列名 = 值
删除所有行
Delete * from 表名
子句
TOP子句
规定要返回的记录数组
Select top 2 * from 表名
返回前两个记录
Select top 50 percent * from 表名
返回前50%的 记录
MYSQL特定语法:
select 列名 from 表名 limit 2
Like子句
用于在where子句中搜索列中指定模式
Select *from 表名 where 列名 [not] like (‘ ’)
可以使用通配符 %(多个字符),_(单个字符),[charlist],[!charlist].
In子句
允许在where子句中规定多个值
Select 列名 from 表名 where 列名 in (value1, value2, …)
Between子句
在where子句中选取介于两个值之间的数据
Select 列名 from 表名 where 列名 [NOT] between value1 and value2
注意是左闭右开区间
别名
Select 列名 from 表名 as 表别名
Select 列名 as 列别名 from 表名
列名 as 列别名 可能有多个,使用逗号隔开
Join子句
可以从多个表中取结果
不适用join
Select A表.列 B表.列 from A表,B表 where A表.列=B表.列
使用join
Select A表.列 B表.列 from A表 inner join B表 ON A表.列=B表.列
Left join:会从左表返回所有行,即使右表没有匹配行
Right join:会从右表返回所有行,即使左表没有匹配行
Full join:只要某个表中有匹配行,就会返回
Inner join:至少有一各匹配才返回行。
UNION子句
用于合并两个或者多个select 语句的结果集
不同select语句必须具有相同数量的列,并且赌赢列数据类型相同
Select 列名 from 表1 union [all] select 列名 form 表2
解释:默认会去掉重复值,使用[all] ,不会去掉重复值
其他功能
数据库表备份
Select into:从一个表中选取数据,插入另一表,用于创建表的备份或者用于对记录进行备份
Select 列名 into 新表名 from 表名 where 条件
创建数据库
Create database 数据库名
Create table 表名(列名 数据类型,列名 数据类型,…)
数据类型有:interger int /smallint/ tinyint /char(size)/varchar(size)/date(yyyymmdd)等。
约束
自增约束
auto_increment
非空约束
列名 数据类型 NOT NULL(非空)
唯一约束
create table 表名(列名 数据类型, … [constaint 约束名] unique (列名1,列名2,…))
解释:[constaint 约束名]可以指定约束名
增加unique约束:alter table 表名 add unique(列名,列名,…)
删除unique约束:alter table 表名 drop unique index 约束名
主键约束
primary key
外键约束
foreign key(列名) references 表名(列名)
增加外键约束:
alter table 表名 add foreign key(列名) references 表名(列名)
Check约束
对单列定义check约束,则只允许取特定的值
Check(列名>0)
默认约束
定义新表时,放在列名,数据类型后面
修改默认约束
Alter table 表名 alter 列名 set default 值
Alter table 表名 alter 列名 drop default 值
索引
创建索引
Create index 语句
用于在表中创建索引,索引可以加快查询速度
Create index 索引名 on 表名(列名)
Create unique index 索引名 on 表名(列名,[列名,…])
解释1:unique 唯一索引,两行不能有相同的索引值
解释2:[列名,…],可以使用多个列名
删除索引
Alter table 表名 drop index 索引名
删除数据库或者表
Drop database 数据库名
Drop table 表名
修改表列
Alter table 表名 add 列名 数据类型
Alter table 表名 drop column 列名
SQL view 视图
视图是基于SQL语法的结果集的可视化表
创建视图
create view 视图名 as (select 语句)
在视图中查询,和表的使用一样
更新视图
create or replace view 视图名 as(select 语句)
撤销视图
drop view 视图名
函数
平均值
Select AVG(列名) as 返回名称 from 表名
行数
COUNT(列名),count(distinct,列名) 该字段不重复的个数
取特定值
First(列)第一个记录的值,类似有 LAST(),MAX(),MIN(),SUM()
字符串操作
UCASE(列):把字段值转为大写,类似LCASE(列),MID(列,start,length)取段字符,LEN()字符长度,ROUND()四舍五入,format(列,格式)用于时间
结合计数
Group by 用于结合计数函数,根据一个或多个列对结果进行分组
Select 列名 Function(列名) from 表名 group by 列名
Having子句
因为where 子句无法与函数一起使用,增加having