MySql(全部基础知识一次写不完分几次写)

目录

一、数据库概述

 二、MySQL数据库概述

******重要 


👌 棒棒有言:生活不可能一帆风顺,总会有波折,总会有险阻。生活是个爱开玩笑的孩子,也许今天给你所有,明天又会让你一无所有,无需烦恼,该来的总会来,再黑的夜晚也会有黎明到来的那一刻。不管生活有多么曲折,只要拥有幸福的态度就能挺过漫漫长夜,就能迎来美好的明天。

👌 本章简介:

MySQL是一个关系型数据库管理系统由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。

👍  作者:get棒棒给个关注

👍  重要:请给个关注哦!
 

 

一、数据库概述

 

       数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可

以被各种用户或应用共享的数据集合。 

        数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的

 大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全

性和完整性。用户通过数据库管理系统访问数据库中的数据。  

        数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。

        数据库:存储、维护和管理数据的集合。
 

 二、MySQL数据库概述


        MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公

司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数

据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL 是开源的,目前隶属于 Oracle 旗下产品。

MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。

MySQL 使用标准的 SQL 数据语言形式。
 

MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、

Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。

MySQL 对 PHP 有很好的支持,PHP 是很适合用于 Web 程序开发。

MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持

4GB,64 位系统支持最大的表文件为8TB。

MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。

运行机制:

结构化查询语句分类:

        DDL:数据定义语言,用来定义数据库对象:库、表、列等;

        DML:数据操作语言,用来定义数据库记录(数据);

        DCL:数据控制语言,用来定义访问权限和安全级别;

        DQL:数据查询语言,用来查询记录(数据)。
 

 

============================================================

******重要 

#创建数据库Java221803

CREATE DATABASE IF NOT EXISTS `Java221803`;


#创建表emp

CREATE TABLE `emp`(
`id` INT,
`name` VARCHAR(100),
`gender` VARCHAR(10),
`birthday` DATE,
`salary` FLOAT(10,2),
`entry_date` DATE,
`resume` TEXT
);


#插入数据语法

INSERT INTO emp (id,NAME,gender,birthday,salary,entry_date,RESUME)
VALUES(1,'zhangsan','female','1990-5-10',10000,'2015-5-5-','good girl');
INSERT INTO emp(id,NAME,gender,birthday,salary,entry_date,RESUME)
VALUES(2,'lisi','male','1995-5-10',10000,'2015-5-5','good boy');

INSERT INTO emp(id,NAME,gender,birthday,salary,entry_date,RESUME)
VALUES(3,'你好','male','1995-5-10',10000,'2015-5-5','good boy');

INSERT INTO emp VALUES(4,'wangwu','male','1998-9-9',12500,'2022-3-4','very good');


#批量向表中插入多条数据

INSERT INTO emp
VALUES
(5,'wangwu','male','1998-9-9',12500,'2022-3-4','very good'),
(6,'wangwuer','male','1998-9-2',12500,'2022-3-4','very good'),
(7,'wangwusan','male','1998-11-9',12500,'2022-3-4','very good'),
(8,'wangwusi','male','1998-6-9',12500,'2022-3-4','very good');


#修改数据

UPDATE emp SET salary=15000;
UPDATE emp SET salary=18000 WHERE id=2;

UPDATE emp SET salary=salary+200 WHERE gender='male';

UPDATE emp SET gender='female',salary=15500 WHERE `name`='wangwu';

 

#删除数据

DELETE FROM emp;
DELETE FROM emp WHERE `name`='你好';

二.创建一个表并且插入数据 

CREATE TABLE `stu` (
`sid`    CHAR(6),
`sname`    VARCHAR(50),
`age`    INT,
`gender` VARCHAR(50)
);
INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');
INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female');
INSERT INTO stu VALUES('S_1003', 'zhangSan', 95, 'male');
INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female');
INSERT INTO stu VALUES('S_1005', 'wangWu', 55, 'male');
INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'female');
INSERT INTO stu VALUES('S_1007', 'sunQi', 25, 'male');
INSERT INTO stu VALUES('S_1008', 'zhouBa', 45, 'female');
INSERT INTO stu VALUES('S_1009', 'wuJiu', 85, 'male');
INSERT INTO stu VALUES('S_1010', 'zhengShi', 5, 'female');
INSERT INTO stu VALUES('S_1011', 'xxx', NULL, NULL);
CREATE TABLE `emp1`(
`empno`    INT,
`ename`    VARCHAR(50),
`job`    VARCHAR(50),
`mgr` INT,
`hiredate`DATE,
`sal`    DECIMAL(7,2),
`comm`    DECIMAL(7,2),
`deptno` INT
);

INSERT INTO emp1 VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp1 VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp1 VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp1 VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp1 VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO emp1 VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp1 VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp1 VALUES(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERT INTO emp1 VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp1 VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO emp1 VALUES(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
INSERT INTO emp1 VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO emp1 VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO emp1 VALUES(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);
CREATE TABLE `dept`(
    `deptno`    INT,
    `dname`        VARCHAR(14),
    `loc`        VARCHAR(13)
);

INSERT INTO dept VALUES(10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO dept VALUES(20, 'RESEARCH', 'DALLAS');
INSERT INTO dept VALUES(30, 'SALES', 'CHICAGO');
INSERT INTO dept VALUES(40, 'OPERATIONS', 'BOSTON');

#基础查询
#查询stu表中sid字段和sname字段

SELECT sid,sname FROM stu;


#查询stu表中sid字段、sname字段和age字段

SELECT sid,sname,age FROM stu;


#查询stu表中所有的字段信息

SELECT * FROM stu;


#===============================================================
#条件查询
#查询性别为女,并且年龄大于50的记录

SELECT * FROM stu WHERE gender='female' AND age>50;


#查询学号为S_1001,或者姓名为liSi的记录

SELECT * FROM stu WHERE sid='s_1001' OR sname='lisi';

#查询学号为S_1001,S_1002,S_1003的记录

SELECT * FROM stu WHERE sid='S_1001' OR sid='S_1002' OR sid='S_1003';
SELECT * FROM stu WHERE sid IN('S_1001','S_1002','S_1003');


#查询学号不是S_1001,S_1002,S_1003的记录

SELECT * FROM stu WHERE sid!='S_1001'AND sid!='S_1002' AND sid!='S_1003';
SELECT * FROM stu WHERE sid NOT IN('S_1001','S_1002','S_1003');


#查询年龄为null的记录

SELECT * FROM stu WHERE age IS NULL;

#查询年龄在20到40之间的学生记录

SELECT * FROM stu WHERE age>=20 AND age<=40;
SELECT * FROM stu WHERE age BETWEEN 20 AND 40;#between x and y 是包含x和y这两个值


#查询性别非男的学生记录

SELECT * FROM stu WHERE gender='female';
SELECT * FROM stu WHERE gender!='male';
SELECT * FROM stu WHERE gender<>'male';
SELECT * FROM stu WHERE NOT gender='male';#not 写在字段的前面


#查询姓名不为null的学生记录

SELECT * FROM stu WHERE NOT sname IS NULL;
SELECT * FROM stu WHERE sname IS NOT NULL;


#===========================================================
#模糊查询,使用关键字like来实现,搭配2个通配符,_表示任意一个字符,%表示任意0-n个字符
#查询姓名由5个字母构成的学生记录

SELECT * FROM stu WHERE sname LIKE '_____';


#查询姓名由5个字母构成,并且第5个字母为“i”的学生记录

SELECT * FROM stu WHERE sname LIKE '____i';


#查询姓名以“z”开头的学生记录

SELECT * FROM stu WHERE sname LIKE 'z%';


#查询姓名中第2个字母为“i”的学生记录

SELECT * FROM stu WHERE sname LIKE '_i%';


#查询姓名中包含“a”字母的学生记录

SELECT * FROM stu WHERE sname LIKE '%a%';


#==========================================================

#字段控制查询
#去除重复记录DISTINCT

SELECT * FROM emp1;


#查询emp表中的薪水,相同的数据也会显示

SELECT sal FROM emp1;


#查询emp表中的薪水,去除重复数据

SELECT DISTINCT sal FROM emp1;


#=============================================================
#查看雇员的月薪与佣金之和
#一个数与null进行算术运算,结果为null,可以使用函数将null值转换为0

SELECT * ,sal+comm FROM emp1;


#ifnull(字段名,数据):使用函数ifnull来判断字段是否为null,如果字段为null,转换为指定的数据,如果字段不为null,不做转换,直接使用字段的值

SELECT * ,sal+IFNULL(comm,0) FROM emp1;


#给列名添加别名

SELECT *,sal+IFNULL(comm,0) AS '月薪和佣金之和' FROM emp1;
SELECT empno AS '员工编号',ename AS '员工姓名' FROM emp1;


#as可以省略不写

SELECT empno '员工编号',ename '员工姓名' FROM emp1;


#===========================================================
#排序,使用order by进行排序,升序ASC,默认排序方式,可以不写,降序DESC
#查询所有学生记录,按年龄升序排序

SELECT * FROM stu ORDER BY age ASC;
SELECT * FROM stu ORDER BY age;


#查询所有学生记录,按年龄降序排序

SELECT * FROM stu ORDER BY age DESC; 


#查询所有雇员,按月薪降序排序,如果月薪相同时,按编号降序排序

SELECT * FROM emp1 ORDER BY sal DESC,empno DESC;


#==============================================================
#函数
#获取当前系统的时间

SELECT CURTIME();
SELECT TIMESTAMPDIFF(DAY,'2000-11-19','2022-10-18') AS '天数';


#聚合函数:用来进行纵向统计
#count():统计指定列不为NULL的记录行数;
#查询emp表中记录数

SELECT COUNT(*) AS '表中数据数量' FROM emp1;


#查询emp表中有佣金的人数:

SELECT COUNT(comm) FROM emp1;
SELECT comm FROM emp1 WHERE comm IS NOT NULL;


#查询emp表中月薪大于2500的人数

SELECT COUNT(*) AS '月薪大于2500的人数' FROM emp1 WHERE sal>2500;


#统计月薪与佣金之和大于2500元的人数

SELECT COUNT(*) FROM emp1 WHERE sal+IFNULL(comm,0)>2500;


#查询有佣金的人数,以及有领导的人数

SELECT COUNT(comm) AS '有佣金的人数',COUNT(mgr) AS '有领导的人数' FROM emp1;


#===================================================================
 

#SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
#AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
 

#查询所有雇员月薪和

SELECT SUM(sal) AS '所有雇员月薪和' FROM emp1;


#查询所有雇员月薪和,以及所有雇员佣金和

SELECT SUM(sal) AS '所有雇员月薪和',SUM(comm) AS '雇员佣金合' FROM emp1;


#查询所有雇员月薪+佣金和

SELECT SUM(sal+IFNULL(comm,0)) AS '所有雇员月薪+佣金和' FROM emp1;


#统计所有员工平均工资

SELECT AVG(sal) AS '所有员工平均工资' FROM emp1;

#MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
#MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算; 



#查询最高工资和最低工资

SELECT MAX(sal) '最高工资' FROM emp1;
SELECT MIN(sal) '最低工资' FROM emp1;


#分组查询
#查询每个部门的部门编号和每个部门的工资和:

SELECT deptno ,SUM(sal) FROM emp1 GROUP BY deptno;


#查询每个部门的部门编号以及每个部门的人数:

SELECT deptno,COUNT(*) FROM emp1 GROUP BY deptno;


#查询每个部门的部门编号以及每个部门工资大于1500的人数:

SELECT deptno,COUNT(*) FROM emp1 WHERE sal>1500 GROUP BY deptno;


#====================================================
#HAVING子句
#查询工资总和大于9000的部门编号以及工资和:

SELECT deptno,SUM(sal) FROM emp1 GROUP BY deptno HAVING SUM(sal)>9000;


#LIMIT
#LIMIT用来限定查询结果的起始行,以及总行数。
#查询5行记录,起始行从0开始

SELECT * FROM emp1 LIMIT 0,2;
SELECT * FROM emp1 LIMIT 3,2;
SELECT * FROM emp1 LIMIT 5,2;

##创建tb1,并添加主键

CREATE TABLE `tb1`(
`id` INT PRIMARY KEY,
`name` VARCHAR(50)
)

CREATE TABLE `tb2`(
`id` INT ,
`name` VARCHAR(50),
PRIMARY KEY(id)
)

CREATE TABLE `tb3`(
`id` INT ,
`name` VARCHAR(50),
PRIMARY KEY(id ,NAME)
)


#创建tb4表完成后,添加主键

CREATE TABLE `tb4`(
`id` INT,
`name` VARCHAR(50)
);
ALTER TABLE tb4 ADD PRIMARY KEY(id);
#唯一约束unique:给字段添加了唯一约束后,该字段中的数据具有唯一性
CREATE TABLE `tb5`(
`id` INT PRIMARY KEY,
`name` VARCHAR(50) UNIQUE
);


#域完整性-非空约束 not null 就是不能为空

CREATE TABLE `tb6`(
`id` INT PRIMARY KEY,
`name` VARCHAR(50) NOT NULL,
`sex` VARCHAR(10)
);


#引用完整性:一个表中某个字段的数据来源于另外一个表中某个字段的数据
#外键除了和主键的内容顺序不一样,其他的必须一样

CREATE TABLE `student`(
`sid` INT PRIMARY KEY,
`name` VARCHAR(50) NOT NULL,
`sex` VARCHAR(10) DEFAULT '男'
);

CREATE TABLE `score`(
`id` INT,
`score` INT,
`sid` INT, -- 外键列的数据类型一定要与主键的类型一致
CONSTRAINT fk_score_sid FOREIGN KEY (sid) REFERENCES student(sid)
);
CREATE TABLE `score2`(
`id` INT,
`score` INT,
`sid` INT  -- 外键列的数据类型一定要与主键的类型一致
);
ALTER TABLE score2 ADD CONSTRAINT fk_score2_sid FOREIGN KEY (sid) REFERENCES student(sid)


#1 合并结果集
#1.作用:合并结果集就是把两个select语句的查询结果合并到一起!
#2.合并结果集有两种方式:
#UNION:去除重复记录,例如:SELECT * FROM t1 UNION SELECT * FROM t2;
#UNION ALL:不去除重复记录,例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2。
#3.要求:被合并的两个结果:列数、列类型必须相同
#合并结果集,去除重复记录

CREATE TABLE `t1`(
`a` INT,
`b` VARCHAR(4)
)
CREATE TABLE `t2`(
`c` INT,
`d` VARCHAR(4)
)


#必须一行全部一样才能去除重复记录

SELECT * FROM t1
UNION 
SELECT * FROM t2

SELECT * FROM t1
UNION ALL
SELECT * FROM t2

#连接查询 (非常重要)
#连接查询:连接查询会产生笛卡尔积,从而产生一些不争取的记录,需要进行筛除

SELECT * FROM emp1,dept;


#如果两个表中有相同的字段,可以用来做筛除信息

SELECT * FROM emp1,dept WHERE emp1.`deptno`=dept.`deptno`;


#上面的查询语句是将两个表中的所有字段全部查询出来,也可以查询指定的列

SELECT emp1.`ename`,emp1.`sal`,emp1.`comm`,dept.`dname` FROM emp1,dept WHERE emp1.`deptno`=dept.`deptno`;


#给表取别名

SELECT e.ename,e.sal,e.comm,d.dname FROM emp1 e,dept d WHERE e.`deptno`=d.`deptno`;


#内连接查询:内连接的特点:查询结果必须满足条件

SELECT * FROM emp1 e INNER JOIN dept d ON e.`deptno`=d.`deptno`;
SELECT e.empno,e.ename,e.deptno,d.dname FROM emp1 e INNER JOIN dept d ON e.`deptno`=d.`deptno`;


#外连接查询
#左外连接:先将左边表的所有数据全部查询出来,然后去查询右边的表,满足条件的显示出来,如果右边表中没有左边表中的数据,则全部显示为null

SELECT * FROM emp1 e LEFT OUTER JOIN dept d ON e.`deptno`=d.`deptno`;


#先将右边表的所有数据全部查询出来,然后去查询左边的表,,满足条件的显示出来,如果左边表中没有右边表中的数据,则全部显示为null

SELECT * FROM emp1 e RIGHT OUTER JOIN dept d ON e.`deptno`=d.`deptno`;


#自然连接:系统自动的找出去除笛卡尔积无用记录的关系,要求两个表中存在相同名称相同类型的字段
#自然内连接

SELECT * FROM emp1 NATURAL JOIN dept


#自然左外连接

SELECT * FROM emp1 NATURAL LEFT JOIN dept


#自然右外连接

SELECT * FROM emp1 NATURAL RIGHT JOIN dept


 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

get棒棒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值