乱码
cmd窗口汉字显示乱码,一般
set names gbk就好用了
数据类型
varchar(size)可变大小的字符串
date格式yyyy-mm-dd
time格式08:22:10
datetime就是date+time
数据库相关操作
- 创建数据库 并指定数据库中数据的编码
create databse mybase character set utf8;
- 查看数据库
show database;
- 创建数据库
create databse mybase;
- 查看数据库创建信息
show cretate database mybase;
- 删除数据库
drop database mybase;
- 使用某个数据库
use databse;
- 查看正在使用哪个数据库
use database;
表结构相关操作
- 创建表
create table student(
id int primary key,
name varchar(20)
);
- 添加一个主键
alter table student add primary key(id);
- 删除主键
alter table sort drop primary key;
- 查看表
show tables;
- 查看表结构
desc student;
- 删除表
drop table student;
- 修改列数据类型
alter table student modify chinese int;
- 修改原列名到新名
alter table student change name newname varchar(20);
- 删除某列
alter table student drop name;
- 修改表名字
rename table oldname to newname;
- 修改表的字符集
alter table student character set gbk;
插入表记录
除了数值类型外,其它的字段类型的值必须使用引号引起。
如果要插入空值,可以不写字段,或者插入 null。
对于自动增长的列在操作时,直接插入null值即可
insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..); -- 向表中插入某些列
insert into 表 values (值1,值2,值3..); --向表中插入所有列
更新表记录
update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 条件;
删除表中数据
delete from 表名 [where 条件];
查询别名显示as
这里的别名,并没有修改数据库中的保存列名,只是显示不同了。类似于一份拷贝
select Sname as '姓名' from S;
select Sname as '姓名' from S where '姓名'='AAA';//这就是错的
select name math+chinese as sum where sum >200;//这个就是对的
条件查询
image.png一些例子
- 添加2列信息,出生日期,籍贯。
alter table student add birthday date,add nationality varchar(20);
- 将语文成绩修改为默认值为0
alter table student alter column chinese drop default;
alter table student alter column chinese set default 0;
- 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列
select * from S order by depaNum,Age desc;
练习一
create table student(
id int,
name varchar(20),
chinese float,
english float,
math float
);
在命令行中,name 列最好能插入中文值
1,请添加一个主键。
alter table student add primary key(id);
2. 请添加2列信息,出生日期,籍贯。
alter table student add birthday date,add nationality varchar(20);
3,请修改语文成绩的数据类型为int型.
alter table student modify chinese int;
4. 请将各科成绩修改为默认值为0
alter table student alter column chinese drop default;
alter table student alter column chinese set default 0;
alter table student alter column english drop default;
alter table student alter column english set default 0;
alter table student alter column math drop default;
alter table student alter column math set default 0;
5. 请在里面插入10名学生数据。(成绩可以随便插入,不过最好有一个不同的分布)
insert into student values (1,'王一',90,80,70,'1992-02-12','北京');
insert into student values (2,'田一',91,80,70,'1992-02-12','上海');
insert into student values (3,'李三',92,80,70,'1992-02-12','山东');
insert into student values (4,'李二',40,89,92,'1992-02-12','湖北');
insert into student values (5,'李一',20,83,70,'1992-02-12','北京');
insert into student values (6,'赵三',70,80,70,'1992-02-12','北京');
insert into student values (7,'赵二',30,80,80,'1992-02-12','广东');
insert into student values (8,'赵一',90,80,40,'1992-02-12','北京');
insert into student values (9,'王三',99,80,92,'1992-02-12','北京');
insert into student values (10,'王二',90,81,70,'1992-02-12','北京');
6. 请分别找出单科成绩最高的学生名单。(降序即可)
select name from student order by chinese desc;
select name from student order by math desc;
select name from student order by english desc;
7. 请找出总成绩最高的学生。(降序即可)
select name from student order by chinese+math+english desc;
10.假设10名同学中有同姓的,如王,请找出姓王同学的信息.
select * from student where name like '王%';
12.请找出有任何一科不及格学生的名称
select * from student where chinese <60 or math<60 or english <60;
13.请找出两科成绩在90分以上的学生名称。
select * from student where chinese >90 and math>90 or english >90 and math>90 or chinese>90 and english>90;
14.请找出没有一科挂科的学生名称。
select name from student where math>60 and english >60 and chinese >60;
15.请找出所有非北上广省份的学生.
select * from student where nationality not in('北京','上海','广东');
练习二
新建一个学生表S,有包含如下信息
学号 Sno,
学生姓名 Sname,
性别 Sex,
年龄 Age,
专业 Depa
。
(请设置主键约束)
并插入10条数据。
专业包含(信息系、数学系,计算机科学系 等)
学号格式为 200501 200502 ... 200510
create table S(
Sno int primary key,
Sname varchar(10),
Sex char(5),
Age smallint,
Depa varchar(10),
Birthday date,
depaNum int
);
insert into S values(200501,'侯希白','男',20,'信息系','1990-01-02',1);
insert into S values(200502,'坦坦翁','男',90,'数学系','1890-02-02',3);
insert into S values(200503,'纳兰右慈','男',40,'计算机科学系','1990-05-02',2);
insert into S values(200504,'元本溪','男',50,'经管系','1970-11-22',6);
insert into S values(200505,'棋待诏','男',35,'电子科学','1990-7-05',4);
insert into S values(200506,'贾嘉佳','女',18,'体育系','1390-01-02',5);
insert into S values(200507,'李当心','男',43,'佛学系','1590-01-02',7);
insert into S values(200508,'叶白夔','男',20,'军工系','1930-01-02',8);
insert into S values(200509,'陈芝报','男',28,'信息系','1995-01-02',1);
insert into S values(2005010,'轩辕青峰','女',25,'会计系','1992-03-15',9);
然后做如下查询:
1. 查询全体学生的学号与姓名。
select Sno,Sname from S;
2. 查询全体学生的姓名、学号、所在系。
select Sno,Sname,Depa from S;
3. 查询全体学生的详细记录。
select * from S;
4. 查全体学生的姓名及其出生年份。
select Sname,Birthday from S;
5. 查询全体学生的姓名、出生年份和所有系 使用列别名改变查询结果的列标题
select Sname as '姓名',Birthday as '出生年份',Depa as '所在系' from S;
7. 查询所有年龄在20岁以下的学生姓名及其年龄。
select Sname,Age from S where Age < 20;
8. 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。
select Sname,Depa,Age from S between 20 and 23;
9. 查询年龄不在20~23岁之间的学生姓名、系别和年龄。
select Sname,Depa,Age from S where Age not between 20 and 23;
10. 查询信息系、数学系和计算机系学生的姓名和性别。
select Sname,Sex from S where Depa in('信息系','数学系','计算机科学系');
11. 查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。
select Sname,Sex from S where Depa not in('信息系','数学系','计算机科学系');
12. 查询学号为200501的学生的详细情况。
select * from S where Sno = 200501;
13. 查询所有姓刘学生的姓名、学号和性别。
select Sname,Sno,Sex from S where Sname like '刘%';
14. 查询姓“李”且全名为3个汉字的学生的姓名。
select Sname from S where Sname like '李__';
15. 查询名字中第2个字为“本"字的学生的姓名和学号。
select Sname,Sno from S where Sname like '_本_';
16. 查询所有不姓刘的学生姓名。
select Sname from S where Sname not like '刘%';
17. 查询学号在200501~200509之间的学生姓名。
select Sname from S where Sno between 200501 and 200509;
20. 查询计算机系年龄在20岁以下的学生姓名。
select Sname from S where Depa='计算机科学系' and Age<20;
22. 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
select * from S order by depaNum,Age desc;
网友评论