(18)一篇掌握MySQL数据库基础 基本操作(sql语句语法基础:增删改查、数据库操作、建表操作)上

数据库基础上

  • I、数据库的概念
    • 1.数据库:
    • 2、数据库的对象
    • 3.常见的数据库:
      • (1)关系型数据库:
      • (2)非关系型数据库:存储key value
    • 4.数据库服务器:
  • II、SQL语言
  • III、数据库和表的操作命令(DDL):
    • 一、数据定义操作命令
      • 1.创建数据库:
      • 2.查看数据库:
      • 3.修改数据库的操作:
      • 4.删除数据库:
    • 二、表的结构(CRUD)操作:
    • 1.建表的操作:
      • (1)建表:
      • (2)列的数据类型:
      • (3)约束
    • 2.查看表:
    • 3.修改表:
    • 4.删除表:
  • IV、SQL完成对表中数据的CRUD操作(DML):
    • 一、插入数据:
    • 二、删除数据:
    • 三、修改数据:
    • 四、数据查询:
      • 1.查询语句通用格式:
      • 2.以下通过一个简单的案例来熟悉数据查询操作:
      • 3. 别名查询:
      • 4.去掉重复的值:
      • 5.select运算查询:仅仅在查询结果上做了运算 + - * /
      • 6.条件查询:
      • 7.模糊查询:
      • 8.排序查询:order by 关键字
      • 9.聚合函数:
      • 10.分组查询:group by 关键字

I、数据库的概念

1.数据库:

数据的仓库,里面存储各种数据以及数据之间的关系;数据库是一个软件,组织数据存储的规范、结构、性能。数据库以表的形式存数据。
Mysql:数据库的管理软件、数据库服务器
navicat/SQLyog:客户端。

2、数据库的对象

数据库中用于组织数据、执行指令的概念
(1).表:如何通过SQL指令来操作表以及表中的数据。
(2).视图
(3).存储过程
(4).函数
(5).游标
(6).触发器

3.常见的数据库:

(1)关系型数据库:

主要用来描述实体与实体之间的关系:
实实在在存在的事物:男生和女生、学生和班级、员工和部门
E-R关系图:实体——方框、属性——椭圆、关系——菱形
(1)MySQL:开源免费的适用于中小型企业的免费数据库,sun公司收购了MySQL,sun公司被Oracle收购,Oracle收购之后开始收费了
(2)mariadb:由MySQL创始人搞出来的,直接是MySQL开源版本的一个分支,基本上所有的命令都是一样的。
(3)Oracle:甲骨文公司,收费软件,适用于大型电商网站。
(4)db2:IBM公司,提供解决方案:软件和硬件,服务器架构,银行系统大多采用db2。
(5)SQL server:windows里面,政府网站,并且大学教学通常都是采用SQL verse,图形化工具做的不错。
(6)Sybase:被淘汰了。

(2)非关系型数据库:存储key value

mongodb
redis

4.数据库服务器:

服务器:就是一台电脑,这台安装相关的服务器软件,这些软件会监听不同的端口号,根据用户访问的端口号,提供不同的服务。

II、SQL语言

Structer Query Language 结构化查询语言,是一个跟数据库发指令的标准语言,所有的数据库都支持SQL。

(1)SQL的分类
DDL:数据定义语言。比如定义数据库和表的结构,表名、表列,create(创建)、drop(删除)、alter(修改)。
DML:数据操作语言。比如操作表中的数据 insert(插入)、update(修改)、delete(删除)。
DCL:数据控制语言。定义访问权限,取消访问权限、安全设置 grant。、
DQL:数据查询语言:select(查询)from子句、where子句。
(18)一篇掌握MySQL数据库基础 基本操作(sql语句语法基础:增删改查、数据库操作、建表操作)上_第1张图片

MySQL-8.0.21安装:
这已经是我第n次安装数据库软件了,因为以前每做一次课程设计就安装了一次,也踩了很多的坑,所以这次安装还是比较顺利的,由于时间关系,这里只是记录一下自己的用户名和密码,以后有时间再做一个详细的避坑步骤。
密码默认为:空
用户名:root
登录数据库:以管理员方式运行cmd然后输入:mysql -u root -p

III、数据库和表的操作命令(DDL):

一、数据定义操作命令

1.创建数据库:

(1)直接创建数据库
create database 数据库名字
create database day06;
(2)创建数据库的时候指定字符集
create database 数据库的名字 character set 字符集;
create database day06_2 character set utf8;
(3) 创建数据库的时候指定字符集和校对规则:
create database 数据库的名字 character set 字符集 collate 校对规则;
create database day06_2 character set utf8 collate utf8_bin;

2.查看数据库:

(1)查看所有数据库:
show databases;
(18)一篇掌握MySQL数据库基础 基本操作(sql语句语法基础:增删改查、数据库操作、建表操作)上_第2张图片

以下是三个原始数据库,不能改动。
information_schema
mysql :存放用户名和密码
performance_schema

(2)查看数据库定义的语句
show create database 数据库的名字;
show create database day06;
(18)一篇掌握MySQL数据库基础 基本操作(sql语句语法基础:增删改查、数据库操作、建表操作)上_第3张图片

3.修改数据库的操作:

修改数据库的字符集:
alter database 数据库的名字 character set 字符集
alter database day06_1 character set utf8;

4.删除数据库:

drop database 数据库名字;
drop database day06;

其他数据库操作命令
1.切换数据库:
use 数据库名字:use day06;
2.查看当前正在使用的数据库:
select database();

二、表的结构(CRUD)操作:

(Create)、检索(Retrieve)、更新(Update)和删除(Delete)
(18)一篇掌握MySQL数据库基础 基本操作(sql语句语法基础:增删改查、数据库操作、建表操作)上_第4张图片

1.建表的操作:

(1)建表:

create table 表名(
   列定义,列定义,列定义

列定义:列名 数据类型 约束
create table student(
id int primary key,
name varchar(31),
sex int,
age int
);

(2)列的数据类型:

Java SQL
int int
char/String char(固定长度)/varchar(可变长度)
double double
float float
Boolean Boolean
date date:YYYY-MM-DD
time:hh:mm:ss
datetime:YYYY-MM-DD hh:mm:ss 默认值是null
timestamp:YYYY-MM-DD hh:mm:ss 默认值是当前时间
text:主要用来存放文本
blob:存放的是二进制

(3)约束

数据表中:列定义 = 列名+数据类型+约束
数据类型限定当前表的这一列能填的数据值,约束限定数据的一些具体的限定。
比如:性别(男女)、身份证(唯一)、紧急联系人(必须要有)
(1)非空约束not null:当前列的值不能为空。
(2)默认约束default:当前列没有值,有一个默认的值
(3)检查约束check:检查当前列的是否符合check的范围。mysql不支持检查约束。
(4)唯一约束unique:当前列的每个值是唯一的,不能重复。
(5)主键约束primaray key :当前列的每一行的唯一标识,非空的,唯一的
(6)外键约束foreign key referecnces:代表的是两张表的关系,当前表的当前列依赖于另一张表的某一列。
Student(sno,sname)
score(sno,score):sno依赖Student.sno。

域完整性:对列做约束(数据类型、非空、默认)
实体完整型:对行之间的关系做约束。(唯一、)

2.查看表:

(1)查看所有表:show tables;
(2)查看表的定义:show create table 表名;
(18)一篇掌握MySQL数据库基础 基本操作(sql语句语法基础:增删改查、数据库操作、建表操作)上_第5张图片

(3)查看表的结构:desc 表名;
desc student;

3.修改表:

(1)添加列(add):
alter table 表名 add 列名 列的类型 列的约束
alter table student add chengji int not null;
(2)修改列(modify):
alter table student modify sex varchar(2);
(3)修改列名(change):
alter table student change sex gender varchar(2);
(4)删除列(drop):
alter table student drop chengji;
(5)修改表名(rename):
rename table student to xuesheng;
(6)修改表的字符集:
alter table student character set gbk;

4.删除表:

drop table 表名;

IV、SQL完成对表中数据的CRUD操作(DML):

一、插入数据:

1.单条插入:
insert into 表名(列名1,列名2)values(值1,值1);
insert into student(sid,sname,sex,age)values(1,‘zhangsan’,1,23);
简单写法:(如果插入是全列名的数据,表后面的列名可以省略,如果插入部分列的话,列名不能省略
insert into student values(2,‘zhangsan’,1,23);//主键约束不能重复
2.批量插入:
insert into student values(2,‘zhangsan’,1,23),(3,‘zhangsan’,1,23),(4,‘zhangsan’,1,23);//主键约束不能重复
3.单条插入和批量插入的效率:批量插入高。

二、删除数据:

delete from 表名 where 列 = 值
delete from student where sid=10;
deletae from student;如果没有指定条件,会将表中的数据一条一条全部删除。

面试题:delete删除数据和truncate删除数据的区别:
delete :DML 一条一条删除表中的数据。如果数据比较少,delete比较高效。
truncate:DDL 先删除表再重建表。如果数据比较多,truncate比较高效。

三、修改数据:

update 表名 set 列名1 = 新的值,列名2 = 新的值 where 列名 = 值
update student set sname=‘王五’,sex=‘1’;(所有行都会修改)
update student set sname=‘王五’,sex=‘0’ where sid=6;

四、数据查询:

1.查询语句通用格式:

select*/列名 from 表名 where 条件
select [distinct] [*] [列名,列名2] from 表名 [where 条件];
distinct:去除重复的数据。
select * from student;

2.以下通过一个简单的案例来熟悉数据查询操作:

1.建表:

mysql> create table product(
    -> pid int primary key auto_increment,
    -> pname varchar(10),
    -> price double,
    -> pdate timestamp,
    -> cno int
    -> );

2.插入数据:

mysql> insert into product values(null,'威龙辣条',8,now(),1);
Query OK, 1 row affected (0.04 sec)

mysql> insert into product values(null,'拖鞋',8,now(),1);
Query OK, 1 row affected (0.04 sec)

mysql> insert into product values(null,'毛巾',8,now(),1);
Query OK, 1 row affected (0.04 sec)

3.查看所有商品:

mysql> select * from product;
+-----+--------------+-------+---------------------+------+
| pid | pname        | price | pdate               | cno  |
+-----+--------------+-------+---------------------+------+
|   1 | 小米11       |   998 | NULL                |    1 |
|   2 | 小米11       |   998 | 2020-08-06 17:13:10 |    1 |
|   3 | 威龙辣条     |     8 | 2020-08-06 17:16:45 |    1 |
|   4 | 拖鞋         |     8 | 2020-08-06 17:17:05 |    1 |
|   5 | 毛巾         |     8 | 2020-08-06 17:17:22 |    1 |
+-----+--------------+-------+---------------------+------+

4.查看商品名称和价格:

mysql> select pname,price from product;
+--------------+-------+
| pname        | price |
+--------------+-------+
| 小米11       |   998 |
| 小米11       |   998 |
| 威龙辣条     |     8 |
| 拖鞋         |     8 |
| 毛巾         |     8 |
+--------------+-------+

3. 别名查询:

as 的关键字,as关键字可以省略
——表别名:select p.pname,p.price from product as p;(主要用于多表查询);
select p.pname,p.price from product p;
——列别名:select pname as 商品名称,price as 商品价格 from product;
select pname 商品名称,price 商品价格 from product;

4.去掉重复的值:

mysql> select distinct price from product;
+-------+
| price |
+-------+
|   998 |
|     8 |
+-------+

5.select运算查询:仅仅在查询结果上做了运算 + - * /

mysql> select *,price*1.5 from product;
+-----+--------------+-------+---------------------+------+-----------+
| pid | pname        | price | pdate               | cno  | price*1.5 |
+-----+--------------+-------+---------------------+------+-----------+
|   1 | 小米11       |   998 | NULL                |    1 |      1497 |
|   2 | 小米11       |   998 | 2020-08-06 17:13:10 |    1 |      1497 |
|   3 | 威龙辣条     |     8 | 2020-08-06 17:16:45 |    1 |        12 |
|   4 | 拖鞋         |     8 | 2020-08-06 17:17:05 |    1 |        12 |
|   5 | 毛巾         |     8 | 2020-08-06 17:17:22 |    1 |        12 |
+-----+--------------+-------+---------------------+------+-----------+

6.条件查询:

指定条件,确定要操作的记录
查看商品价格>60元的所有商品信息

mysql> select * from product where price>60;
+-----+----------+-------+---------------------+------+
| pid | pname    | price | pdate               | cno  |
+-----+----------+-------+---------------------+------+
|   1 | 小米11   |   998 | NULL                |    1 |
|   2 | 小米11   |   998 | 2020-08-06 17:13:10 |    1 |
+-----+----------+-------+---------------------+------+

——where后的条件写法:
(1)关系运算符:< < > >= = != <>
<>:不等于 标准SQL语法
!=:不等于 非标准SQL语法
(2)逻辑与算法:and ,or,not
查询商品价格在60到10000之间的商品:

mysql> select * from product where price>60 and price<10000;
+-----+----------+-------+---------------------+------+
| pid | pname    | price | pdate               | cno  |
+-----+----------+-------+---------------------+------+
|   1 | 小米11   |   998 | NULL                |    1 |
|   2 | 小米11   |   998 | 2020-08-06 17:13:10 |    1 |
+-----+----------+-------+---------------------+------+
2 rows in set (0.00 sec)

mysql> select * from product where price between 60 and 1000;
+-----+----------+-------+---------------------+------+
| pid | pname    | price | pdate               | cno  |
+-----+----------+-------+---------------------+------+
|   1 | 小米11   |   998 | NULL                |    1 |
|   2 | 小米11   |   998 | 2020-08-06 17:13:10 |    1 |
+-----+----------+-------+---------------------+------+

7.模糊查询:

_:代表的是一个字符串。
%:代表的是多个字符串。
(1)查询出名字中带有“小”

mysql> select * from product where pname like '%小%';
+-----+----------+-------+---------------------+------+
| pid | pname    | price | pdate               | cno  |
+-----+----------+-------+---------------------+------+
|   1 | 小米11   |   998 | NULL                |    1 |
|   2 | 小米11   |   998 | 2020-08-06 17:13:10 |    1 |
+-----+----------+-------+---------------------+------+

(2)查询第二个字是米的所有商品:’_米%’

mysql> select * from product where pname like '_米%';
+-----+----------+-------+---------------------+------+
| pid | pname    | price | pdate               | cno  |
+-----+----------+-------+---------------------+------+
|   1 | 小米11   |   998 | NULL                |    1 |
|   2 | 小米11   |   998 | 2020-08-06 17:13:10 |    1 |
+-----+----------+-------+---------------------+------+

(3)in 在某个范围内获得值
查询出商品分类ID在,1,4,5里面的所有商品

mysql> select * from product where cno in (1,4,5);
+-----+--------------+-------+---------------------+------+
| pid | pname        | price | pdate               | cno  |
+-----+--------------+-------+---------------------+------+
|   1 | 小米11       |   998 | NULL                |    1 |
|   2 | 小米11       |   998 | 2020-08-06 17:13:10 |    1 |
|   3 | 威龙辣条     |     8 | 2020-08-06 17:16:45 |    1 |
|   4 | 拖鞋         |     8 | 2020-08-06 17:17:05 |    1 |
|   5 | 毛巾         |     8 | 2020-08-06 17:17:22 |    1 |
+-----+--------------+-------+---------------------+------+

8.排序查询:order by 关键字

asc :ascend 升序(默认的排序方式)
desc :descend 降序
查询所有商品,按价格进行降序排序:

mysql> select * from product order by price desc;
+-----+--------------+-------+---------------------+------+
| pid | pname        | price | pdate               | cno  |
+-----+--------------+-------+---------------------+------+
|   1 | 小米11       |   998 | NULL                |    1 |
|   2 | 小米11       |   998 | 2020-08-06 17:13:10 |    1 |
|   3 | 威龙辣条     |     8 | 2020-08-06 17:16:45 |    1 |
|   4 | 拖鞋         |     8 | 2020-08-06 17:17:05 |    1 |
|   5 | 毛巾         |     8 | 2020-08-06 17:17:22 |    1 |
+-----+--------------+-------+---------------------+------+

9.聚合函数:

(1)sum():求和
获得所有商品价格的总和

mysql> select sum(price) from product;
+------------+
| sum(price) |
+------------+
|       2020 |
+------------+
1 row in set (0.00 sec)

(2)avg():求平均值
mysql> select avg(price) from product;
(3)count():统计数量
mysql> select sum(*) from product;
(4)max():最大值
(5)min():最小值
注意:where 条件后面不能接聚合函数
查出商品价格大于平均价格的所有商品
引入子查询

mysql> select * from product where price > (select avg(price) from product);
+-----+----------+-------+---------------------+------+
| pid | pname    | price | pdate               | cno  |
+-----+----------+-------+---------------------+------+
|   1 | 小米11   |   998 | NULL                |    1 |
|   2 | 小米11   |   998 | 2020-08-06 17:13:10 |    1 |

10.分组查询:group by 关键字

(1)根据con字段分组,分组后统计商品的个数

mysql> select cno,count(*) from product group by cno;
+------+----------+
| cno  | count(*) |
+------+----------+
|    1 |        5 |
+------+----------+

(2)根据cno分组,分组统计每组商品价格,并且商品价格>60

mysql> select cno,avg(price) from product group by cno having avg(price)>60;
+------+------------+
| cno  | avg(price) |
+------+------------+
|    1 |        404 |
+------+------------+

having关键字可以直接接聚合函数,出现在分组之后;where 关键字它是不可以接聚合函数,出现在分组之前

select查询语句执行顺序总结:
编写顺序:
S…F…W…G…H…O
select…from…where…group by…having…order by
执行顺序;
F…W…G…H…S…O
from…where…group by…having…select…order by

你可能感兴趣的:(数据库,mysql,数据库,sql)