当前位置:网站首页>第4阶段 Mysql数据库
第4阶段 Mysql数据库
2022-07-06 09:15:00 【@小蜗牛】
目录
学习网址
点此跳转:https://www.educoder.net/shixuns/rx56kula/challenges
4-1MySQL数据库 - 初识MySQL
输入命令:mysql -u用户名 -p密码
在平台上连接数据库还需要加上一句-h127.0.0.1。
mysql -uroot -p123123 -h127.0.0.1
create database MyDb;
show databases;
注意别忘了末尾的分号;
第2关:创建表
数据库中的数据是存放在一张一张的表中的。
你可以想象数据库就像一个文件夹,而表你可以理解为一个excel表格,其实他们本来就挺像。
mysql -uroot -p123123 -h127.0.0.1
create database TestDb;
show databases;
use TestDb;
create table t_emp (
id Int,
name VARCHAR(32),
deptId Int,
salary FLOAT
);
desc t_emp;
第3关:使用主键约束
mysql -uroot -p123123 -h127.0.0.1
create database MyDb;
show databases;
use MyDb;
create table t_user1 (
userId Int PRIMARY KEY,
name VARCHAR(32),
password VARCHAR(11),
phone VARCHAR(11),
email VARCHAR(32)
);
desc t_user1;
create table t_user2 (
name VARCHAR(32),
phone VARCHAR(11),
email VARCHAR(32),
PRIMARY KEY(name,phone)
);
desc t_user2;
第4关:外键约束
mysql -uroot -p123123 -h127.0.0.1
create database MyDb;
show databases;
use MyDb;
create table t_class(
id Int PRIMARY KEY,
name VARCHAR(22)
);
desc t_class;
create table t_student(
id Int PRIMARY KEY,
name VARCHAR(22),
classId Int,
CONSTRAINT fk_stu_class1 FOREIGN KEY(classId) REFERENCES t_class(Id)
);
desc t_student;
第5关:添加常用约束
设置表的属性值自动增加 AUTO_INCREMENT
mysql -uroot -p123123 -h127.0.0.1
create database MyDb;
show databases;
use MyDb;
create table t_user(
id Int PRIMARY KEY auto_increment,
username VARCHAR(32) not null unique,
sex VARCHAR(4) default '男'
)DEFAULT CHARSET=utf8;
4-2MySQL数据库 - 数据库和表的基本操作(一)
第1关:查看表结构与修改表名
语法规则为:DESCRIBE 表名;
大小写不敏感哟!
再告诉大家一个小诀窍,是不是觉得返回的结果排版有点乱。我们加上\G后效果就会有所改善哟,来看看!
USE Company;
#请在此处添加实现代码
########## Begin ##########
########## modify the table name ##########
alter table tb_emp rename jd_emp;
########## show tables in this database ##########
show tables;
########## describe the table ##########
desc jd_emp;
########## End ##########
第2关:修改字段名与字段数据类型
USE Company;
#请在此处添加实现代码
########## Begin ##########
########## change the column name ##########
alter table tb_emp change Id prod_id int(11);
########## change the data type of column ##########
alter table tb_emp modify Name varchar(30);
########## End ##########
DESCRIBE tb_emp;
第3关:添加与删除字段
USE Company;
#请在此处添加实现代码
########## Begin ##########
########## add the column ##########
alter table tb_emp add Country varchar(20) after Name;
########## delete the column ##########
alter table tb_emp drop Salary;
########## End ##########
DESCRIBE tb_emp;
第4关:修改字段的排列位置
USE Company;
#请在此处添加实现代码
########## Begin ##########
########## modify the column to top ##########
alter table tb_emp modify Name varchar(25) first;
########## modify the column to the rear of another column ##########
alter table tb_emp modify DeptId int(11) after Salary;
########## End ##########
DESCRIBE tb_emp;
第5关:删除表的外键约束
USE Company;
#请在此处添加实现代码
########## Begin ##########
########## delete the foreign key ##########
alter table tb_emp drop FOREIGN KEY emp_dept;
########## End ##########
SHOW CREATE TABLE tb_emp \G;
4-3MySQL数据库 - 数据库和表的基本操作(二)
第1关:插入数据
插入一列
ERROR 1062 (23000) at line 8: Duplicate entry ‘0’ for key ‘PRIMARY’
原因:主键字段有两条为0的记录,冲突。(设置主键自增解决)( duplicate重复)
USE Company;
#请在此处添加实现代码
########## Begin ##########
########## bundle insert the value ##########
insert into tb_emp (Id,Name,DeptId,Salary)
values(1,'Nancy',301,2300),(2,'Tod',303,5600),(3,'Carly',301,3200);
########## End ##########
SELECT * FROM tb_emp;
第2关:更新数据
UPDATE Mall_products2
SET country_name = "Pakistan", country_id = 92
WHERE id = 2;
USE Company;
#请在此处添加实现代码
########## Begin ##########
########## update the value ##########
update tb_emp
set Name="Tracy",DeptId=302,Salary=4300.00
where Id = 3;
########## End ##########
SELECT * FROM tb_emp;
注意:最后一句要加分号;其次,单双引号要注意区分
第3关:删除数据
对表操作,用drop
对行操作,用delete
4-4MySQL数据库 - 单表查询(一)
第1关:基本查询语句
第2关带 IN 关键字的查询
第3关带 BETWEEN AND 的范围查询
4-5MySQL数据库 - 单表查询(二)
第1关带 LIKE 的字符匹配查询
第2关查询空值与去除重复结果
USE Company;
######### Begin #########
select *
from tb_emp
where DeptId is null;
######### End #########
######### Begin #########
select distinct Name
from tb_emp;
######### End #########
第3关带 AND 与 OR 的多条件查询
USE Company;
######### Begin #########
#使用关键字AND返回数据表中字段DeptId为301并且薪水大于3000的所有字段的内容,
select *
from tb_emp
where DeptId=301 and Salary>3000;
######### End #########
######### Begin #########
#使用关键字IN返回数据表中字段DeptId为301和303的所有字段的内容。
select *
from tb_emp
where DeptId in (301,303);
######### End #########
4-6MySQL数据库 - 单表查询(三)
第1关对查询结果进行排序
SELECT 字段名 FROM 表名 ORDER BY 字段名 [ASC[DESC]];
ASC 升序关键字
DESC 降序关键字
第2关分组查询
第3关使用 LIMIT 限制查询结果的数量
USE School;
#请在此处添加实现代码
########## Begin ##########
########## 查询班级中第2名到第5名的学生信息 ##########
select *
from tb_score
order by score desc
limit 1,4;#从第二条记录开始往后查看4条数据(不包含第一条):
########## End ##########
4-7MySQL数据库 - 使用聚合函数查询
第1关:COUNT( )函数
USE School;
#请在此处添加实现代码
########## Begin ##########
########## 查询该表中一共有多少条数据 ##########
select count(*)
from tb_class;
########## 查询此表中367班有多少位学生 ##########
select classid,count(*)
from tb_class
where classid=367;
########## End ##########
第2关SUM( )函数
USE School;
#请在此处添加实现代码
########## Begin ##########
########## 查询所有学生总分数 ##########
select sum(score)
from tb_class;
########## 查询学生语文科目的总分数 ##########
select course,sum(score)
from tb_class
where course="语文";
########## End ##########
第3关AVG( )函数
第4关MAX( )函数
第5关MIN( )函数
4-8MySQL数据库 - 连接查询
第1关内连接查询
USE School;
########## 查询数据表中学生姓名和对应的班级 ##########
#请在此处添加实现代码
########## Begin ##########
select tb_student.name as studentName, tb_class.name as className
from tb_student join tb_class
on tb_student.class_id=tb_class.id;
########## End ##########
第2关外连接查询
USE School;
########## 使用左外连接查询所有学生姓名和对应的班级 ##########
#请在此处添加实现代码
########## Begin ##########
select tb_student.name as studentName, tb_class.name as className
from tb_student left join tb_class
on tb_student.class_id=tb_class.id;
########## End ##########
########## 使用右外连接查询所有学生姓名和对应的班级 ##########
#请在此处添加实现代码
########## Begin ##########
select tb_student.name as studentName, tb_class.name as className
from tb_student right join tb_class
on tb_student.class_id=tb_class.id;
########## End ##########
第3关复合条件连接查询
USE School;
########## 查询所有班级里分数在90分以上的学生的姓名和学生的成绩以及学生所在的班级 ##########
#请在此处添加实现代码
########## Begin ##########
select tb_student.name as studentName, score,tb_class.name as className
from tb_student left join tb_class
on tb_student.class_id=tb_class.id
where score>90
order by score desc;
########## End ##########
4-9MySQL数据库 - 子查询
第1关带比较运算符的子查询
USE Company;
#请在此处添加实现代码
########## Begin ##########
#1.查询大于所有平均年龄的员工姓名与年龄
select name,age
from tb_emp
where age>all(
select avg(age)
from tb_emp);
########## End ##########
第2关关键字子查询
USE Company;
#请在此处添加实现代码
########## Begin ##########
#1.使用 ALL 关键字进行查询
select position,salary
from tb_salary
where salary>all(
select max(salary)
from tb_salary
where position="Java"
);
#2.使用 ANY 关键字进行查询
select position,salary
from tb_salary
where salary>ANY(
select min(salary)
from tb_salary
where position="Java"
);
#3.使用 IN 关键字进行查询
select position,salary
from tb_salary
where salary in (
select salary
from tb_salary
where position="Java"
);
########## End ##########
4-10MySQL数据库 - 分组选择数据
第1关GROUP BY 与 聚合函数
USE School;
#请在此处添加实现代码
########## Begin ##########
#1.查询表中2,3,4年级中分别男女的总人数
select gradeId,sex,count(*)
from student
where gradeId in(2,3,4)
group by gradeId,sex;
########## End ##########
第2关使用 HAVING 与 ORDER BY
USE School;
#请在此处添加实现代码
########## Begin ##########
#1.查询表中至少有两门课程在90分以上的学生信息
select sno,count(*)
from tb_grade
where score>=90
group by sno
having count(*)>=2;
#2.查询表中平均成绩大于90分且语文课在95分以上的学生信息
select sno,avg(score)
from tb_grade
where sno in(
select distinct sno
from tb_grade
where pno="语文" and score>=95)
group by sno
having avg(score)>=90;
########## End ##########
4-11MySQL开发技巧 - 分页和索引
第1关MySQL 分页查询
USE Products;
#请在此处添加实现代码
########## Begin ##########
#1.分页查询
select prod_id
from products
limit 5,5;
#2.用子查询优化分页查询语句
select prod_id
from products
where prod_id >=(
select prod_id
from products
limit 10,1
)
limit 5;
########## End ##########
第2关索引(单列索引)
单列索引分类和创建
我们使用最常见的是单列索引,分为主键索引、普通索引和唯一索引。
USE Students;
#请在此处添加实现代码
########## Begin ##########
#1.创建student表结构并且设置id为主键索引
CREATE TABLE student(
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(20) NOT NULL,
score int(10),
PRIMARY KEY (id)
);
#2.对name建立唯一索引
CREATE unique INDEX name_index on `student`(`name`);
#3.对score建立普通索引
CREATE INDEX score_index on `student`(`score`);
SHOW INDEX FROM student;
########## End ##########
第3关索引(组合索引)
4-12数据库设计 - 博客系统
--创建数据库
CREATE DATABASE blog_db;
use blog_db;
--在blog_db库中创建t_user表
--用户信息表
CREATE TABLE t_user
(
userId BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',--低版本编程环境不能识别AUTO_INCREMENT,换成IDENTITY(1,1)
username VARCHAR(32) NOT NULL COMMENT'用户名',--COMMENT 备注
password VARCHAR(32) NOT NULL COMMENT'密码',
user_sex VARCHAR(6) NOT NULL DEFAULT '0' COMMENT'性别0代表男 1代表女',--设置默认值 DEFAULT
email VARCHAR(64) COMMENT'邮箱',
phone VARCHAR(11) NOT NULL COMMENT'手机号码',
firstname VARCHAR(6) COMMENT'姓',
lastname VARCHAR(12) COMMENT'名',
avatar VARCHAR(255) COMMENT'头像地址',
is_superuser INT(11) NOT NULL DEFAULT 0 COMMENT'是否是管理员 0代表不是 1代表是',
last_login DATETIME COMMENT'上一次登录时间',
user_register_time DATETIME COMMENT'上一次登录时间',
PRIMARY KEY (userId)--主键
);
/*创建blog_type、t_blog、t_comment表,并建立表之间的关系博客类型表和博客信息表是一对多的关系, 博客评论表和博客信息表是多对一的关系,用户信息表与博客信息表、博客评论表是一对多的关系。*/
--博客类型表
CREATE TABLE blog_type
(
type_id INT NOT NULL AUTO_INCREMENT COMMENT'类型id',
type_name VARCHAR(32) NOT NULL COMMENT'类型名称',
PRIMARY KEY(type_id)
);
--博客信息表
CREATE TABLE t_blog
(
blog_id BIGINT NOT NULL AUTO_INCREMENT COMMENT'博客id',
blog_title VARCHAR(100) NOT NULL COMMENT'博客标题',
blog_content LONGTEXT NOT NULL COMMENT'博客内容',
userid BIGINT COMMENT'创建人id',
type_id INT COMMENT'类型id',
blog_status INT NOT NULL DEFAULT '0' COMMENT'博客状态 1为发布 0为草稿',
create_time DATETIME NOT NULL COMMENT'创建时间',
update_time DATETIME NOT NULL COMMENT'更新时间',
cover_image VARCHAR(255) COMMENT'封面图片',
PRIMARY KEY(blog_id),
CONSTRAINT FK_user_id FOREIGN KEY (userid) REFERENCES t_user(userId),--重命名外键
CONSTRAINT FK_type_id FOREIGN KEY (type_id) REFERENCES blog_type(type_id)
);
--博客评论表
CREATE TABLE t_comment
(
comment_id BIGINT NOT NULL AUTO_INCREMENT COMMENT'评论id',
comment_content VARCHAR(500) NOT NULL COMMENT'评论内容',
blog_id BIGINT NOT NULL COMMENT'评论内容',
createtime DATETIME NOT NULL COMMENT'评论时间',
userid BIGINT NOT NULL COMMENT'评论人ID',
replyid INT NOT NULL COMMENT'评论回复人ID',
PRIMARY KEY(comment_id),
CONSTRAINT FK_comment_user_id FOREIGN KEY(userid) REFERENCES t_user(userId),
CONSTRAINT FK_comment_blog_id FOREIGN KEY(blog_id) REFERENCES t_blog(blog_id)
);
--创建博客标签表(t_tag),并建立表之间的关系
CREATE TABLE t_tag
(
tag_id INT(11) NOT NULL AUTO_INCREMENT,
tag_name VARCHAR(32) NOT NULL,
PRIMARY KEY(tag_id)
);
/*设计了一个中间表,分别与博客信息表和博客标签表是一对多的关系, 这样博客标签表(t_tag)就和博客信息表(t_blog)是多对多的关系了。*/
CREATE TABLE t_tag_blog
(
tag_id INT(11),
blog_id BIGINT(20),
FOREIGN KEY(tag_id) REFERENCES t_tag(tag_id),
FOREIGN KEY(blog_id) REFERENCES t_blog(blog_id)
);
4-13数据库查询 - 选课系统
USE School;
#请在此添加实现代码
########## Begin ##########
########## 插入学生表(Student)相应数据 ##########
insert into student(Sno,Sname,Ssex,Sage,Sdept)
values('9512101','李勇','男',19,'计算机系'),
('9512102','刘晨','男',20,'计算机系'),
('9512103','王敏','女',20,'计算机系'),
('9521101','张立','男',22,'信息系'),
('9521102','吴宾','女',21,'信息系'),
('9521103','张海','男',20,'信息系'),
('9531101','钱小平','女',18,'数学系'),
('9531102','王大力','男',19,'数学系');
########## 插入课程表(Course)相应数据 ##########
insert into course(Cno,Cname,Ccredit,Semster,Period)
values('C01','计算机文化学',3,1,41),
('C02','VB',2,3,61),
('C03','计算机网络',4,7,14),
('C04','数据库基础',6,6,24),
('C05','高等数学',8,2,19),
('C06','数据结构',5,4,55);
########## 插入学生选课表(DBSC)相应数据 ##########
insert into dbsc(ScID,Sno,Cno,Grade,isTec)
values(1,9512101,'c01',90,'必修'),
(2,9512101,'c02',86,'选修'),
(3,9512101,'c06',45,'必修'),
(4,9512102,'c02',78,'选修'),
(5,9512102,'c04',66,'必修'),
(6,9521102,'c01',82,'选修'),
(7,9521102,'c02',75,'选修'),
(8,9521102,'c04',92,'必修'),
(9,9521102,'c05',50,'必修'),
(10,9521103,'c02',68,'选修'),
(11,9521103,'c06',56,'必修'),
(12,9531101,'c01',80,'选修'),
(13,9531101,'c05',95,'必修'),
(14,9531102,'c05',85,'必修');
########## End ##########
########## 查询表数据 ##########
SELECT * FROM student;
SELECT * FROM course;
SELECT * FROM dbsc;
#********* Begin *********#
echo " select Sname,Sdept from student where Sdept='计算机系'; select Sno from dbsc where Grade<60; select Sname,Sdept,Sage from student where Sage between 20 and 23 and Sdept='信息系'; select Sno,Grade from dbsc where Cno='c02' order by Grade desc; select count(*) from student; "
#********* End *********#
第3关:进阶查询
#********* Begin *********#
echo " select student.* from student where Sname like '张%'; select Sname,Ssex,Sdept from student where Sdept in ('计算机系','信息系','数学系'); select Cno, count(*) from dbsc where isTec='选修' group by Cno; select Sno from dbsc group by Sno Having count(*)>3; select Sname, Cno, Grade from student,dbsc where student.Sno=dbsc.Sno and Sdept='计算机系'; "
#********* End *********#
也不能再echo中加入#注释
第4关:复杂查询
#********* Begin *********#
echo " select distinct student.Sno,student.Sname from dbsc,student where student.Sno=dbsc.Sno and isTec='选修'; select Sname,count(*),avg(Grade) from dbsc,student where student.Sno=dbsc.Sno group by dbsc.Sno Having avg(Grade); select avg(Grade),count(*) from dbsc group by Sno having count(*)>=4; select student.Sname, dbsc.Cno, dbsc.Grade from student left join dbsc on student.Sno=dbsc.Sno where student.Sdept='信息系' and dbsc.isTec='选修' and Cno='C02'; update dbsc set Grade = Grade+5 where Grade<60; "
#********* End *********#
边栏推荐
- How to build a new project for keil5mdk (with super detailed drawings)
- Are you monitored by the company for sending resumes and logging in to job search websites? Deeply convinced that the product of "behavior awareness system ba" has not been retrieved on the official w
- error C4996: ‘strcpy‘: This function or variable may be unsafe. Consider using strcpy_s instead
- 软件测试与质量学习笔记3--白盒测试
- wangeditor富文本组件-复制可用
- 图片上色项目 —— Deoldify
- AcWing 179. Factorial decomposition problem solution
- 2019腾讯暑期实习生正式笔试
- Project practice - background employee information management (add, delete, modify, check, login and exit)
- [AGC009D]Uninity
猜你喜欢
一键提取pdf中的表格
02 staff information management after the actual project
vs2019 桌面程序快速入门
QT creator runs the Valgrind tool on external applications
AI benchmark V5 ranking
Classes in C #
Integration test practice (1) theoretical basis
QT creator support platform
Neo4j installation tutorial
Machine learning notes week02 convolutional neural network
随机推荐
[Bluebridge cup 2020 preliminary] horizontal segmentation
软件测试-面试题分享
Vs2019 desktop app quick start
AcWing 1294.樱花 题解
Julia 1.6 1.7 common problem solving
[MRCTF2020]套娃
QT creator specifies dependencies
【CDH】CDH/CDP 环境修改 cloudera manager默认端口7180
Cookie setting three-day secret free login (run tutorial)
Nanny level problem setting tutorial
ES6 let and const commands
小L的试卷
2020网鼎杯_朱雀组_Web_nmap
Classes in C #
L2-007 家庭房产 (25 分)
PyCharm中无法调用numpy,报错ModuleNotFoundError: No module named ‘numpy‘
数数字游戏
Windows下安装MongDB教程、Redis教程
Dotnet replaces asp Net core's underlying communication is the IPC Library of named pipes
L2-006 tree traversal (25 points)