
点击“蓝字”关注我们
前言
本文博客基于数据库MySQL8.0.23,编译器IntelliJ IDEA 2019.3.3,在IDEA中进行数据库连接并进行SQL基本语句操作。
连接数据库
首先打开IDEA工作界面,新建工程,打开数据库Database,点击DaTa Source进入数据库连接界面

输入用户名及密码,测试连接成功后就点击OK,就可以连接好数据库了。

在连接好图后可以得到下图的效果。SQL的数据库在右边可一一展示,也可以选择只展示一部分。左半部分的空白部分,是编写数据库程序的地方,可以把cmd命令里的指令操作给可视化操作。

进行数据库SQL编写的基本语句
进入数据库后,需要掌握基本的SQL语句进行数据库、表的建立和操作;也需要掌握查询的基本方式;积累一些常用的SQL函数集合。本模块着重介绍这方面的基本内容,包括代码即样例。
创建数据库,表以及更新数据的方法
(1)
【创建/使用/删除】【数据库/表】输入标题
在学习掌握数据库基本命令的过程中,创建/删除是最为重要的命令。利用CREATE命令来创建数据库和表。DROP命令删除。USE命令使用数据库,实现数据库间的切换。
比如说,我们要建立一个名字叫做WNB的数据库,里头要有一个叫做student的表格,表格里分为学号,姓名,年级号,性别,出生日期,家庭地址,邮箱。
-- 建立数据库,把create替换为drop即删除数据库create database if not exists WNB;use WNB #使用数据库/表create table if not exists student(`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` VARCHAR(30) NOT NULL COMMENT '姓名',`gradeid` INT(1) NOT NULL COMMENT '年级号',`sex` VARCHAR(2) NOT NULL COMMENT '性别',`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',PRIMARY KEY(`id`))ENGINE = INNODB DEFAULT CHARSET=utf8-- 建立表,INNOBE是引擎,CHARSET是字体形式,一般这种配置显示汉字比较好
(2)
【更改】【数据库/表】
更改数据库、表的命令中,DESC命令,显示出表的结构信息,可以用来检查修改情况。此外,在进行修改时:ALTER是最为重要的命令。利用RENAME AS命令来修改表名。MOTIFY/CHANGE命令都可以进行字段的修改,只不过Change命令只重命名字段,而Modify可以修改约束和字段类型。drop命令删除操作。
-- 显示表结构DESC student;-- 修改表ALTER table student RENAME AS student1;-- 添加字的字段ALTER TABLE student ADD age INT(11);-- 修改表的字段ALTER TABLE student MODIFY age VARCHAR(11); -- 修改约束和字段类型ALTER TABLE student CHANGE age age1 INT(1); -- 重命名字段-- 删除字段ALTER TABLE student DROP age1;-- 删除表DROP TABLE IF EXISTS student;
(3)
【创建/使用/删除】【数据库/表】输入标题
更改数据库、表的信息命令时,INSERT INTO插入命令,是最为重要的命令。格式为INSERT INTO 标明 (字段1,字段2……)VALUES(对应字段1,对应字段2……),比如说我们插入三个数据,如下代码操作即可。
UPDATE命令来设置数据,往往联立WHERE命令进行条件的判断。
DELETE命令和TRUNCATE命令都可以对表中数据进行删除操作。只不过TRUNCATE命令会清空数据表,让计数器归零。
可以训练以下的代码内容:
-- 插入操作:需要一一对应,需要以“;”结尾INSERT INTO `student`(`id`,`name`,`gradeid`,`sex`,`birthday`,`address`,`email`)VALUES (1000,'张三',3,'男','2004-8-9','宿舍楼A101','WNB@qq.com'),(1001,'李四',3,'女','2005-4-9','宿舍楼C101','WFR@qq.com'),(1002,'王五',3,'男','1999-12-9','宿舍楼A201','ZBN@qq.com');-- 更新数值操作UPDATE `student` SET `name` = '赵六' WHERE id =1001; -- where表示条件判断-- 清空指定信息DELETE FROM `student` WHERE id=1000; -- 清空指定信息,但不会影响计数器TRUNCATE `student` -- 清空student表,计数器会归零,不会影响事务
注意:可用同样的方式可以自己创建result,subject等表内容,插入自己的数值结果。
查询操作
(1)
查询【基本知识】和【命令】
查询命令即SELECT,是最为重要的命令,也是数据库操作中最为重要的基础内容。格式为SELECT [某一(些)字段/*(表示全部)] FROM [表名];对于一些重复出现的信息,用DISTINCT命令进行去重,保留一个信息。
除了WHERE命令外,LIKE命令所支持的模糊查询,也一样应用广泛,需要掌握。其中“%”表示字符数不限,一个“_”只能代表一个字符, 通过一一比对字符,来判定查询结果。
可以进行如下的训练操作。
-- 查询全部学生SELECT * FROM student;-- 查询指定字段SELECT `id` AS 学号,`name` AS 姓名 FROM student;-- 查询全部成绩,distinct去重,每个学号只显示一条SELECT DISTINCT `id` FROM result;-- 查看版本SELECT VERSION();-- 考试成绩+1分显示SELECT `id`,`mark`+1 AS '提分后' FROM result;-- where选择查询SELECT `id`,`subid`,`mark` FROM resultWHERE id !=1000;-- Like模糊查询SELECT `id`,`name` FROM studentWHERE `name` LIKE '%牛%'; -- %表示N位数,一个“_”表示一个字母
(2)
【联合查询】
联合查询是联合多张表进行数据的查询,是查询的重点和难点,也是实现数据库目标功能查询的重要手段。联合查询最主要分为联合交叉查询、左、右联表查询三种形式。
JOIN,是联合查询最为标志性的命令,前面通过搭配INNER、LEFT、RIGHT来实现查询的分类。格式为:SELECT [内容] FROM [表] AS [新的名称1] [联合方式] JOIN [表2] AS [新的名称2] ON [新的名称1].[某字段]= [新的名称2].[某字段]对于ON代表的是选择条件,显然两个都会有相同字段的表,才能联合起来一起查询,为避免两个表中查询的字段混叠,需要在SELECT中确定选择查询的是哪一张表的信息。左右联表查询的返回值即为哪个表的值,另一个表的更改,不会引起查询结果的变换。
可以进行如下的训练操作。
-- 联合查询-- 格式:联立subject表和result表,课程id号是联合的媒介,-- 注意书写格式,对于媒介字段需要特别标明是选自哪个表的。SELECT id,s.subid,subname,markFROM `subject` AS sINNER JOIN result AS rON s.subid=r.subid-- 左右联表-- 注意:与联合查询不同之处在于命令,左Left,右Right,-- 左联表查询会从左表返回所有值即使右表没有匹配,-- 右联表同理,左右联表和联合查询可以同时使用。SELECT id,s.subid,subname,markFROM `subject` AS sLEFT JOIN result AS rON s.subid=r.subid-- 注意:由于是左联表查询,返回左表的值即subject,如果-- result表里内容发生改变,得到的结果不会出现右表的改变。
(3)
【分页和排序】
排序和分页都位于Where命令之后,而排序位置靠前分页位置。
排序的命令格式: order by [方式],其中方式填asc为升序;desc降序
分页的命令格式: limit 起始值,页面的大小1
可以进行如下的训练操作:比如在subject表里,建立了一门名叫数据库的课程。要求查询《数据库》课程成绩排名前5的学生信息,并且要求学生该门课程的分数要大于90。 容易知道,需要联合查询科目、成绩以及学生三张表,课程号和学号是连接三张表的纽带。由于成绩排名,并且要取出前5名,所以需要考虑排序和分页。
-- 执行命令:SELECT s.id,`name`,`subname`,markFROM `student` sINNER JOIN `result` rON s.id=r.idINNER JOIN `subject` subON sub.subid=r.subidWHERE subname='数据库' AND mark>=90 -- mark是分数字段,可自己设置ORDER BY mark DESCLIMIT 0,5
mysql常用函数表
MySQL官网提供非常多的内置函数信息,以下整理的这些函数,对于一般的数据库操作是十非常有用的,所以还请各位收藏保留这部分内容,最好能熟练应用,可事半功倍。
下面是一些内置函数应用练习:
--(1)基本函数-- 数学运算SELECT ABS(-8) -- 绝对值SELECT CEILING(9.4) -- 向上取整SELECT FLOOR(9.4) -- 向下取整SELECT RAND() -- 返回随机数SELECT SIGN(10) -- 判断一个数的符号 0-0,负数-1,正数1-- 字符串函数SELECT CHAR_LENGTH('Hello world!') -- 字符串长度SELECT CONCAT('Hello',' world','!') -- 拼接字符SELECT INSERT('我爱美食世界',1,2,'超级热爱') -- 查询,-- 从某个位置开始代替某个长度,本例子是从“我”字符开始替换,2个字节长度,-- 即把“我爱”替换成“超级喜欢”SELECT UPPER('wangshen') -- 大写字母SELECT LOWER('WANGSHEN') -- 小写字母SELECT INSTR('Wangshen','n') -- 返回第一次出现子串的索引SELECT REPLACE('A说你很厉害','你','他') -- 替换出现的指定字符串,你换成他SELECT SUBSTR('AB说他可是特别牛逼',4,6) -- 返回指定的字符子串(源字符串,截取位置,长度)截取出来“他可是特别牛”SELECT REVERSE('猫吃鱼') -- 反转,得到鱼吃猫的结果-- 查询姓 王-->李的同学SELECT DISTINCT REPLACE(`name`,'王','李') FROM studentWHERE `name` LIKE '王%'-- 获取时间SELECT NOW() -- 获取当下时间SELECT CURDATE() -- 获取当前日期,等同于 SELECT CURRENT_DATE(); SELECT LOCALTIME() -- 获取本地时间;SELECT SYSDATE(); -- 获取系统时间SELECT DAY(NOW()) -- 获取当下天数--(2)聚合函数聚合函数用途非常广泛,最常用的来说,分为count,sum,avg,max,min五种。用法:SELECT COUNT(*) FROM student; -- 不会忽略NULLSELECT COUNT(id) FROM student; -- 会忽略NULL值SELECT COUNT(1) FROM student; -- 本质计算行数SELECT SUM(`mark`) AS 总和 FROM resultSELECT AVG(`mark`) AS 平均分 FROM resultSELECT MAX(`mark`) AS 最高分 FROM resultSELECT MIN(`mark`) AS 最低分 FROM result-- 获取成绩单中成绩信息
推荐阅读

2021-01-27

2021-01-26


点击“阅读原文”




