sql基本语句
由于唯一的一个粉丝的要求,加上自身的反省,今天复习一下sql语言(用的是是mysql)
【】表示可无()表示必须有
数据库与表的建立
- 建立数据库 create database 数据库名称
- 使用数据库 use 数据库名称
- 建立表 create table 表名 {列名 数据类型 完整性约束条件}
- 完整性约束条件包括主键primary key、非空not null、默认值default、唯一性unqiue、外键foreign key、检查check。外键约束定义【constraint 约束名】foreign key (Cno) references course(Cno)
- 约束性条件还可以通过constraint 列名 约束条件进行定义
- 数据类型主要包括整数类型、小数类型、时间、字符串类型。复合类型(enum、set)、二进制类型。
- 其他选项设置在建立表后面进行(1)存储引擎的设置engine=存储引擎(InnoDB 或者 MyISAM)(2)字符集设置 default charset=字符集类型
- 设置自增型字段 字段名 数据类型 auto_increment 建议设置成为主键否者可能会建表失败
数据库表的操作
- 复制表结构 create table 表名 like 源表 、create table 新表名 select *from 源表
- 查看表的结构 desc 表名 或者 describe 表名 或者 show create table 表名 (查询结果比前两个更详细)
- 删除表中字段 alter table 表名 drop 字段名
- 添加新字段 alter table 表名 add 新字段名 数据类型 【约束条件】 【first|after 旧字段名】
- 修改字段名或者数据类型 alter table 表名 change 旧字段名 新字段名 数据类型 、仅对表中的数据类型进行修改 alter table 表名 modify 字段名 数据类型
- 修改约束条件 添加约束条件 alter table 表名 add constraint 约束名 约束类型 (字段名)
- 删除约束条件 主键 alter table 表名 drop primary key、外键 alter table 表名 drop foreign key 、删除唯一约束 只需删除该字段唯一索引 alter table 表名 drop index 唯一约束名
- 修改存储引擎 alter table 表名 engine= 新的存储引擎、修改表的字符集 alter table 表名default charset =新的字符集 、自增字段的初始值 alter table 表名auto_increment=新的初始值、压缩类型alter table 表名 pack_keys=新的压缩类型(pack_key只对MyISAM有效)
- 修改表名 rename table 表名 to 新表名等效于 alter table 旧表名 rename 新表名
- 删除表 drop table 表名
数据库表内记录的操作
- 使用insert into 表名 values (值列表) 向自增型 auto_increment字段插入数据是建议插入null
- 未完待续
数据库表的查询
select [all|distinct不显示重复字段] 目标表达式星号或者列号用逗号隔开两个表达式 ,【目标表达式】/*可以通过表达式空格别名进行表的别名*/
from 表名或者视图名,【表名或者视图名】/*可以通过表达式空格别名进行表的别名*/
where 条件表达式
[group by 列名 【having <条件表达式>】]
[order by 列名 【asc|desc】]
常用的查询条件
比较 |
=,>,<,>=,<=,!=,<>,!>,!<;NOT 比较 |
确定范围 | between(条件)and(条件);not 前边的表达 |
确定集合 | in (条件);not |
字符匹配 | like (条件);not |
空值 |
is null;not is null |
多重条件 | and, or, not |
like '刘%'通配符%可以代替任何长度字符、_字符可以代替单个字符 当字符中有这两个符号时可以通过 escape'换码字符' 列如 like 'db\_design' escape'\';把_转义为真正的_
查询空值不能用=
子句查询
- order by对查询结果按照一个或多个属性的升序(asc)或者降序(desc)
- 聚集函数
- count(*)统计元组个数
- count([distinct|all] <列名>)
- sum([distinct|all] <列名>)
- avg([distinct|all] <列名>)
- max([distinct|all] <列名>)
- min([distinct|all] <列名>)
- group by 对查询结果按照一列或者多列的值进行分组 值相等的为一列
- where 函数中不能用聚集函数所以应该
select sno avg(grade) form sc where avg(grade)>=90 group by sno 是错误的 应该是 select sno avg(grade) form group by sno having avg(grade)>=90
连接查询
- 【<表名1>.】<列名1>比较运算符【表名2.】<列名2>当比较运算符为=时称为等值连接 其他为非等值连接
- 用谓语连接【<表名1>.】<列名1>between【表名2.】<列名2>and【表名2.】<列名3>连接谓语中的列名称为连接字段。连接条件中的各连接字段类型必须是可比的
- 自身连接自身连接需要给表取两个别名列如
select first.cno,second.cpno from course first,course second where first.cpno=second.cno;
- 外链接 外链接关键字为from 表名 left outer join sc on(连接) 左表连接右表连接把left改为right
- 多表连接 再多个表之间进行连接
嵌套查询
- 一个select-from-where 为一个查询块可以嵌套在另一个where 或者having
select-from-where -(select-from-where)
- 带in 的子查询
- 带比较运算符的子查询
- 带有any或者all的子查询
- 带有exist的子查询存在返回true不存在返回false
- 集合查询 并(union)交(intersect)差(except)
(待续...)