手把手教你mysql从入门到玩转

开发环境准备

首先安装mysql环境,本文使用的开发工具是Navicat Premium,这是一款数据库管理工具,这个工具安装非常方便、使用也很简单,当然SQL Server Management Studio 工具也是可以的,但是我个人觉得安装麻烦,软件安装包与破解文件如下:

链接: https://pan.baidu.com/s/1zrT1CmDDi-pwahR5c80vAg 提取码: 9pky

测试是否安装好,点击“开始”—“所有程序”—“MySQL”—然后选择下面的命令行工具“MySQL 5.6 Command Line Client”,输入所设置的密码,一般是123456;
在这里插入图片描述
mysql>show databases; 正常的话会列出当前所存在的数据库列表,如下:
在这里插入图片描述
然后安装Navicat Premium,按readme.txt中的步骤操作…

创建数据库与表

1.新建连接

打开Navicat Premium,首先要新建一个连接,选择你需要操作哪种数据库,这里选择MySQL
在这里插入图片描述
自己取一个数据库名,然后点击确定
在这里插入图片描述

2.创建数据库

字咱就不敲了,用图说话!
在这里插入图片描述

填入自己需要建的数据库名,单击确定
在这里插入图片描述

至此连接建好了,数据库也建好了,但是数据库中还没有任何东西

3.创建表

在刚创建的数据库中建立数据表,表的定义如下所示。
表一:Students(学号,姓名,性别,出生日期,院系名称,备注);
在这里插入图片描述
表二:Courses(课程,课程名,先行课,学分);
在这里插入图片描述
表三:SC(学号,课程号,分数)。
在这里插入图片描述
下面介绍具体操作:
选中新建的数据库,单击新建查询,就可以输入sql语句操作了
在这里插入图片描述

输入sql语句,点击运行,这里顺带提一嘴,mysql跟sql server语法上是有些区别的,每条mysql语句都要用分号";"结束,还有PRIMARY KEY部分也有些区别,如下代码是在刚建的数据库mstar中创建三个表,在下面信息那一栏可以看到相关信息

USE mstar;-- 选择数据库mstar

CREATE TABLE students (--创建students表,下面是表中各元素属性
	Sno CHAR (7),
	Sname CHAR (8) NOT NULL,
	Ssex CHAR (2) NOT NULL DEFAULT '男' CHECK (Ssex IN('男', '女')),
	Sbirthday date NULL,
	Sdept CHAR (8) NULL,
	PRIMARY KEY(Sno),
	memo TEXT
);

CREATE TABLE courses (--创建courses 表,下面是表中各元素属性
	Cno CHAR (3),
	Cname VARCHAR (20) NOT NULL,
	PreCno CHAR (3) NULL,
	PRIMARY KEY(Cno),
	Credit TINYINT
);

CREATE TABLE sc (--创建courses 表,下面是表中各元素属性
	Sno CHAR (7) NOT NULL,
	Cno CHAR (3) NOT NULL,
	Grade SMALLINT,
	CONSTRAINT CK_Grade CHECK (Grade BETWEEN 0 AND 100),
	CONSTRAINT PK_SC PRIMARY KEY clustered (Sno, Cno),
	CONSTRAINT FK_Sno FOREIGN KEY (Sno) REFERENCES Students (Sno),
	CONSTRAINT FK_Cno FOREIGN KEY (Cno) REFERENCES Courses (Cno)
);


然后刷新数据库,正常的话可以看到创建的三个表,展开表可以看到表中的信息
在这里插入图片描述

4.填充表

向表中添加内容, 输入如下代码点击运行,如果报错,可以每条语句分开单独执行

INSERT INTO courses VALUES ('C1','程序设计基础(C)',NULL,'4'),('C2','数据库原理','C1','4'),('C3','SQL 程序设计','C2','4'),('C4','音乐欣赏',NULL,'1');

INSERT INTO students VALUES ('0602001','钟文辉','男','1987-05-01','计算机','优秀毕业生'),('0602002','吴细文','女','1987-03-24','计算机','爱好:音乐'),('0602003','吴朝西','男','1988-07-01','计算机',NULL),('0701001','王冲瑞','男','1988-05-04','机电','爱好:音乐'),('0701002','林滔滔','女','1987-04-03','机电',' 爱好:体育'),('0701003','李修雨','女','1986-03-03','机电',NULL),('0703001','李奇','男','1988-09-17','商贸管理',NULL);

INSERT INTO sc VALUES
	('0602001', 'C1', '61'),
	('0602001', 'C2', '72'),
	('0602001', 'C3', '88'),
	('0602002', 'C1', NULL),
	('0602002', 'C2', '61'),
	('0701001', 'C1', '50'),
	('0701001', 'C2', NULL),
	('0701002', 'C3', '78'),
	('0701003', 'C1', '52'),
	('0701003', 'C3', '87');

在这里插入图片描述
刷新表,双击可打开查看表中内容,如下是students表中的内容
在这里插入图片描述
至此,数据库与表已经创建好,并且表中内容也填充好,接下来可以进行增删改查等各种测试了

测试一

1.查表中的内容

use mstar;--选择需要查询的数据
SELECT * FROM students;--选取students表中的信息,SELECT是选取,*代表所有信息

在这里插入图片描述
2.查询计算机系全体学生的信息

SELECT * FROM students WHERE Sdept='计算机'--WHERE是条件选取,相当于C语言中if

在这里插入图片描述
3.查询姓“李”的学生的学号和姓名。

SELECT Sno,Sname FROM Students WHERE Sname LIKE '李%'--从Students表中条件选取姓李的同学的Sno,Sname 这两项数据

4.查询课程表中先行课为空的课程名。

SELECT Cname FROM Courses WHERE PreCno IS NULL--这个简单,条件选取PreCno为NULL的Cname

5.查询考试成绩有不及格的学生的学号。

SELECT Sno, Grade FROM SC WHERE Cno='C1' OR Cno='C2'

6.查询全体计算机系学生的姓名及其年龄。

SELECT 姓名=Sname ,年龄=YEAR(GETDATE())-YEAR(Sbirthday)
FROM Students WHERE Sdept='计算机'

7.查询计算机系在1986-1987 年之间出生的学生的姓名。

SELECT Sname FROM Students 
WHERE Sdept='计算机'AND YEAR(Sbirthday) BETWEEN 1986 AND 1987

8.查询姓“李”的前两个学生的学号和姓名。

SELECT Top 2 Sno,Sname FROM Students WHERE Sname LIKE '
李%'

9.查询选修了两门以上课程的学生学号与课程数。

SELECT Sno,COUNT(Sno) FROM SC GROUP BY Sno HAVING 
COUNT(*)>2

10.查询选修课程数大于等于2 的学生的学号、平均成绩和选课门数,并按
平均成绩降序排列。

SELECT Sno AS '学号', AVG(Grade)AS '平均成绩', COUNT(*) AS '选课门数'
FROM SC GROUP BY Sno HAVING COUNT(*)>=2
ORDER BY AVG(Grade) DESC

测试二

-- (1) 统计选修了【数据库原理】课程的学生人数。
SELECT COUNT(Sno) AS 人数 FROM sc WHERE Cno IN (SELECT Cno 
FROM courses WHERE Cname='数据库原理')

-- (2) 查询没有选修【数据库原理】课程的学生信息。 
SELECT * FROM students
WHERE Sno NOT IN(SELECT Sno FROM sc
WHERE Cno in(SELECT Cno FROM courses
WHERE Cname='数据库原理'))

-- (3) 查询其他系中比计算机系学生年龄都小的学生。
SELECT * FROM students WHERE Sbirthday >ALL 
(SELECT Sbirthday FROM students WHERE Sdept='计算机') AND Sdept <>'计算机'

-- (4) 查询被0602001学生或0602002学生所选修的课程的课程号(用UNION组合查询与IN条件查询两种方法实现)。 
SELECT Cno FROM sc WHERE Sno='0602001'
UNION
SELECT Cno FROM sc WHERE sNO='0602002'

-- (5) 查询0602001 学生和0602002 学生同时选修的课程的课程号。
SELECT Cno FROM sc SC1
WHERE EXISTS(SELECT Cno
FROM sc SC2
WHERE SC1.Cno=SC2.Cno AND SC2.Sno='0602002')
AND Sno='0602001'

-- (6) 查询被0602001 学生选修,但没有被0602002 学生所选修的课程的课程号。
SELECT Cno FROM sc SC1
WHERE NOT EXISTS(SELECT Cno FROM sc SC2
WHERE SC1.Cno=SC2.Cno
AND SC2.Sno='0602002')
AND Sno='0602001'

测试三

-- ① 向表Students 中插入(0601001,赵林, 男,1985-09-08,计算机)的记录。 
INSERT
INTO students
VALUES ('0601001','赵林','男','1985-09-08','计算机',NULL)

-- ② 向SC 表中添加一个学生的选课记录,学号为0601001,所选的课程号为C2。 
-- SC表中有Sno、Cno、Grade 这3 个列。这里只知道学号和课程号,不知道成绩值。
INSERT INTO sc (Sno, Cno)
VALUES
	('0601001', 'C2')

-- ③ 向表Students 中插入(0601002,张修雨,default)记录,该记录的数
-- 据中default 表示默认值‘男’,其他数据表示空值。 
INSERT INTO Students (Sno, Sname)
VALUES
	('0601002', '张修雨')

-- ④ 用CREATE 语句建立表StudentBAK1,包含(与Students 的Sno、Sname、Sdept 相同)3 个字段, 
-- 然后用INSERT SELECT 语句实现向StudentBAK1 添加Students 表中的计算机系学生的学号、姓名、所在系的信息。 
-- 用如下的CREATE 语句建立表StudentBAK1 
USE mstar CREATE TABLE StudentBAK1 (
	Sno CHAR (7) NOT NULL,
	Sname CHAR (7) NOT NULL,
	Sdept CHAR (20) NULL
);

-- 用如下的INSERT 语句向StudentBAK1 表中插入数据 
INSERT INTO StudentBAK1
SELECT Sno,Sname,Sdept
FROM students
WHERE Sdept='计算机'

SELECT Sno,Sname,Sdept FROM StudentBAK1

-- ⑤ 用 SELECT...INTO 语句实现把Students 表中1985 年后(包含1985年)出生的学生的学号、姓名存储到一个新表StudentBAK2。
USE mstar;
SELECT Sno,Sname INTO StudentBAK2 FROM students;-- WHERE Sbirthday > '1984-12-31';

SELECT Sno, Sname FROM StudentBAK2

-- ⑥ 将姓名为【赵林】的同学的所在系改为【机电系】,爱好改为【足球】。
UPDATE students
SET Sdept = '机电系',
 Memo = '足球'
WHERE
	Sname = '赵林'

-- ⑦ 将选修了课程名为【数据库原理】的学生成绩加5 分。 
UPDATE sc
SET Grade=Grade+5
WHERE Cno=(SELECT Cno
FROM courses
WHERE Cname='数据库原理')

SELECT Sno,Grade FROM SC WHERE Cno='C1'

-- ⑧ 将mstar 数据库的StudentBAK1 表中所有姓赵的同学删除。 
DELETE FROM
	StudentBAK1
WHERE
	Sname LIKE '赵%';

-- ⑨ 删除计算机系选修成绩不及格的学生选修记录。 
DELETE FROM sc
WHERE Grade<60 
AND sno in ( SELECT Sno 
FROM Students
WHERE Sdept='计算机') 

-- ⑩ 将mstar 数据库的StudentBAK2 表中的所有行删除。 
DELETE StudentBAK2
SELECT * FROM StudentBAK2

后面就不一一举例了,有兴趣可以自己多试试,推荐一个个人觉得比较好的sql学习网站:https://www.runoob.com/sql/sql-tutorial.html,上面有很多例子。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东皇※太一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值