【校招VIP】MySQL的概念&&数据库&&数据表的操作

01月21日 收藏 0 评论 0 java开发

【校招VIP】MySQL的概念&&数据库&&数据表的操作

转载声明:文章来源https://blog.csdn.net/peng_19_20_qing/article/details/106944582

数据库 MySQL
为什么使用数据库

1
如果通过io流操作文件,非常的不方便

数据库的介绍

1
2
3
4
5
用于储存和管理数据的仓库,能够对数据进行统一的维护和管理
关系型数据库
以二维表格来组织数据结构,表与表之间可能还有一定的关联关系
非关系型数据库
不是以二维表格来组织数据
1
2
使用一种统一的方式操作数据库----SQL
MySQL是一种关联数据库

SQL的分类

1
2
3
4
DDL 数据库定义语言
DML 数据库操作语言【重点】
DQL 数据库查询语言【重点】
DCL 数据库控制语言

DDL 操作数据库和数据表
一.DDL操作数据库
DDL查询数据库

1
2
3
4
查询所有数据库
    SHOW DATABASES;
查询数据库的创建语句
    SHOW CREATE DATABASE 数据库名称;

DDL创建数据库

1
2
3
4
5
6
创建数据库
    CREATE DATABASE 数据库名称;
 创建数据库(判断,如果不存在则创建)
     CREATE DATABASE IF NOT EXISTS 数据库名称;
创建数据库(指定字符集)
    CREATE DATABASE 数据库名称 CHARACTER SET 字符集名称;

DDL修改删除使用数据库

1
2
3
4
5
6
7
8
9
10
修改数据库(修改字符集)
     ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称;
删除数据库
    DROP DATABASE 数据库名称;
 删除数据库(判断,如果存在则删除)
     DROP DATABASE IF EXISTS 数据库名称;
使用数据库
   USE 数据库名称;
查看当前使用的数据库
  SELECT DATABASE();

二.操作数据表
DDL查询数据表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
查询当前正在使用的数据库中的所有表名
    show tables;
查询指定表的结构
    desc 表名
 查看指定数据库中指定表字符集  
   show table status from 数据库名 like ‘表名’
    
    例如
    查询库中所有的表
    SHOW TABLES;
查询user表结构
    DESC USER;
查看mysql数据库中user表字符集
 SHOW TABLE STATUS FROM mysql LIKE 'user';

DDL 创建数据表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE 表名(
列名 数据类型 约束,
列名 数据类型 约束,
...
列名 数据类型 约束
);
数据类型
int:整数类型
double:小数类型
date:日期类型。包含年月日,格式 yyyy-MM-dd
datetime:日期类型。包含年月日时分秒,格式yyyy-MM-dd HH:mm:ss
timestamp:时间戳类型。包含年月日时分秒,格式 yyyy-MM-dd HH:mm:ss
* 如果不给该列赋值、或赋值为null,则默认使用当前系统时间自动赋值
 
varchar(长度):可变长度字符串类型
char :固定长度的字符串
     
    除了字符串必须指定长度,其他不管
    其余见资料MySQL数据类型

复制数据表
CREATE TABLE 表名 LIKE 被复制的表名;
DDL修改数据表

1
2
3
4
5
6
7
8
9
10
11
12
修改表名
     ALTER TABLE 表名 RENAME TO 新表名;
 修改表的字符集
  ALTER TABLE 表名 CHARACTER SET 字符集名称;  
 单独添加一列
     ALTER TABLE 表名 ADD 列名 数据类型;
 修改某列的数据类型
     ALTER TABLE 表名 MODIFY 列名 新数据类型;
 修改列名和数据类型
    ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型; //如果是varchar,要添加(长度)
 删除某一列
ALTER TABLE 表名 DROP 列名;

DDL删除数据表

1
2
3
4
删除数据表
    DROP TABLE 表名;
 删除数据表(判断,如果存在则删除)
    DROP TABLE IF EXISTS 表名;

三 .表数据的操作(增删改)
DML 新增表数据

1
2
3
4
5
6
7
8
9
给指定列添加数据
    INSERT INTO 表名(列名1,列名2,…) VALUES (值1,值2,…);
给全部列添加数据
    INSERT INTO 表名 VALUES (值1,值2,…);
批量添加数据
   INSERT INTO 表名(列名1,列名2,…) VALUES (值1,值2,…), (值1,值2,…),…;
   INSERT INTO 表名 VALUES (值1,值2,…), (值1,值2,…),…;
注意:
列名和值的数量以及数据类型要对应,除了数字类型,其他数据类型的数据都需要加引号(单引双引都行,推荐单引)

DML修改表数据

1
2
3
4
修改表中的数据
     UPDATE 表名 SET 列名1=值1,列名2=值2,… [WHERE 条件];
注意:
    修改语句中必须加条件,如果不加条件,则会将所有数据都修改。

DML删除表中的数据

1
2
3
4
删除表中的数据
    DELETE FROM 表名 [WHERE 条件];
注意:
     删除语句中必须加条件,如果不加条件,则会将所有数据都删除

DQL 表数据查询【重点】
查询语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
单表查询完整语法
SELECT
    字段列表
FROM
    表名列表
WHERE
     条件列表
GROUP BY
     分组字段
HAVING
     分组后的过滤条件
ORDER BY
      排序
LIMIT
      分页限定

查询全部

1
2
3
4
5
6
7
8
9
10
11
12
查询全部的表数据
     SELECT * FROM 表名;
 查询指定字段的表数据
     SELECT 列名1,列名2,… FROM 表名;
 去除重复查询
     SELECT DISTINCT 列名1,列名2,… FROM 表名;
注意:去除重复,必须是查询的所有列都重复
  
    计算列的值(四则运算)
    SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;
 起别名查询
   SELECT 列名 AS 别名 FROM 表名;

条件查询
条件查询分类


条件查询语法

1
SELECT 列名列表 FROM 表名 WHERE 条件;

案列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
    条件查询
    标准语法:
        SELECT 列名列表 FROM 表名 WHERE 条件;
*/
-- 查询库存大于20的商品信息
SELECT * FROM product WHERE stock > 20;
 
 
-- 查询品牌为华为的商品信息
SELECT * FROM product WHERE brand='华为';
 
-- 查询金额在4000 ~ 6000之间的商品信息
SELECT * FROM product WHERE price >= 4000 AND price <= 6000;
SELECT * FROM product WHERE price BETWEEN 4000 AND 6000;
 
 
-- 查询库存为14、30、23的商品信息
SELECT * FROM product WHERE stock=14 OR stock=30 OR stock=23;
SELECT * FROM product WHERE stock IN(14,30,23);
 
-- 查询库存为null的商品信息
SELECT * FROM product WHERE stock IS NULL;
 
-- 查询库存不为null的商品信息
SELECT * FROM product WHERE stock IS NOT NULL;
 
 
-- 查询名称以小米为开头的商品信息
SELECT * FROM product WHERE NAME LIKE '小米%';
 
-- 查询名称第二个字是为的商品信息
SELECT * FROM product WHERE NAME LIKE '_为%';
 
-- 查询名称为四个字符的商品信息
SELECT * FROM product WHERE NAME LIKE '____';
 
-- 查询名称中包含电脑的商品信息
SELECT * FROM product WHERE NAME LIKE '%电脑%';

聚合函数查询
聚合函数的分类


聚合函数的查询语法

1
SELECT 函数名(列名) FROM 表名 [WHERE 条件];

例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
    聚合函数
    标准语法:
        SELECT 函数名(列名) FROM 表名 [WHERE 条件];
*/
-- 计算product表中总记录条数
SELECT COUNT(*) FROM product;
-- 查看所有数据
    select * from product;
-- 获取最高价格
SELECT MAX(price) FROM product;
 
-- 获取最低库存
SELECT MIN(stock) FROM product;
 
-- 获取总库存数量
SELECT SUM(stock) FROM product;
 
-- 获取品牌为苹果的总库存数量
SELECT SUM(stock) FROM product WHERE brand='苹果';
 
-- 获取品牌为小米的平均商品价格
SELECT AVG(price) FROM product WHERE brand='小米';

排序

1
2
3
4
5
6
select from where...order by 列名1 排序方式1,列名2 排序方式2
    语法
    SELECT 列名列表 FROM 表名 [WHERE 条件] ORDER BY 列名 排序方式,列名 排序方式,…;
注意:
排序方式:ASC-升序,DESC-降序
如果有多个排序条件,只有当前边的条件值一样时,才会判断第二条件。

案列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
    排序查询
    标准语法:
        SELECT 列名 FROM 表名 [WHERE 条件] ORDER BY 列名1 排序方式1,列名2 排序方式2;
*/
-- 按照库存升序排序
SELECT * FROM product ORDER BY stock ASC;
-- 默认升序排序,可以省略 ASC
SELECT * FROM product ORDER BY stock;
 
-- 查询名称中包含手机的商品信息。按照金额降序排序
SELECT * FROM product WHERE NAME LIKE '%手机%' ORDER BY price DESC;
 
 
-- 按照金额升序排序,如果金额相同,按照库存降序排列
SELECT * FROM product ORDER BY price ASC,stock DESC;

分组查询
分组查询语法

1
2
3
4
5
6
7
8
SELECT 列名列表 FROM 表名
   [WHERE 条件]
   GROUP BY 分组列名
   [HAVING 分组后的条件过滤]
   [ORDER BY 排序列名 排序方式];
 
注意事项:
where 后面不能跟聚合函数条件,聚合函数条件只能跟在having后面

分页查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
分页查询
    标准语法:
        SELECT 列名 FROM 表名
        [WHERE 条件]
        [GROUP BY 分组列名]
        [HAVING 分组后条件过滤]
        [ORDER BY 排序列名 排序方式]
        LIMIT 当前页数,每页显示的条数;
     
    LIMIT 当前页数,每页显示的条数;
    公式:当前页数 = (第几页-1) * 每页显示的条数
         令每页显示的条数为x
    即  第1页, 当前页数=(1-1)*x  0
        第2页,当前页数 = (2-1)*x   x
        第3页,当前页数 = (3-1)*x   2x
        ...
        第n页 当前页数 = (n-1)*x

约束
约束的介绍

1
2
什么是约束
    对表中的数据进行限定,保证数据的正确性、有效性、完整性!

约束的分类

1
2
3
4
5
6
7
8
单表约束
主键约束
非空约束
唯一约束
     
多表约束
   外键约束
    foreign key

主键约束 PRIMARY KEY

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
主键约束的特点
   主键约束默认包含非空和唯一两个功能。
    一张表只能有一个主键。
    主键一般用于表中数据的唯一标识。
     
     建表时添加主键约束
    CREATE TABLE 表名(
    列名 数据类型 PRIMARY KEY,
    ...
    列名 数据类型 约束
    );
   
     删除主键约束
  ALTER TABLE 表名 DROP PRIMARY KEY;
 
 建表后单独添加主键约束
  ALTER TABLE 表名 MODIFY 列名 数据类型 PRIMARY KEY;

主键自增

1
2
3
4
5
6
7
8
9
10
11
12
13
14
建表时添加主键自增约束
    CREATE TABLE 表名(
    列名 数据类型 PRIMARY KEY AUTO_INCREMENT,
    ...
    列名 数据类型 约束
    );
 
 删除主键自增约束
     ALTER TABLE 表名 MODIFY 列名 数据类型;
 
建表后单独添加主键自增约束
    ALTER TABLE 表名 MODIFY 列名 数据类型 AUTO_INCREMENT;
 
    MySQL 中的自增约束,必须配合键的约束一起使用!

唯一约束

1
2
3
4
5
6
7
8
9
10
11
建表时添加唯一约束
     CREATE TABLE 表名(
    列名 数据类型 UNIQUE,
    ...
    列名 数据类型 约束
    );
 删除唯一约束
     ALTER TABLE 表名 DROP INDEX 列名;
 
建表后单独添加唯一约束
     ALTER TABLE 表名 MODIFY 列名 数据类型 UNIQUE;

非空约束

1
2
3
4
5
6
7
8
9
10
建表时添加非空约束
    CREATE TABLE 表名(
    列名 数据类型 NOT NULL,
    ...
    列名 数据类型 约束
    );
删除非空约束
    ALTER TABLE 表名 MODIFY 列名 数据类型;
 建表后单独添加非空约束
     ALTER TABLE 表名 MODIFY 列名 数据类型 NOT NULL;

约束练习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
-- 创建表(编号、姓名、密码,手机号码)  编号设为主键自增,姓名设为非空,手机号设为唯一
CREATE TABLE acount(
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(30) NOT NULL,
    PASSWORD VARCHAR(30),
    phonenumber INT(11) UNIQUE
);
-- 查询表的详细信息
   DESC acount;
-- 1-1 删除id的主键约束
    注意:要删除id的主键约束,需要先删除自动增长,再删除主动约束
        -- 删除自动增长
        alter table acount modify id int;
       -- 删除id的主键约束
        alter table acount drop primary key;  
 
-- 1-2 添加id的主键约束
    alter table acount modify id int primary key
    //添加主键自增可选可不选
    alter table acount modify id int auto_increment;
 
-- 2-1 删除username非空约束
    alter table acount modify username varchar(30);
-- 2-2 添加username非空约束
    alter table acount modify username varchar(30) not null;
 
-- 3-1 删除 phonenumber 唯一约束
    alter table acount drop index phonenumber;
-- 3-2 添加 phonenumber 唯一约束
    alter table acount modify phonenumber int(11) unique;
 
总结:
  只有删除主键约束和唯一约束时 使用关键字 drop

综合练习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// 现已有一个表格 表明emp 列名如下
/*
    empno:员工编号
    ename:员工姓名
    job:员工职位
    mar:领导编号
    hiredate:入职日期
    sal:工资
    comm:奖金
    deptno:部门编号
*/
// 需求
-- 1 查询出部门编号为30的所有员工
    select * from emp where deptno=30;
 
-- 2 查询所有销售员的姓名、编号和部门编号
    select ename, empno,deptno from emp where job='销售员';
 
-- 3 查询奖金高于工资的员工
    select * from emp where comm > sal;
 
-- 4 查询奖金高于工资60%的员工
    select * from emp where comm > sal*0.6;
 
-- 5 查询10号部门中的所有经理,和20号部门中所有销售员的详细资料
 -- 注 and 优先级 高于 or
    select * from emp where deptno=10 and job='经理' or deptno=20 and job='销售员';
 
-- 6 查询10号部门中的所有经理,和20号部门中所有销售员,还有即不是经理又不是销售员但其工资大或等于         20000的所有员工详细资料
    select * from emp where deptno=10 and job='经理' or deptno=10 and job='销售员' or sal >= 20000 and job not in('经理','销售员');
 
 -- 7 查询无奖金或奖金低于1000的员工
     select * from emp where comm < 1000 or comm is null;
 
-- 8 查询名字由三个字组成的员工
     select * from emp where ename like '___';
  
 -- 9 查询2001年入职的员工
   select * from emp where hiredate like '2001-%';
  
 -- 10 查询所有员工信息按照工资降序排序,如果工资相同则按入职日期升序排序
   select * from emp order by sal desc,hiredate asc;
  
 -- 11 按照部门统计每个部门的人数
 select deptno, count(*) from emp group by deptno;
  
 -- 12 按照部门统计平均工资,降序显示,工资超过50000的不参与统计,只显示前两名。
  SELECT deptno, AVG(sal) AS AVG FROM emp WHERE sal <50000 GROUP BY deptno ORDER BY AVG DESC LIMIT 0,2;
C 0条回复 评论

帖子还没人回复快来抢沙发