提示:SQL语句中的标点均由英文状态下输入!
一、连接数据库
使用快捷键Win+R调出运行窗口,在运行窗口中输入cmd,并回车,即可调出DOS控制台
打开DOS控制台后先连接我们的数据库,输入以下代码,然后输入密码即连接数据库
mysql -u 数据库的用户名 -p
连接成功后,我们首先要显示出我们的数据库,使用命令
show databases;
输入命令后我们就能够看到我们的数据库信息,这时我们虽然能看见我们的数据库但是还不能够使用,要使用某个数据库,就要输入命令
use 数据库名;
输入命令选择我们的数据库后,会提示我们 Database changed,此时我们无法看到我们数据库中的表,输入命令,就能够显示出我们数据库中的表。
show tables;
显示某张表的详细数据输入命令,这样我们的数据库就连接成功了
select * from 表名 ;
二、插入数据
使用insert into 命令向表中插入具体的数据,注意数据要与字段名一一对应,例如insert into t_student (id,sname,age,phone) values (100,‘增加数据’,‘100’,‘17852400833’);
增加字符串时,用英文状态下的引号引起来
当添加一条数据时,若某个字段为必填字段,则使用insert into命令时必须为此字段进行赋值,否则将会报错。
insert into 表名 (字段1,字段2,字段3,字段4) values (数据1,数据2,数据3,数据4);
三、更改数据
使命update命令更改数据库中的信息,例如将id为100的数据更改为id为101,名字改为“更改数据”,注意where后跟限制条件,可以跟多重限制条件用and进行连接
update 表名 set 字段1 =数据1,字段2 =数据2 where id = 101;
如果不适用where条件进行限制,则会将表中所有记录的指定字段都进行更新。
四、删除数据
delete from 表名 where 限制条件;
不使用where限制条件时将会删除整张表中的数据
五、查找数据
使用命令可以查找表中的全部数据
select * from 表名;
使用命令,可以查找并显示对应字段的数据
select 字段1,字段2,字段3 from 表名;
可以在查询语句后加上where条件限制,对数据进行筛选,比如筛选年龄大于20岁的男生:select name, sex,age from t_student where age>20 and sex = ‘男’;
select 字段1,字段2,字段3 from 表名 where 字段名限制条件;
where的限制条件有很多,例如查询姓王的所有学生 like
select * from t_student where name like '王%';
查询名字中带“文”的所有学生 like
select * from t_student where name like '%文%';
查询名字以“浩”的所有学生 like
select * from t_student where name like '%浩';
判断字符串时用 is
select * from t_student where name is ‘刘大宝’;
查询id是 1 id是3 id是5的学生 in()
select * from t_student where id in (1,3,5);
查询某个范围内的信息,例如年龄在18和25之间的学生信息 between …and…
select * from t_student where age between 18 and 25;
六、多表联查
上边内容仅仅是对单张表进行操作,但是在实际生活和工作中,往往需要多张表格共同使用,也就是需要将多张表联合起来进行操作,使用 join on 命令。
此时就需要引入一个新的名词—外键,也就是说一个表的某个字段如cid能用来连接另一张表,那么cid就是另一张表的的外键,例如
有一张学生表和班级表
此时输入命令,通过外键将学生表的和班级表连连起来,此时学生表中的cid就叫做班级表的一个外键
select * from t_student join t_class on t_student.cid = t_class.id;
select * from 表名1 join 表名2 on 表名1.cid = 表名2.id;
其中由于查询时需要显示具体的字段名(t_class.id)表名较长时,操作会比较麻烦,所有有一种简单方法 as 为表去一个简化的名,实际表名不变,只是逻辑上改为取的别名
如连接学生表与班级表,我们就可以使用简化的方法
select * from t_student as s join t_class as c on s.cid =c.id;
将 t_student重命名为s 将t_class 重命名为 c
使用中 as 可以省略
select * from t_student s join t_class c on s.cid =c.id;
将 t_student重命名为s 将t_class 重命名为 c
数据库作业:
1、 用SQL语句创建以下三张表,要求字段属性要求如图所示。
学生表:t_student
1.连接数据库
指令:mysql -u root -p;然后输入密码,成功连接数据库
2.查看数据库
指令:show database;
3.创建数据库
指令:create database test;
4.使用数据库
指令:use test;
5.创建学生表
指令:create table t_student1(
id int(16) not null primary key auto_increment,
sname varchar(25) not null,
sex varchar(25),
age int(16),
phone varchar(25),
address varchar(25),
cid int(255),
remark varchar(25)
);
班级表:t_class
6.创建班级表
指令:
create table t_class(
id int(11) not null primary key auto_increment,
cname varchar(25) not null,
teacher varchar(25),
remark varchar(25)
);
成绩表:t_grade
7.创建成绩表
指令:
create table t_grade(
id int(16) not null primary key auto_increment,
sid int(11),
chinese varchar(25) ,
math varchar(25),
english varchar(25),
remark varchar(25)
);
2、 用SQL语句,分别在三张表中插入数据。
插入学生表: insert into t_student values(9,'星星','女',29,'13456767798','北京',1,''),
(8,'张辉','男',19,'13456767558','广州',1,''),(7,'刘明','男',18,'13422767798','乌
鲁木齐',2,''),(6,'刘飞','男',16,'13455667798','杭州',3,'');
插入班级表:insert into t_class values(1,"1班","王爷",""),(2,"2班","汪华",""),(3,"3班
","王爷","");
注意:mysql> insert into t_class values(1,"1班","王爷",""),(2,"2班","汪华",""),(3,"3班
","王爷","");
ERROR 1366 (HY000): Incorrect string value: '\xE7\x8F\xAD' for column 'cname' at
row 1
出现这种报错时,是因为字符集没改成utf8,所以用下面的指令改字符集
ALTER TABLE t_class CONVERT TO CHARACTER SET utf8mb4;
插入成绩表:
指令:mysql> insert into t_grade values (1,1,100,80,100,""), (2,2,85,80,70,""), (3,3,9
0,80,80,"");
注意:学生表的id等于成绩表的sid,班级表的id等于学生表的cid
3、 用SQL语句对班级表学生表进行多表联查,显示班级表的班级名称和学生的id,姓名
指令:
指令:select a.id,a.sname, b.cname from t_student a join t_class b on a.cid=b.id;
4、 用SQL语句对学生表成绩表多表联查,显示学生的id,sname和成绩表的语数外的成绩。
指令:mysql> select a.id,a.sname,c.chinese,c.math,c.english from t_student a join t_gr
ade c on a.id=c.sid;
5、 用SQL语句,对三张表进行多表联查,显示学生表的id,sname班级表的cname,成绩表的语数外成绩。
指令:mysql> select a.id,a.sname,b.cname,c.chinese,c.math,c.english from t_student a j
oin t_class b on a.cid=b.id join t_grade c on a.id=c.sid ;
七、课后题:
新建一个学生表(id,sname,cid,)、课程表(cid,classname)、成绩表(id,chinese,math,english),并写出以下SQL语句
1.查询行王的学生的个数
2.查询所有语文成绩比数学成绩高的所有学生的学号
1. select count (*) from t_student where name like '王%'
2.select s.id from t_student s join t_grade g on s.id = g.id where g.chinese > g.math;