欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-09 21:06:50
...

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

本篇包含的知识如图:

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

假设有两张表: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