以下为第三阶段,MySQL数据库的学习,之前屯的第二阶段html、js、jquery会同步更新

数据库

何为数据库

简单来书:就是将数据持久化,存储数据并加以管理的仓库

DB(Database)数据库,另外,还有常见的DBMS表示数据库管理系统(Database Management System)。

常见的数据库

早期发展的数据库建立在数据的紧密关系之上(如:父子关系)我们称其为关系型数据库
现今数据库建也有建立在数据的松散关系基础之上,随着时代发展,传统的关系型数据库虽无法被替代,但也不再是一家独大。

关系型数据库(), Oracle、MySQL、SQLServer
非关系型数据库(), MongoDB、Redis、ElasticSearch、Hive、HBase

MySQL数据库安装

mysql官网

如下如所示,根据自己电脑的操作系统(64或32位下载对应的数据库版本)

Java 检查读取数据库值为空 java查询数据库语句_数据库


Java 检查读取数据库值为空 java查询数据库语句_Java 检查读取数据库值为空_02

Java 检查读取数据库值为空 java查询数据库语句_mysql_03

下载完成后,找到以前我们说过的,将自己的工作需要的软件放在一起。
然后开始安装:
1、解压mysql-8.0.26-winx64.zip
2、将my.ini文件解压之后的mysql-8.0.26-winx64目录下
3、修改my.ini文件

设置为你的mysql的安装目录

basedir=F:\development\mysql-8.0.26-winx64 
        # 设置mysql数据库的数据的存放目录
        datadir=F:\development\mysql-8.0.26-winx64\data
注意事项修改成自己的安装路径,不要照抄

Java 检查读取数据库值为空 java查询数据库语句_数据库_04

4、需要在系统环境变量path中添加mysql路径

以前配过java的环境变量,不会的找找

Java 检查读取数据库值为空 java查询数据库语句_mysql_05


5、然后在mysql的bin目录下打开cmd命令

一、执行MySQL安装命令:mysqld --initialize --console

二、在执行安装MySQL服务命令:mysqld --install

三、执行启动MySQL服务的命令 net start mysql

四、执行修改密码命令 mysqladmin -uroot -p password

Java 检查读取数据库值为空 java查询数据库语句_数据_06


修改密码后改成自己记得住的,123456其实就可以,有需要以后再改同样操作下载安装SQLyog

文件放个人主页了。

Java 检查读取数据库值为空 java查询数据库语句_sql_07


安装完毕。

简单SQL语句

SQL是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

SQL和JAVA不一样,SQL不区分大小写

SQL语句分类:
  • DDL(Data Definition Language)数据库定义语言

如:create table之类

#DDL数据定义语言

#创建数据库
CREATE DATABASE IF NOT EXISTS myschool;
#删除数据库
DROP DATABASE IF EXISTS myschool;

#创建表,(如果字段名或表名 与关键字冲突,加反引号)

#UNSIGNED:无符号,必须写在 PRIMARY KEY 之前
#ZEROFILL:0填充 ,必须写在 PRIMARY KEY 之前
#PRIMARY KEY:主键
#AUTO_INCREMENT:自增
#COMMENT'' :注释
#NOT NULL:不能为空
#AUTO_INCREMENT=10:初始值

CREATE TABLE IF NOT EXISTS employ(
employNo INT(4) ZEROFILL UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
	 COMMENT'工号',
employName VARCHAR(10) NOT NULL COMMENT'姓名',
sex CHAR(2) NOT NULL COMMENT'性别',
bornDate DATETIME COMMENT'出生日期'
)CHARSET=utf8 AUTO_INCREMENT=10

#设置步长
SET auto_increment_increment=6;

#查看表结构
DESC employ;
#显示表创建语句
SHOW CREATE TABLE employ;
#修改表名
ALTER TABLE employ RENAME AS employee;
#添加字段
ALTER TABLE employee ADD phone VARCHAR(11) NOT NULL;


#修改字段的属性
ALTER TABLE employee MODIFY phone VARCHAR(20);
#同时修改字段名和属性
ALTER TABLE employee CHANGE phone telphone VARCHAR(11);

#删除字段
ALTER TABLE employee DROP telphone;
#删除表
DROP TABLE IF EXISTS employee;
  • DML(Data Manipulation Language)数据操纵语言

如:insert,delete,update,select(插入、删除、修改、检索)简称CRUD操新增Create、查询Retrieve、修改Update、删除Delete

#DML,数据操作语句,数据增加、修改、删除-》 数据更新
#增加数据INSERT into 表名(字段1,字段2)values(字段值1,字段值2);
#主键自增,不需要添加数据
INSERT INTO employee(`employName`,`sex`,`bornDate`)VALUES('海豹','公','2000-1-1');
#nullable,可以为空
INSERT INTO employee(`employName`,`sex`)VALUES('张三','男');
#添加多行数据
INSERT INTO employee(`employName`,`sex`,`bornDate`)
VALUES('脖子','男','2000-1-2'),('门子','男','1999-9-9'),('手机','男','2000-10-12');


#修改数据  UPDATE 表名 set字段名1=字段值2,字段名2=字段值2 where
#不加条件改整列值
UPDATE employee SET `employName`="大门子" WHERE `employName`='张三';
UPDATE `employee` SET sex='女' WHERE `employNo` BETWEEN 13 AND 26;
UPDATE `employee` SET sex='男' WHERE `employNo`>=13 AND `employNo`<=26;

#将姓名是张三,并且性别为男的名字 改了  
UPDATE `employee`SET`employName` = 'K40手机'   WHERE`employName`='手机' AND `sex`='男';
#!!!————————切记————————!!!
#删除数据,不加where条件 是清空数据
DELETE FROM `employ` WHERE `employName`='门子';
#!!!————————切记————————!!!

#清空数据,初始值会重置
TRUNCATE TABLE `employ`;
 

#把student : 子表或从表
#grade 做成主表

#添加外键并命名
ALTER TABLE student 
ADD CONSTRAINT FOREIGN KEY 
fk_gradeId
(GradeId) REFERENCES grade(GradeID);



#删除大三的数据,先删除从表,再删除主表
DELETE FROM student WHERE gradeId=3;
DELETE FROM grade WHERE gradeId=3;
#添加数据
#先添加 主表数据  再改从表数据
INSERT INTO grade(gradeID,gradeName)VALUES(6,"研三");

INSERT INTO student (StudentNo,StudentName,GradeId,Phone,Address,Email)
VALUES(1003,"李四",6,"1350000001","北京西城区","1651@qq.com") ;
  • DQL(Data Query Language)数据库查询语言

如: select 语法

#DQL,数据查询语句,数据查询.............................................
#查询所有字段, 不建议用 * ,会增加网络开销
SELECT * FROM student;
#查询部分字段
SELECT studentName,studentNo,sex FROM student;
#字段起别名(有点像局部变量名?)
SELECT studentName AS 姓名,studentNo学号 FROM student;
#拼接
SELECT CONCAT('姓名:',studentName)AS 姓名,studentNo学号 FROM student;

#查询 学号在1-90000之间的
SELECT * FROM student WHERE studentNo BETWEEN 1 AND 90000;
#查询 地址
SELECT * FROM student WHERE address='河南郑州' OR address='河南信阳';
SELECT * FROM student WHERE address IN('河南郑州','河南信阳');

#模糊查询
#查询姓李的, %代表字符串
SELECT * FROM student WHERE StudentName LIKE '李%';
#查询李xx, _代表单个字符串
SELECT * FROM student WHERE StudentName LIKE '李_';

#去重  同名人只显示一个
SELECT * FROM `StudentName`,`Sex` FROM student WHERE `StudentName` = '';

#select 跟表达式
SELECT 3*100 结果,VERSION,10+20;

#查询日期
SELECT * FROM student WHERE BornDate>'2021-01-01';

#查询姓名(student) 以及 所属班级(grade)名称,等值连接
SELECT studentName,GradeName
FROM student,grade
WHERE student.`GradeId` = grade.`GradeID`

#查询李梅的姓名(student),所属班级(grade)名称,考试成绩,等值连接
#不推荐使用
SELECT s.studentName , g.gradeName, r.ExamResult
FROM student s,grade g, result r
WHERE s.'GradeId' = g.`GradeID`
AND s.`StudentNo`=r.`studentNo`

#常用
SELECT s.studentName , g.gradeName, r.ExamResult
FROM student s
	INNER JOIN grade g ON s.`GradeId`=g.`GradeID`
	INNER JOIN result r ON s.`StudentNo`=r.‘studentNo`


#自连接存储一张类别表,菜单
#查询子菜单及 所属父级菜单名称,自连接同时充当子表和父表
SELECT c.categoryName,p.categoryName
FROM category c
INNER JOIN category p
ON c.pid = p.categoryId;
  • DCL(Data Control Language)数据库控制语言

导出数据库,右键-》 备份/导出
导入数据库,右键-》 执行sql脚本

内连接、左连接、右连接

内连接:

内连接件就是我们平时使用的普通连接,关键字:inner join on
语句:

select * from table1 a
inner join table2 b
on a.id = b.id;

用 inner join on的:

#内连接查询方式:
#加 inner join on
SELECT s.studentNo ,g.GradeName 
FROM Student s INNER JOIN Grade g
ON s.`GradeId` = g.`GradeId`;

不加 inner join on的:

#不加inner join on:
SELECT s.`studentNo`,g.`GradeName` 
FROM student s ,grade g;

通俗来说:内连接查询到的数据,只能获取两个表的交集部分,杠杠的代码来说:

将Student表 与 Grade表连接(inner join),然后通过条件(on…)查询得到s.studentNo 和g.GradeName数据。

但是, 出现例如a表有数据,但是b表没有数据的情况,这条字段是不能查询到的:如图所示

Java 检查读取数据库值为空 java查询数据库语句_Java 检查读取数据库值为空_08

左连接:

顾名思义,为了解决内连接的查询不全问题,左连接会以左表(join前的表)为准

左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

Java 检查读取数据库值为空 java查询数据库语句_Java 检查读取数据库值为空_09

#左连接查询方式:
SELECT a.studentNo ,b.GradeName 
FROM table1 a LEFT JOIN table2 b
ON a.`GradeId` = b.`GradeId`;
右连接:

与左连接对应,右连接会以右表(join前的表)为准

右表(b_table)的记录将会全部表示出来,而左表(a_table)只会显示符合搜索条件的记录。左表记录不足的地方均为NULL。

Java 检查读取数据库值为空 java查询数据库语句_sql_10

#右连接查询方式
SELECT a.studentNo ,b.GradeName 
FROM table1 a RIGHT JOIN table2 b
ON a.`GradeId` = b.`GradeId`;