因为女朋友要做测试了,问我都该学些什么,考虑到循序渐进,网上的教程又不是那么通俗易懂,所以写点sql的教程给女朋友看。
本次使用的数据库为mysql,管理工具为navicat。我新建了两张表,一张学生表,一张成绩表,接下来将通过这两张表来给女朋友讲一下增删改查的操作,首先我们先创建数据库和表,可以通过查询或者管理工具的方式。如果使用cmd终端连接本地mysql数据库的话执行命令
mysql -u root -p
然后会提示输入密码,输入正确密码就连接成功了,如果使用管理工具的话
就配置好直接连接就好了。
创建数据库的sql语句:
CREATE DATABASE 数据库名称
管理工具也可以通过页面的方式来创建。数据库创建好了以后就可以创建表啦,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;
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="男";
查询结果为:
2、第二题,查询张三的性别,这个也很简单,就一个select搞定,只不过查询结果是线上性别这个字段了
SELECT sex FROM student WHERE name="张三";
查询结果为:
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 是我给这两张表起的别名,使用表名空格别名的方式来起别名
他们的查询结果是相同的:
4、第四题,查询英语60分以上的学生,其实和第三题差不多,我就用表连接的方式来写了
SELECT
*
FROM
student st
INNER JOIN achievement cj ON cj.student_id = st.id
WHERE
cj.class = "英语"
AND cj.fraction >= 60;
结果为:
5、第五题,查询张三的总分,这个比上面多了一个函数,SUM,sql中有很多内置的函数可以用,而这个函数是用来求和的
查询:
SELECT
SUM( cj.fraction )
FROM
student st
INNER JOIN achievement cj ON cj.student_id = st.id
WHERE
NAME = "张三";
6、第六题,增加一个学生赵哈哈,性别女,班级三班,这个我们就要用到insert语句了
查询:
INSERT INTO student (id,`name`,sex,stu_class) VALUES (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 = "语文"
结果为:
8、第八题删除王五的英语成绩,这个需要使用delete语法啦
查询:
DELETE
FROM
achievement
WHERE
student_id IN ( SELECT id FROM student WHERE NAME = "王五" )
AND achievement.class = "英语";