SQL必知必会--基础篇(二)

接上一篇SQL必知必会--基础篇(一),继续对基础知识进行总结回顾。

本篇包含的知识如图:

SQL必知必会--基础篇(二)_第1张图片

假设有两张表:student(sno,name,sex,age,class,addr) ,sno为主键

                        grade(id,sno,Math,Chinses,English),id为主键

以下sql语句,基于mysql数据库编写

一、创建和操纵表

1.创建和操纵数据库

create database moon;    # 创建名为 moon 的数据库
use moon;                # 使用 moon 数据库
drop database moon;      # 删除 moon 数据库

2.创建和操纵表

(1)创建表:

craete table student(                       # 表名 student
sno    int          not null,               # 学号 int型  不能为空
name   varchar(10)  not null,               # 姓名 字符型  不能为空
sex    varchar(4)   not null,               # 性别 字符型  不能为空
age    int          not null  default 10,   # 年龄 int型  不能为空  默认值为10
class  varchar(20)  not null,               # 班级 字符型  不能为空
addr   varchar(40),                         # 地址 字符型  可以为空
primary key (sno)                           # 设置学号sno为主键
);  #注意 最后一条语句,primary key (sno)后面 没有逗号

      基本创建语法如上,更多关于创建表的约束会在稍后的中级篇详细解释;

(2)更新表(结构):

  添加一个新列

first:添加的列置于最前面        after:添加的列置于指定列后面        不写first或者after的,默认置于最后一列

PS多列的添加不能指定位置关系,只能默认添加到最下面

alter table student
add phone int not null;             # 给student表增加名为phone的列,设置为int型,不允许为空
alter table student
add tel int not null after class;   # 给student表增加名为tel的列,设置为int型,不允许为空,放在class列后面
alter table student
add hobby varchar(20) first;        # 给student列增加名为hobby的列,设置为字符型,放在第一列

 删除已有的列

alter table student
drop phone;             # 删除 student 表的 phone 列
alter table student
drop class,drop sex;    # 删除 student 表的 class 和 sex 两列

修改已有列的定义:

alter table student
change addr address varchar(50) not null;     # 将addr列名称 改为 address,类型改为varchar(50)
alter table student
change name name varchat(10) not null first;  # 将name列 位置改为 第一列

(3)重命名表

alter table student
rename new_student;   # 将student表重命名为 new_student        尽量不要随意修改表名

(4)删除表

drop table student;   # 删除student 表

删除表没有确认,也不能撤销,执行将永久删除该表。

二、插入数据(insert into)

1.插入完整的行

insert into grade
values(1,001,80,70,90);      # 不指定插入数据列名,只提供被插入的值
insert into grade(id,sno,Math,Chinses,English)
values(2,002,78,89,85);      # 指定列名及被插入的值

2.插入部分值

可以不提供值的列:定义为允许null值的列;有默认值的列

insert into grade(id,sno,Math)
values(3,003,88);            

3.插入检索出的数据

insert into grade(id,sno,Math,Chinses,English)
select id,sno,Math,Chinses,English
from old_student;                      # 将old_student表中检索出的数据 插入student表中

列名不一定要匹配,它使用的是列的相对位置,第一列对应填充第一列。

PS:insert 通常只插入一行,要想插入多行,必须执行多个insert语句;insert select 是个例外,它可以用一个insert插入多行,不管select 语句返回多少行,都会被insert插入.

4.从一个表复制到另一个新表(select into)

select * into new_student from student;    # 将student表的所有数据复制插入到new_student表 

PS:区别 insert select 与select into:前者插入数据,后者导出数据

三、更新数据(update)

如果不写where子句,会更新整个表

update grade
set Math = 90,English = 78
where id = 2;                    # 更新id为2 的数学和英语成绩

四、删除数据(delete)

delete 删除整行而不是列 

delete from grade
where id =1;            # 删除id为1的行
delete * from grade;    # 删除grade表中所有数据
delete from grade;      # 删除grade表中所有数据

     PS:SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE 的区别 

drop:

drop test;  //删除表test,并释放空间,将test删除的一干二净

truncate:

truncate test; //删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在

delete:

delete from test where age=30 AND country='US'; //删除表test中年龄等于30的且国家为US的数据

delete from test 或者 delete * from test; //仅删除表test内的所有内容,保留表的定义,不释放空间

 

你可能感兴趣的:(SQL必知必会)