超级简单的sql入门(一)

前言

因为女朋友要做测试了,问我都该学些什么,考虑到循序渐进,网上的教程又不是那么通俗易懂,所以写点sql的教程给女朋友看。

准备

本次使用的数据库为mysql,管理工具为navicat。我新建了两张表,一张学生表,一张成绩表,接下来将通过这两张表来给女朋友讲一下增删改查的操作,首先我们先创建数据库和表,可以通过查询或者管理工具的方式。如果使用cmd终端连接本地mysql数据库的话执行命令

mysql -u root -p

然后会提示输入密码,输入正确密码就连接成功了,如果使用管理工具的话
就配置好直接连接就好了。
创建数据库的sql语句:

CREATE DATABASE 数据库名称

管理工具也可以通过页面的方式来创建。数据库创建好了以后就可以创建表啦,sql附在表结构中了。

一、表结构

超级简单的sql入门(一)_第1张图片
这是我的数据库结构
超级简单的sql入门(一)_第2张图片
这是我的学生表,附上sql:


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` int(11) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `stu_class` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '张三', '男', '一班');
INSERT INTO `student` VALUES (2, '李四', '女', '一班');
INSERT INTO `student` VALUES (3, '王五', '男', '二班');

SET FOREIGN_KEY_CHECKS = 1;

超级简单的sql入门(一)_第3张图片
这是我的成绩表,附上sql:


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for achievement
-- ----------------------------
DROP TABLE IF EXISTS `achievement`;
CREATE TABLE `achievement`  (
  `id` int(11) NOT NULL,
  `student_id` int(11) NULL DEFAULT NULL,
  `class` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `fraction` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of achievement
-- ----------------------------
INSERT INTO `achievement` VALUES (1, 1, '语文', '87');
INSERT INTO `achievement` VALUES (2, 1, '数学', '99');
INSERT INTO `achievement` VALUES (3, 1, '英语', '60');
INSERT INTO `achievement` VALUES (4, 2, '语文', '50');
INSERT INTO `achievement` VALUES (5, 2, '数学', '30');
INSERT INTO `achievement` VALUES (6, 2, '英语', '90');
INSERT INTO `achievement` VALUES (7, 3, '语文', '50');
INSERT INTO `achievement` VALUES (8, 3, '数学', '66');
INSERT INTO `achievement` VALUES (9, 3, '英语', '50');

SET FOREIGN_KEY_CHECKS = 1;

二、练习题目

1、查询性别为男的学生
学习基本的条件查询
2、查询张三的性别
学习基本的条件查询
3、查询张三的语文成绩
学习带条件的连接查询
4、查询英语60分以上的学生
学习带条件的连接查询
5、查询张三的总分
学习带条件的连接查询
6、增加一个学生赵哈哈,性别女,班级三班
学习添加数据
7、修改李四的语文成绩为100分
学习修改数据
8、删除王五的英语成绩
学习删除数据

三、用到的语法

1、SELECT 语句 用来查询满足条件的记录

语法:SELECT column_name,column_name FROM table_name;SELECT * FROM table_name;

2、INSERT INTO 语句 用来插入一条记录
语法:INSERT INTO 语句可以有两种编写形式。
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:

INSERT INTO table_name VALUES (value1,value2,value3,...);

第二种形式需要指定列名及被插入的值:

INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);

3、UPDATE 语句 UPDATE 语句用于更新表中已存在的记录。

语法:UPDATE table_name  SET column1=value1,column2=value2,...
WHERE some_column=some_value;

4、DELETE 语句 DELETE 语句用于删除表中的行。

DELETE FROM table_name WHERE some_column=some_value;

5、还有一个高级的用法 INNER JOIN 内连接 INNER JOIN 关键字在表中存在至少一个匹配时返回行。
SQL INNER JOIN 语法

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;

或:

SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;

注释:INNER JOIN 与 JOIN 是相同的。ON 是两张表通过什么字段来关联

四、开始我们的学习

1、首先看第一题,查询性别为男的学生,这个就比较简单了,我们只要查询一张表中满足条件的记录就行了,只用到了select语句

SELECT * FROM student WHERE sex="男";

查询结果为:
超级简单的sql入门(一)_第4张图片
2、第二题,查询张三的性别,这个也很简单,就一个select搞定,只不过查询结果是线上性别这个字段了

SELECT sex FROM student WHERE name="张三";

查询结果为:
超级简单的sql入门(一)_第5张图片
3、第三题,查询张三的语文成绩,这个就要通过两张表来查询了,有两种方式,一种方式是嵌套查询,先查询出张三的id,然后作为条件在成绩表中进行查询,第二中就是通过表连接来查询了,但是为了性能,和优雅方面考虑,比较推荐表连接这种方式
第一种方式:

SELECT
	fraction 
FROM
	achievement 
WHERE
	student_id = ( SELECT id FROM student WHERE NAME = "张三" ) 
	AND class = "语文";

第二种方式:

SELECT
	cj.fraction 
FROM
	student st
	INNER JOIN achievement cj ON cj.student_id = st.id 
WHERE
	st.NAME = "张三" 
	AND cj.class = "语文";

注释:cj和st 是我给这两张表起的别名,使用表名空格别名的方式来起别名
他们的查询结果是相同的:
超级简单的sql入门(一)_第6张图片
4、第四题,查询英语60分以上的学生,其实和第三题差不多,我就用表连接的方式来写了

SELECT
	* 
FROM
	student st
	INNER JOIN achievement cj ON cj.student_id = st.id 
WHERE
	cj.class = "英语" 
	AND cj.fraction >= 60;

结果为:
超级简单的sql入门(一)_第7张图片
5、第五题,查询张三的总分,这个比上面多了一个函数,SUM,sql中有很多内置的函数可以用,而这个函数是用来求和的
查询:

SELECT
	SUM( cj.fraction ) 
FROM
	student st
	INNER JOIN achievement cj ON cj.student_id = st.id 
WHERE
	NAME = "张三";

结果为:
超级简单的sql入门(一)_第8张图片

6、第六题,增加一个学生赵哈哈,性别女,班级三班,这个我们就要用到insert语句了
查询:

INSERT INTO student (id,`name`,sex,stu_class) VALUES (10,"赵哈哈","女","三班");

结果:
超级简单的sql入门(一)_第9张图片
显示这个就是执行成功了
我们看看数据插进去了没有
超级简单的sql入门(一)_第10张图片
7、第七题,修改李四的语文成绩为100分,这个就要同时使用update语句和表连接语句了

UPDATE achievement cj
INNER JOIN student st ON cj.student_id = st.id 
SET cj.fraction = 100 
WHERE
	st.NAME = "李四" 
	AND cj.class = "语文"

结果为:
在这里插入图片描述
超级简单的sql入门(一)_第11张图片
8、第八题删除王五的英语成绩,这个需要使用delete语法啦
查询:

DELETE 
FROM
	achievement 
WHERE
	student_id IN ( SELECT id FROM student WHERE NAME = "王五" ) 
	AND achievement.class = "英语";

结果:在这里插入图片描述

好啦到这里我们增删改查全部学会啦,快去试试吧!

你可能感兴趣的:(数据库,mysql,sql,数据库)