数据库(MySQL数据库,SQL结构化查询语言)

本文介绍了服务器和数据库的基本概念,重点讲解了MySQL数据库的下载、安装、登录及服务控制。详细阐述了SQL语言的四大类别:DDL(数据定义)、DML(数据操作)、DQL(数据查询)和DCL(数据控制)。通过实例展示了如何创建、删除数据库和表,以及如何插入、删除和修改数据。此外,还涵盖了查询语句的使用,包括模糊查询、排序和聚合函数。最后,讨论了如何使用DOS命令来管理MySQL服务。
摘要由CSDN通过智能技术生成
  • DDL

  • DML

  • DQL(模糊查询,字段控制,排序,聚合函数)


1.服务器

服务器:能对外提供某种服务的计算机,他软件和硬件的结合。
比如说:一台装有了数据库软件的计算机,能够提供数据的增删改查服务,这台计算机就可以称作为数据库服务器。
再比如:一台装有了 web软件的计算器,能够提供上网服务,这台计算机就可以称作web服务器,来提供网络资源。


2.数据库

* 数据库:
    * 概念:
        * 数据存储的仓库,用于存储和管理数据
        
    * 常见数据库产品:
        * Oracle:oracle公司    大型的关系型数据库    收费的
        * DB2:IBM公司            大型的关系型数据库    收费的
        * Mysql:mysql公司    中小型关系型数据库    免费的。后来被oracle收购,mysql6之后收费(社区版,旗舰版)
        * Sql Server:微软公司    中小型关系型数据库    收费的
        * Sqllite:安卓系统内置数据库 微型关系型数据库    免费的        
        
        
关系型数据库:数据是以 行和列组成的二维表的这种方式来存储数据的,并且表和表之前有对应的关联关系,这种数据库,就称之为关系型数据库。


3.MySQL 数据库

1.下载
https://downloads.mysql.com/archives/installer/

2.卸载
删除 C:\ProgramData\MySQL 这个MySQL文件夹

3.安装


4.使用DOS命令来开启关闭MySQL服务

  • 关闭服务:net stop mysql 注意:以管理员身份,打开控制台

  • 1.手动关闭:我的电脑-->右键-->管理 
    2.cmd-->services.msc,打开服务面板
    3.cmd-->net stop mysql。(注意获取cmd管理员权限)

  • 开启服务: net start mysql

  • services.msc 打开服务面板

  • 删除服务:sc delete mysql


5.SQL

SQL:结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
SQL,是操作关系型数据库的一个规范,所有的关系型数据库的操作,都要遵循此规范,当然允许各家数据库,存在差异,那么这些差异,称之为数据库的方言。


6.SQL 的细分

* sql分类:
        DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
        DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(增、删、改)
        DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
        DQL(Data Query Language):数据查询语言,用来查询记录(数据)。


7.登录和退出数据库

mysql -uroot -p123456  明文登录

mysql -uroot -p  回车
再输入密码  这样就是密文登录


你也可以用mysql自带的客户端 那你只需要输入密码即可

exit 退出数据库


8.控制台快捷键

按上下键,可以翻阅之前输入过的命令
按table 可以补全


9.DDL

创建数据库: create database mydemodb;
查看所有数据库: show databases;
删除数据库: drop database mydemodb;
查看建库语句:show create database mydemodb;  -- 为了查看一下数据库的编码

mysql> show create database mydemodb;
+----------+-------------------------------------------------------------------+
| Database | Create Database                                                   |
+----------+-------------------------------------------------------------------+
| mydemodb | CREATE DATABASE `mydemodb` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-------------------------------------------------------------------+

通过查看这个建库语句,可以看到数据库使用的编码
                                            
可以修改数据库的编码: alter database mydemodb character set='utf8'; 


10.建表,删除表

表:要有表头,这个表头,在mysql中,可以叫做列名,字段名。
在mysql数据库中,字段,要有数据类型。


MySQL 常见的字段的数据类型。

                        * int:整型 id int,
                         * double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
                                            money double(5,2)
                         char:固定长度字符串类型;
                            name char(10)        "张三"
                         * varchar:可变长度字符串类型;
                                name varchar(10)    "张三"
                    
                         text:字符串类型;存大格式的文本 比如存个小说 一般不用
                         blob:字节类型;存字节类型的数据  比如电影字节  图片字节 但是一般不会把字节数据存到数据库当中
                         date:日期类型,格式为:yyyy-MM-dd;
                         time:时间类型,格式为:hh:mm:ss
                        datetime:日期时间类型   yyyy-MM-dd hh:mm:ss
                         * timestamp:时间戳类型     yyyy-MM-dd hh:mm:ss
                        * 如果该类型的字段不给赋值,则默认当前时间
                        
                        
建表:
语法:
create table 表名(
                        列名1 类型1,
                        列名2 类型2,
                        ...
                        列名n 类型n
                    
                    );
                    
例子:

create table student(
id int,
name varchar(10),
sal double(6,2),
birthday date
);

注意:建表之前,先选择一个库
选择库的语句: use mydemodb;

表建好之后可以查看该库下所有的表: show tables;

删除表: drop table student;

修改表名:alter table 旧表名 rename to 新表名;
例子:alter table student rename to stu;


insert into student(name)values('张三');


11.操作表头

create table student(
id int,
name varchar(10),
sal double(6,2),
birthday date
);


-- 增加一个字段
alter table student add(age int);

-- 查看表结构
desc student;

-- 删除一个字段
alter table student drop age;

-- 修改字段名称 chang 旧字段名 新字段名 类型(长度)
alter table student change name username varchar(20);

-- 修改字段的数据类型
alter table student modify username char(24);


-- 其实你可以使用change 既可以修改字段名称也可以修改字段类型

alter table student change username username varchar(20);


12.DML(往表中 增加,删除,修改 数据)

-- 往表中插入数据
--     date:日期类型,格式为:yyyy-MM-dd;
-- 字符串类型的值,要用单引号引起来,日期类型,可以使用日期字符串,注意日期格式

-- 给所有字段插入值
insert into student(id,username,sal,birthday) values(1,'zhangsan',9999.99,'2020-10-10');

-- 给个别字段插入值

insert into student(id,username) values(2,'lisi');

-- 如果你给表中所有字段插入值,可以简写。
insert into student values(3,'zhaoliu',9999.88,'2020-10-15');

-- timestamp:时间戳类型     yyyy-MM-dd hh:mm:ss  如果该类型的字段不给赋值,则默认当前时间
insert into student(id,username,sal,birthday) values(4,'zhangsan',9999.99,null);
insert into student(id,username,sal) values(5,'zhangsan',9999.99);


-- 删除表中的数据

delete from student;  -- 删除表中所有的数据,因为没有加条件。

-- 有条件的进行删除 where 条件  =、!=、<>(不等于)、<、<=、>、>=;or and

delete from student where id=1;
-- or 或者的意思 || 这个运算符也可以
delete from student where id=2 or id=3;

-- and 并且的意思 或者用 && 这个运算符也可以

delete from student where username='zhangsan' and id=4;


-- 修改表中的数据 update
-- 不加的条件的修改

update student set id=1,birthday='2000-10-10';

-- 根据条件来修改 where =、!=、<>(不等于)、<、<=、>、>=;or and

update student set id=2,birthday='2022-10-10' where id=1 and username='lisi';


13.DQL(查询表中的数据)

---------------------------------------------------------------------------------------------------------
雇员表:emp
字段名称    字段类型    说明
empno    int    员工编号
ename    varchar(50)  员工姓名
job    varchar(50)  员工工作
mgr    int    领导编号
hiredate    date    入职日期
sal    decimal(7,2) 月薪
comm    decimal(7,2) 奖金
deptno    int    部门编号

CREATE TABLE emp(
    empno INT,
    ename VARCHAR(50),
    job VARCHAR(50),
    mgr INT,
    hiredate DATE,
    sal DECIMAL(7,2),
    comm decimal(7,2),
    deptno INT
);
INSERT INTO emp values(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp values(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp values(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp values(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp values(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO emp values(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp values(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp values(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERT INTO emp values(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp values(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO emp values(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
INSERT INTO emp values(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO emp values(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO emp values(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);

---------------------------------------------------------------------------------------------------    

语法:
            SELECT 
                selection_list /*要查询的列名称*/
            FROM 
                table_list /*要查询的表名称*/
            WHERE 
                condition /*行条件*/
            GROUP BY 
                grouping_columns /*对结果分组*/
            HAVING 
                condition /*分组后的行条件*/
            ORDER BY 
                sorting_columns /*对结果分组*/
            LIMIT 
                offset_start, row_count /*结果限定*/

-- 查询表中所有数据
select * from student;


-- DQL  就是 select 开头的语句

-- 查询表中所有的数据
-- * 通配所有字段
SELECT * FROM emp;

-- 优化方面,就要查询所有字段,也不建议使用 * 而是把所有字段名称写出来



-- 查询个别字段

SELECT empno,ename,job FROM emp;


-- 条件查询: * 条件查询:where 子句
			=、!=、<>(不等于)、<、<=、>、>=;
			BETWEEN…AND;  在什么范围之间
			IN(SET);
			IS NULL;为空
			IS NOT NULL 不为空
			AND; 并且
			OR;   或者
			NOT;非





SELECT * FROM emp;

SELECT * FROM emp WHERE empno=7369;

SELECT * FROM emp WHERE empno!=7369;


-- 查询工资大于等于 1000 小于等于1500的员工

-- and 并且 &&

SELECT * FROM emp WHERE sal>=1000 AND sal<=1500;



-- BETWEEN…AND;  在什么范围之间

SELECT * FROM emp WHERE sal BETWEEN 1000 AND 1500;





SELECT * FROM emp;

-- 查询员工号是 7369 7499 7521 7566
-- or 或者 可以使用 ||

SELECT * FROM emp WHERE empno=7369 OR empno=7499 OR empno=7521 OR empno=7566;

-- in
SELECT * FROM emp WHERE empno IN(7369,7499,7521,7566);

-- not in

SELECT * FROM emp WHERE empno NOT IN(7369,7499,7521,7566);



-- 查询奖金是null的员工

-- 注意null值,用 =号 判别不出来
SELECT * FROM emp WHERE comm=NULL;

-- 要判断null值使用 is null

SELECT * FROM emp WHERE comm IS NULL;

-- 不为null is not null

SELECT * FROM emp WHERE comm IS NOT NULL;



-- 给字段起别名,用于临时展示用 as  as可以省略不写


SELECT empno,ename,job FROM emp;


SELECT empno AS 员工编号,ename AS 员工姓名,job 工作岗位 FROM emp;

-- 对于数值型的字段,可以进行数学运算

SELECT empno,ename,job,sal FROM emp;

SELECT empno,ename,job,sal AS 月薪, sal*12 AS 年薪 FROM emp;


-- null值参与数学运算,结果也是null,我们想要把null当成0来处理



SELECT empno,ename,job,sal AS 月薪,comm AS 奖金, sal*12+comm AS 年薪 FROM emp;


-- null值的处理 
IFNULL(comm,0)


SELECT empno,ename,job,sal AS 月薪,comm AS 奖金, sal*12+IFNULL(comm,0) AS 年薪 FROM emp;


-- 查询工资是 1250

--  DISTINCT 去重

SELECT DISTINCT sal FROM emp WHERE sal=1250;
-- 多个字段去重,把多个字段看做整体来去重
SELECT DISTINCT ename,sal FROM emp WHERE sal=1250;



-- 聚合函数: 对列做运算


-- 统计个数 count(字段)




SELECT COUNT(empno) AS 总人数 FROM emp;
-- 你也可以写成 *
SELECT COUNT(*) AS 总人数 FROM emp;

-- 统计有奖金的人数  null值不参与统计
SELECT COUNT(comm) AS 总人数 FROM emp;

--  统计总工资 sum(sal)


SELECT SUM(sal) AS 总工资 FROM emp;

-- 统计平均工资 avg(sal)

SELECT AVG(sal) AS 总工资 FROM emp;

-- 最高工资
SELECT MAX(sal) AS 最高工资 FROM emp;

-- 最低工资

SELECT MIN(sal) AS 最低工资 FROM emp;






-- 排序 order by  ASC 默认值  DESC 降序排列

SELECT * FROM emp ORDER BY sal;  -- 默认就是升序排列

SELECT * FROM emp ORDER BY sal ASC;  -- 默认就是升序排列

SELECT * FROM emp ORDER BY sal DESC;  -- 默认就是奖序排列
-- 定义多个排序字段
SELECT * FROM emp ORDER BY sal DESC,comm DESC;  -- 降序排列

-- 有条件的排序
SELECT * FROM emp WHERE comm IS NOT NULL ORDER BY sal DESC;  -- 降序排列

-- 排序字符串,按照字典顺序来排序
SELECT * FROM emp ORDER BY ename ASC;  -- 默认就是升序排列

-- 按照日期排序
SELECT * FROM emp ORDER BY hiredate ASC;  -- 默认就是升序排列



-- * 模糊查询:like
-- * 通配符
				
--  _  匹配单个任意字符
                                
--  %  匹配多个任意字符

-- 查询姓名包含A的员工


SELECT * FROM emp WHERE ename LIKE '%A%';

-- 查询姓名是A开头的员工

SELECT * FROM emp WHERE ename LIKE 'A%';


SELECT * FROM emp WHERE ename LIKE '%N';

-- 查询第二个字母是A的人

SELECT * FROM emp WHERE ename LIKE '_A%';

-- 查询姓名是四个字母组成的

SELECT * FROM emp WHERE ename LIKE '____';




SELECT * FROM emp WHERE ename LIKE '____' ORDER BY sal DESC;  -- 降序排列


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值