第四天实习报告
MySQL
1、MySQL简介在DOS下操作MySQL
常用命令:
1. 进入MySQL环境
mysql -h MySQL服务器地址 -u 用户名 -p
-
显示所有数据库
show databases; -
进入某个数据库
use 数据库名称; -
显示所有表
show tables;
2、基本SQL语句
1.创建数据库
create database 数据库名称 [default character set ‘utf8’];
或者
create database 数据库名称 [charset='utf8‘];
2.创建表
create table 表名称(
字段名1 数据类型 约束[primary key],
字段名2 数据类型 约束…,
字段名3 数据类型 约束…
);
create table students(
id int primary key auto_increment,
name varchar(20) not null,
sex varchar(10),
score double not null
);
3.向表中插入记录
语法一(指定字段名插入记录):
insert into 表名称(字段A,字段B…)values(值A,值B…);
语法二:(不指定字段插入记录,插入的值对应于表 中的每个字段)
insert into 表名称 values(值1,值2,…);
语法三:(插入多条记录)
insert into 表名称(字段A,字段B…)values(值A1,值B1…),(值A2,值B2…)…;
insert into students(name,sex,score)values(‘郭靖’,‘男’,83.5);
insert into students(name,score)values(‘张三’,62);
insert into students values(5,‘黄蓉’,‘女’,85);
insert into students(name,sex,score)values(‘杨过’,‘男’,92),
(‘小龙女’,‘女’,80);
delete from students where name=‘小龙女’;
update students set name=‘郭大侠’,score=66 where name=‘郭靖’;
select name as 姓名,score as 成绩 from students where score>=80;
4.删除数据
delete from 表名称 [where 条件];
5.修改数据
update 表名称 set 字段名1=修改的值1 [,字段名2=修改的值2…] [where 条件];
6.查询数据
select 字段名1 [as 别名],字段名2 [as 别名],… from 表名称 [where 条件];
3、排序查询、模糊查询、限制查询
1:排序查询
select 字段1,字段2… from 表名称 [where 条件] [order by 字段名 [desc] ]
select * from students order by score;
select * from students order by score desc;
select * from students where name like ‘%杨%’;
select * from students where name like ‘****龙’;
select * from students limit 3;#前三条
select * from students limit 2,3;#从第三条数据开始,显示三条
select * from students limit 3,3;
2:模糊查询(like)
通配符:
% 代表任意多个任意字符
_ 代表一个任意字符
3:限制(limit)查询
1.限制行数的查询
select * from 表名称 [where 条件] [limit n];
注意:limit n代表最多查询n条
·2:限制(limit)查询
1.限制行数的查询
select * from 表名称 [where 条件] [limit n];
注意:limit n代表最多查询n条
2.根据偏移量(从0开始,代表第一行)和查询数量,查询出指定位置的记录
select * from 表名称 [where 条件] [limit offset, n];
注意:offset代表偏移量,偏移量从0开始计算,代表第一行
n代表查询出的最多记录数
4、分页查询
每一页显示pageSize条记录
select * from 表名称 limit (page-1)*pageSize, pageSize;
select * from students limit (2-1)*3,3;
#mysql不支持limit后计算,可直接select (2-1)*3;
也可用offset参数,limit 3 offset2
5、聚合函数
-
max(字段名) :计算某一字段中的最大值
-
min(字段名) :计算某一字段中的最小值
-
avg(字段名):计算某一字段中的平均值
-
sum(字段名):计算某一字段值的和
-
count(字段名): 计算某一字段值中不为null的记录总数。
count(*): 计算记录的总条数,无论是否为nullselect max(score) from students;
select * from sthudents where score<=avg(score)
select count(*) from students;
select count(sex) from students;
6、分组查询
-
group by 分组字段1[,分组字段2,…] [having 分组后的筛选条件(注:聚合函数)]
注意:分组字段应该与select后的查询字段一致,否则查询结果无意义。
select sex as 性别,avg(score) as 平均成绩
from products group by sex;
7、连接查询
-
等值连接
select 字段1,字段2,… from 表A,表B,… where 连接条件 [其他过滤条件];create table country(
id int primary key auto_increment,
name varchar(20) not null,
capital varchar(20) not null
);create table province(
id int primary key auto_increment,
name varchar(20) not null,
food varchar(20) not null,
country_id int not null
);insert into country(name,capital)values(‘中国’,‘北京’),
(‘美国’,‘华盛顿’),(‘梵蒂冈’,‘梵蒂冈首都’);insert into province(name,food,country_id)values(‘阿拉斯加省’,‘披萨’,2),
(‘陕西省’,‘面条’,1),(‘浙江省’,‘米饭’,1);select p.name,p.food,c.name
from country as c,province as p where p.country_id=c.id;select p.name,p.food,c.name
from country as c inner join province as p
on p.country_id=c.id;select c.name,p.name
from country as c left join province as p
on p.country_id=c.id;select c.name,p.name
from province as p right join country as c
on p.country_id=c.id; -
内连接
select 字段1,字段2,… from 表A inner join 表B on 连接条件[其他过滤条件];3.外连接
左外连接:
select 字段1,字段2,… from 表A left join 表B on 连接条件;
右外连接:
select 字段1,字段2,… from 表A right join 表B on 连接条件;
注意:左(右)外连接的查询结果是,除了返回表中符合条件的记录外还要加上左(右)表中剩下的全部记录。
8、嵌套查询
1、定义:指在外部查询语句中嵌套着一个内部查询(子查询),子查询的查询结果一般是作为外部查询的条件。子查询要用括号括起来。
常用关键字:
in 判断某个(些)字段值是否在指定的子查询结果集中
all 判断某个字段值是否能满足指定操作符对子查询结果集所有记录的筛选
any 判断某个字段值是否满足指定操作符对子查询结果集的任一个值
9、外键
[constraint 约束名称] foreign key(作为外键的字段名)
references 父表名称(父表主键);
外键的作用:用来约束子表中的记录,使之与父表的记录对应。
10、“一对多”和“一对一”关系表设计
一对多:通过在子表上设置外键的方式,关联父表的主键。
这样,父表的一条记录就可以关联子表的多条记录了。
create table school(
id int primary key auto_increment,
name varchar(20) not null,
history text
);
insert into school(name,history)values(‘清华大学’,‘清华大学历史悠久’),
(‘北京大学’,‘北京大学历史也很悠久’),(‘西安理工大学’,‘西安理工大历史悠久’);
create table students(
id int primary key auto_increment,
name varchar(20) not null,
sex varchar(10),
school_id int not null,
foreign key(school_id) references school(id)
);
insert into students(name,sex,school_id)values(‘郭靖’,‘男’,1),
(‘黄蓉’,‘女’,1),(‘杨过’,‘男’,3),(‘小龙女’,‘女’,2);
select school.name,students.name
from school inner join students
on school.id=students.school_id;
一对一:在依赖表中(子表,从表)中设置唯一外键。即:设置一个外键关联主表的主键,并且这个外键还必须是唯一约束
create table person(
id int primary key auto_increment,
name varchar(20)
);
insert into person(name)values(‘张三’),(‘李四’),(‘王五’);
create table card(
id int primary key auto_increment,
cardnum varchar(18) not null,
person_id int unique,
foreign key(person_id) references person(id)
);
insert into card(cardnum,person_id)
values(‘zs123’,1),(‘ls456’,2),(‘ww789’,3);