SQL中基本模式定义:
- SQL语句 create table 命令:创建表
语句:create table tablename(s1 s1type, s2 s2type, ..., sn sntype, <完整性约束>)
CREATE TABLE IF NOT exists customer (
name char(20),
city char(30),
age int,
primary key(name))
primary key:表示主键,如上是声明name为customer表的主键。
主键属性:必须非空且唯一。也就是说没有任何一个元组(一列)主键是空的,也没有两个元组在主键上取值系统。
虽然在主键的声明是可选的,但为每个表指定一个主键通常会更好,上面的SQL语句选用name作为主键可能不是很准确的,因为在现实中人名会存在重复,可以增加一个属性例如customer_id作为主键比较好。
注意:如果在表中新插入或者修改的元组(一列数据)在任意一个主键上是空值或者如果与表中存在的元组的主键上取值相同,则SQL会标记为一个错误,并阻止更新。
- SQL语句insert命令:插入新数据
如上新创建的表最初是空的,可以用insert命令将数据加载到表中。
//1、此语句插入的元组属性值排列顺序必须要和表中属性被列出的顺序相同。
insert into customer values('Zhangsan', 'GuangZhou', 20);
//2、如果一个表中的属性很多,记他们的属性顺序是一件很麻烦的事。SQL是允许在insert语句中指定属性的。
insert into customer (name, age, city) values('xiaoming', 20, 'ShenZhen');
//3、也可以在查询结果的基础上执行插入,假设现在需要将customer表上city值是GuanZhou的元组插入到GuanZhou表中。
insert into GuangZhou select name, city, age from customer where city = 'GuangZhou';
- SQL语句delete和drop命令:删除
delete和drop区别:1、delete删除的是表内的数据,而drop删除的是整个表以及表的所有数据,并将表所占用的空间全部释放。
//删除customer表内city值是GuangZhou的数据
delete from customer where city = 'GuangZhou';
//删除customer表内所有数据但不删除表
delete from customer;
//删除表以及表内的所有数据
drop table customer
SQL语句alter table 命令:为表增加或者删除属性,表内的所有元组在该新属性的取值将被设为null。如下图,为表customer新增sum属性,其所有元组sum属性的取值都是null。
//为customer表增加消费总金额属性
alter table customer add sum int;
//为customer表去除age属性
alter table customer drop age;
注意:有些数据库系统并不支持去掉属性。
- SQL语句select命令:查询
1、查询表中所有的元组
select * from customer;
2、只查询指定的属性,如下只查询phone属性的值
select phone from customer
3、去重:发现上图phone有两个值是重复的,如果需要将查询结果去重的话可以添加distinct关键字
- SQL语句update命令:更新
如上图,需要name这一列中xiaoming改为XiaoMing,
update customer set name='XiaoMing' where name='xiaoming';
- SQL语句where子句
where后面跟随的是条件,比如需要查询消费金额1500以上的客户
select * from customer where sum>=1500;
- SQL语句as命令:重命名
- SQL语句常用字符串运算符:%、_、 >=、<=、 >、 <、 =
%:匹配任意子字符串。
_:匹配任意一个字符。
以上这两个运算符使用like来匹配的。
1、例如:找出张姓的所有顾客
select * from customer where name like 'Zhang%';
2、找出非张姓的所有顾客
select * from customer where name not like 'Zhang%';
注意:如果某个属性中的值带有%或者_字符。SQL语句是允许转义字符'\'的,而且在like比较运算中使用escape关键词来定义转义字符。
- SQL语句union、intersect、except命令
这三个命令都是在查询多表时使用。
union命令关系代数中的并集; intersect相当于关系代数中的交集; except相当于关系数据中的差
(select s1 from tablename1 ) union (select s1 from tablename2)
(select s1 from tablename1 ) intersect (select s1 from tablename2)
(select s1 from tablename1 ) except (select s1 from tablename2)
- SQL语句聚集函数:avg,min, max, sum, count
求customer表中有多少行数据
select count(*) from customer;
求customer表中sum的总和
select sum(sum) as 所有顾客消费金额 from customer;
其余三个函数用法也一样。
注意:count(*)不能喝distinct一起使用。
- SQL语句group by子句
gruop by:所有属性上具有相同的值的元组将被分在同一个组中。
例如需要将type类型为VIP和SVIP的客户所消费的金额总和分开,这时group by子句就可以实现这个愿望了
select type as 会员类型, sum(sum) as 消费总金额 from customer group by type;