赞
踩
比较好用的mysql可视化工具-----pycharm连接mysql图文教程
编写如下SQL代码创建数据库test,然后选中这两行代码,再点击执行操作,结果如下:
注意:执行按钮不是平常执行python脚本的哪个按钮是下图中第二步标注的哪个地方的按钮
-- 如果test数据库不存在,就创建test数据库:
CREATE DATABASE IF NOT EXISTS test;
在建表之前,首先要选择使用哪个数据库,可以手动点击选择:
也可以执行一段SQL语句,
USE test;
执行完毕后,这个地方会变成test
创建两个表格,一个是students存储学生信息,一个classes存储班级信息。
-- 创建classes表: CREATE TABLE classes ( id BIGINT NOT NULL AUTO_INCREMENT, name VARCHAR(100) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 创建students表: CREATE TABLE students ( id BIGINT NOT NULL AUTO_INCREMENT, class_id BIGINT NOT NULL, name VARCHAR(100) NOT NULL, gender VARCHAR(1) NOT NULL, score INT NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
同样是先选中创建表格的代码,再点击执行! 注意只选中建表的代码就行了。
执行完毕后,test下会出现两个表格:
再插入一些数据,为接下来的增删改查操作做准备,具体的插入操作后面会讲。
-- 插入classes记录: INSERT INTO classes(id, name) VALUES (1, '一班'); INSERT INTO classes(id, name) VALUES (2, '二班'); INSERT INTO classes(id, name) VALUES (3, '三班'); INSERT INTO classes(id, name) VALUES (4, '四班'); -- 插入students记录: INSERT INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'M', 90); INSERT INTO students (id, class_id, name, gender, score) VALUES (2, 1, '小红', 'F', 95); INSERT INTO students (id, class_id, name, gender, score) VALUES (3, 1, '小军', 'M', 88); INSERT INTO students (id, class_id, name, gender, score) VALUES (4, 1, '小米', 'F', 73); INSERT INTO students (id, class_id, name, gender, score) VALUES (5, 2, '小白', 'F', 81); INSERT INTO students (id, class_id, name, gender, score) VALUES (6, 2, '小兵', 'M', 55); INSERT INTO students (id, class_id, name, gender, score) VALUES (7, 2, '小林', 'M', 85); INSERT INTO students (id, class_id, name, gender, score) VALUES (8, 3, '小新', 'F', 91); INSERT INTO students (id, class_id, name, gender, score) VALUES (9, 3, '小王', 'M', 89); INSERT INTO students (id, class_id, name, gender, score) VALUES (10, 3, '小丽', 'F', 85);
然后双击classes表和students表格,可以看到数据已经插入成功!
至此,数据准备完毕,同时你也学会了pycharm创建数据库、创建表格的基本操作。
数据库最常用的操作当然是查询了,这里先介绍查询操作。
select * from students;
使用SELECT * FROM <表名>可以查询到一张表的所有记录。但是,很多时候,我们并不希望获得所有记录,而是根据条件选择性地获取指定条件的记录,例如,查询分数在80分以上的学生记录。
SELECT * FROM students WHERE score >= 80;
使用and多条件查询分数大于80的男生信息:
SELECT * FROM students WHERE score >= 80 AND gender = 'M';
使用or查询分数大于等于80或者性别为’M’的学生信息。
SELECT * FROM students WHERE score >= 80 OR gender = 'M';
and和or一起使用:
SELECT * FROM students WHERE (score < 80 OR score > 90) AND gender = 'M';
如果我们只希望返回某些列的数据,而不是所有列的数据,我们可以用SELECT 列1, 列2, 列3 FROM …,让结果集仅包含指定列。这种操作称为投影查询。
SELECT id, score, name FROM students;
我们使用SELECT查询时,细心的读者可能注意到,查询结果集通常是按照id排序的,也就是根据主键排序。这也是大部分数据库的做法。如果我们要根据其他条件排序怎么办?可以加上ORDER BY子句。例如按照成绩从低到高进行排序:
SELECT id, name, gender, score FROM students ORDER BY score;
由高到低排序:
SELECT id, name, gender, score FROM students ORDER BY score DESC;
使用SELECT查询时,如果结果集数据量很大,比如几万行数据,放在一个页面显示的话数据量太大,不如分页显示,每次显示100条。
要实现分页功能,实际上就是从结果集中显示第1100条记录作为第1页,显示第101200条记录作为第2页,以此类推。
因此,分页实际上就是从结果集中“截取”出第M~N条记录。这个查询可以通过LIMIT OFFSET 子句实现。
现在,我们把结果集分页,每页3条记录。要获取第1页的记录,可以使用LIMIT 3 OFFSET 0:
SELECT id, name, gender, score
FROM students
ORDER BY score DESC
LIMIT 3 OFFSET 0;
上述查询LIMIT 3 OFFSET 0表示,对结果集从0号记录开始,最多取3条。注意SQL记录集的索引从0开始。
如果要查询第2页,那么我们只需要“跳过”头3条记录,也就是对结果集从3号记录开始查询,把OFFSET设定为3:
SELECT id, name, gender, score
FROM students
ORDER BY score DESC
LIMIT 3 OFFSET 3;
要注意的是OFFSET超过了查询的最大数量并不会报错,而是得到一个空的结果集。
COUNT()表示查询所有列的行数,要注意聚合的计算结果虽然是一个数字,但查询的结果仍然是一个二维表,只是这个二维表只有一行一列,并且列名是COUNT()。
通常,使用聚合查询时,我们应该给列名设置一个别名,便于处理结果:
– 使用聚合查询并设置结果集的列名为num:
SELECT COUNT(*) num FROM students;
使用聚合查询计算男生平均成绩:
SELECT AVG(score) average FROM students WHERE gender = 'M';
如果我们要统计一班的学生数量,我们知道,可以用SELECT COUNT(*) num FROM students WHERE class_id = 1;。如果要继续统计二班、三班的学生数量,难道必须不断修改WHERE条件来执行SELECT语句吗?
对于聚合查询,SQL还提供了“分组聚合”的功能。
按class_id分组:
SELECT COUNT(*) num FROM students GROUP BY class_id;
但是这3行结果分别是哪三个班级的,不好看出来,所以我们可以把class_id列也放入结果集中:
SELECT class_id, COUNT(*) num FROM students GROUP BY class_id;
这下结果集就可以一目了然地看出各个班级的学生人数。
当我们需要向数据库表中插入一条新记录时,就必须使用INSERT语句。
例如,我们向students表插入一条新记录,先列举出需要插入的字段名称,然后在VALUES子句中依次写出对应字段的值:
添加一条新记录
INSERT INTO students (class_id, name, gender, score) VALUES (2, '大牛', 'M', 80);
-- 查询并观察结果:
SELECT * FROM students;
还可以一次性添加多条记录,只需要在VALUES子句中指定多个记录值,每个记录是由(…)包含的一组值:
INSERT INTO students (class_id, name, gender, score) VALUES
(1, '大宝', 'M', 87),
(2, '二宝', 'M', 81);
SELECT * FROM students;
如果要更新数据库表中的记录,我们就必须使用UPDATE语句。
例如,我们想更新students表id=1的记录的name和score这两个字段,先写出UPDATE students SET name=‘大牛’, score=66,然后在WHERE子句中写出需要更新的行的筛选条件id=1:
UPDATE students SET name='大牛', score=66 WHERE id=1;
-- 查询并观察结果:
SELECT * FROM students WHERE id=1;
注意到UPDATE语句的WHERE条件和SELECT语句的WHERE条件其实是一样的,因此完全可以一次更新多条记录:
UPDATE students SET name='小牛', score=77 WHERE id>=5 AND id<=7;
-- 查询并观察结果:
SELECT * FROM students;
在UPDATE语句中,更新字段时可以使用表达式。例如,把所有80分以下的同学的成绩加10分:
UPDATE students SET score=score+10 WHERE score<80;
-- 查询并观察结果:
SELECT * FROM students;
其中,SET score=score+10就是给当前行的score字段的值加上了10。
如果WHERE条件没有匹配到任何记录,UPDATE语句不会报错,也不会有任何记录被更新。例如:
UPDATE students SET score=100 WHERE id=999;
-- 查询并观察结果:
SELECT * FROM students;
如果要删除数据库表中的记录,我们可以使用DELETE语句。
例如,我们想删除students表中id=1的记录,就需要这么写:
DELETE FROM students WHERE id=1;
-- 查询并观察结果:
SELECT * FROM students;
注意到DELETE语句的WHERE条件也是用来筛选需要删除的行,因此和UPDATE类似,DELETE语句也可以一次删除多条记录:
DELETE FROM students WHERE id>=5 AND id<=7;
-- 查询并观察结果:
SELECT * FROM students;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。