typora-copy-images-to: imgs

以仓储管理系统为例:
http://www.jeewms.cn/wmstest 用户名:test 密码:123456

1. 1. 数据库基本知识(了解)

1.1. 1.1 什么是数据库?

数据库就是存储数据的仓库.说白了就是我们在电脑中安装一个数据库的软件,然后我们通过这个软件可以将数据保存在软件下的某些文件中,然后我们可以通过一门专业的语言(sql)可以高效的对文件中的数据进行增删改查的操作;

mysql:最早是瑞典一家公司开发的,后来被sun公司收购,再后来被oracle公司收购,开源且免费的,但是mysql从5.6版本之后出现了两种版本,一种的社区版本,一种是企业版;

oracle:是oracle公司的产品,闭源且付费的,早期多应用于政府,银行,电商等项目; 去IOE

Sybase:是赛贝斯公司的产品,目前国内用的很少,闭源且付费;

DB2:是IBM公司的产品,闭源且付费的,早起多应用于金融行业;

SqlServer:是微软旗下的产品,闭源且付费;

OceanBase:是阿里旗下的产品,有开源版本,性能非常高,据说比oracle性能都要好;

小结:

1.什么是数据库?

​ 存储数据的仓库;

2.常用的数据库有哪些?

mysql,oracle,sqlserver,db2等

2. 2.关系型数据库(了解)

关系型数据库就是存储的数据是可以有关系的;

以和平精英游戏为例:

玩家信息:玩家编号,玩家的名称等;
微信信息:手机号,微信昵称等;
装备:装备编号,装备名称等;
订单信息:充值的金额,日期,玩家信息等;

我们可以使用ER图(E表示Entity 实体 R表示Relationship )来表示业务关系:

实体:用矩形表示,比如:玩家,微信,装备,订单等
属性:用椭圆表示,比如:玩家信息实体包含玩家编号,玩家的名称等属性信息;
关系:用菱形表示,比如:玩家通过绑定 关联微信号;

image-20201030085946490

3. 3.数据库安装(掌握)

3.1. 注意事项:

1.软件安装的路径和数据存储的路径不要使用默认路径,建议存放到非系统盘下

2.使用默认的端口号:3306

3.统一设置密码:1234(初学密码设置简单一些,防止忘记)

4.配置环境变量

5.检查mysql是否启动

4. 4.命令行客户端连接服务器

目的:测试是否安装成功

说明:基于命令行连接连接数据库的3中方式:

方式1:

-- 格式
mysql -u用户名 -p密码
-- u表示user 用户名
-- p表示password密码

image-20201030091458407

方式2(推荐):

-- 格式
mysql -u 用户名  -p  
-- 点击回车后,需要输入密码

image-20201030091702479

方式3:远程登录

-- 格式:
mysql -h 主机名/IP -P mysql服务端口  -u 用户名 -p 
-- h:host,数据库的域名或者ip

说明:-h 代表主机名称, -P port代表端口

image-20201030091925626

5. 5.图形界面SQLyong客户端

5.1.1. 1.安装注意事项

1)破解

image-20201030092325601

2)连接数据库

image-20201030092551492

3)效果

image-20201030092635186

小结:

1.连接mysql服务的命令方式有哪些?

mysql -u用户名 -p密码  -- 不安全,不推荐
mysql -u 用户名 -p  (enter回车,输入的密码是看不到的)  推荐方式
mysql -h 主机的玉=域名或者ip -P 端口  -u 用户名 -p

2.常见的mysql可视化客户端有哪些?

1.SQLYONG
2.Navicate
3.Datagrip

6. 6.mysql卸载(了解)

1.卸载之前关闭mysql服务,防止卸载文件不完全;

image-20201030093245634

2.控制面板--->程序和功能----->卸载

3.删除数据库安装包下相关的数据;

image-20201030093355680

4.删除注册表中mysql相关的信息;

打开运行窗口-----》输入regedit----》打开注册表-----》删除
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL文件夹

注意:如果数据库运行没什么问题,强烈不建议卸载!

7. 7.服务器与数据库、表、记录的关系(理解)

1)一个mysql软件实例下,可以创建多个数据库
2)一个数据库下可以创建多张表;
3)一张表下以存储多条记录(record)
4)每一行记录可有多个字段(field)

8. 8.SQL语句的分类和语法

8.1.1. 1.什么是SQL

Structured Query Language结构化查询语言。SQL语句不依赖于任何平台,对所有的数据库是通用的。学会了SQL语句的使用,可以在任何的数据库使用,但都有特有内容。SQL语句功能强大、简单易学、使用方便。

8.1.2. 2.SQL特点(了解)

SQL语句是一个非过程性的语言,每一条SQL执行完都会有一个具体的结果出现。多条语句之间没有影响。

以java为例:

int a=10;
int b=20;
int sum=a+b;

sql语言非过程性语言:

sql1;
sql2;
sql3;

8.1.3. 3.SQL分类(掌握)

SQL是用来存取关系数据库的语言,具有定义、操纵、控制和查询关系型数据库的四方面功能。所以针对四方面功能,我们将SQL进行了分类。

  1. DDL(Data Definition Language)数据定义语言 用来定义数据库对象:数据库,表,列等。关键字:create drop alter truncate(清空数据记录) show等

  2. DML(Data Manipulation Language)数据操作语言★★★

    在数据库中更新,增加和删除记录。如 update(更新), insert(插入), delete(删除) 不包含查询

  3. DQL(Data Query Language) 数据查询语言★★★★★ 数据表记录的查询。关键字select。

  4. DCL(Data Control Language)数据控制语言(了解)

    是用来设置或更改数据库用户或角色权限的语句,如grant(设置权限),revoke(撤销权限),begin transaction等。这个比较少用到。

8.1.4. 4.SQL通用语法:

  1. SQL语句可以单行或多行书写,以分号结尾

  2. 可使用空格和缩进来增强语句的可读性。

  3. MySQL数据库的SQL语句不区分大小写,关键字开发中一般大写

    SELECT  *  FROM student;
    
  4. 3种注释 单行注释: -- 注释内容 多行注释: / 注释 /

    # 注释内容(mysql特有的单行注释)

9. 9.DDL创建和查看数据库(了解)

9.1.1. 1.创建数据库语法格式:

-- 直接创建数据库语法格式:
create database 数据库名称;

需求:直接创建数据库db1

image-20201030100937528

9.1.2. 2.判断是否存在并创建数据库

-- 判断是否存在并创建数据库,语法格式:
create database if not exists 数据库名称;

需求:判断是否存在并创建数据库db2

image-20201030101258877

9.1.3. 3.创建数据库并制定编码格式

-- 创建数据库并制定字符集
create database 数据库名称 character set 字符集名称;

需求:创建数据库db3并制定字符集(gbk)

image-20201030101515099

注意:数据库默认编码格式是utf-8

mysql数据库 java
utf8 UTF-8
latin1 ISO8859-1
gbk GBK

9.1.4. 4:查看所有数据库

-- 语法格式:
show databases;

image-20201030101704827

9.1.5. 5:查看某个数据库的定义信息

-- 语法格式:
show create database 数据库名称;

需求:查看db1和db2数据库的sql定义信息

image-20201030101901620

image-20201030101934921

小结:

1.创建数据库的指令有哪些?

1. create database 数据库名称;
2. create database if not exists 数据库名称;
3. create database 数据库名称 character set 编码格式;

2.查看数据库指令有哪些?

1.查看所有的数据库
 show databases;
2.查看sql的创建语句
 show create database 数据库名称;

10. 10.DDL修改和删除数据库(了解)

10.1.1. 1.修改数据库字符集

-- 将数据库的字符集修改,语法格式:
alter database 数据库名称 character set 字符集;

需求:将db3数据库的字符集改成utf8

image-20201030102538050

10.1.2. 2.删除数据库

drop database 数据库名称;

需求:删除db2数据库

image-20201030102730579

小结:

1.修改和删除数据库指令?

1)更新修改编码格式
alter database 数据库名称 character  set 编码格式;
2)删除数据库
drop database 数据库名称;

11. 11.DDL使用数据库(了解)

11.1.1. 1.查看正在使用的数据库

select database();
说明:select表示查看当前的数据库

11.1.2. 2.切换数据库

use 数据库名称;

image-20201030104518767

12. 12.DDL创建表(了解)

1.创建表结构语法格式:

CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2...);
-- 可以写成
CREATE TABLE 表名 (
    字段名1 字段类型1, 
    字段名2 字段类型2
);
比如:
CREATE TABLE user(
   id int,
   name varchar 
);

类比java:
public class User{
  private int id;
  private String name;
}

说明:create表示创建,table 表示表类型

2.mysql常用的类型

eg:varchar(10) "1234567890" "123" 对应java中的String;

​ char(5) "12345" "123" 也是String;

3.需求:创建student表包含id,name,birthday字段

create table student(
 id int,
 name varchar(30),
 birthday date   
);

image-20201030105304413

小结:

1.mysql常用的数据类型有哪些?

1.整数类型 int
2.double
3.日期类型 date
4.定长字符串 char(lenth)
  变长字符串 varchar(lenth)

2.mysql创建表的sql语句格式?

create table 表名(
  字段1  类型,
  字段2  类型2  
);

13. 13.DDL查看表(了解)

13.1.1. 1.查看某个数据下的所有表

-- sql格式
show  tables;

需求.查看数据库中的所有表

image-20201030105940005

13.1.2. 2.查看表结构包含字段信息

desc 表名;
-- desc descriptiion描述

需求:查看student表结构

image-20201030110137668

13.1.3. 3.查看创建表的SQL信息

show create table 表名;

需求3:查看创建表的SQL语句

image-20201030110324523

小结:

1.查看当前库下的所有表名称集合
 show tables;
2.查看表中所有字段信息
 desc 表名;
3.查看创建表的sql信息
 show create table 表名;

14. 14.DDL删除表(了解)

说明:为了方便演示删除,可通过create .... like ..... 语句快速创建一张相同的表结构,然后演示删除操作;

快速创建一个表结构相同的表

create table 表名 like 表名2;

1.直接删除表

-- 语法格式:
drop  table 表名;

需求1:创建s1表(结构与student相同),然后直接删除表s1表

2.判断是否存在表,然后在删除

create table if not exists 表名(字段 类型,...);

需求:判断表st2是否存在,如果存在则将其删除

小结:

1.查看表信息有哪些方式?

2.删除表的语法格式?

15. 15.DDL修改表结构(了解)

注意:因为开发中修改表结构不是很频繁,只需了解即可,等需要使用的时候再回来查即可;

15.1.1. 1.为表添加字段

ALTER TABLE 表名 ADD 字段名/列名 类型;
说明:
alter关键字表示修改操作
table 表示表类型
add 添加字段

需求.为学生表添加一个新的字段remark,类型为varchar(20)

alter table student add remark varchar(20);

image-20201030110838564

15.1.2. 2.修改表中字段的类型

ALTER TABLE 表名 MODIFY 字段名 新的类型;
-- modify表示修改的意思

需求:将student表中的remark字段的改成varchar(100)

alter table student modify remark varchar(100);

image-20201030111157840

15.1.3. 3.修改列名

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型;

需求:将student表中的remark字段名改成intro,类型varchar(30)

alter table student change remark intro varchar(30);

image-20201030111438603

15.1.4. 4.删除列

ALTER TABLE 表名 DROP 字段名;

需求4:删除student表中的字段intro

alter table student drop intro;

image-20201030111603004

15.1.5. 5.修改表名

RENAME TABLE 旧表名 TO 新表名;

需求:将学生表student改名成student3.

rename table student to student3;

image-20201030111931409

15.1.6. 6.修改字符集

ALTER TABLE 表名 character set 字符集;

需求6:将sutden2表的编码修改成gbk

alter table student3 character set gbk;

image-20201030112101001

小结:

1.对表中字段增,改,删操作sql指令?

1)添加字段
alter table 表名  add 字段名称 字段类型;
2)修改字段类型
alter table 表名  modify 字段名称 字段类型;
3)修改字段名称和类型
alter table 表名  change 旧字段名称  新字段名称 新字段类型;
4)删除字段
alter table 表名  drop 字段名称;

2.修改表名及字符集?

1)修改表名
rename table 旧的表名 to 新的表名;
2)修改字符集
alter table 表名 character set 新的字符集;

关键字:

1)修改关键字 alter 类型(database/table) 名称 .....
2)创建库或者表的关键字 create 类型(database/table) 名称 ....
3)删除库或者表 drop 类型(database/table) 名称;
4)查询创建语句 show create 类型(database/table) 名称;
5)删除字段 drop
6)修改字段类型  modify
7)修改字段名称和类型 change

16. 16.SQLyog使用简单入门

注意:我们在实际开发中不会使用dos窗口来操作的,一般使用可视化工具比如Navicate,SQLyong,Datagrip等工具来操作mysql数据库的。

熟悉可视化工具,库,表查看;

image-20201030113538051

17. 17.DML插入记录(重点)

DML:

作用:对表中的数据的增(insert into )删(delete from )改(update set )操作

创建student表包含id,name,age,birthday,sex,address字段:

-- 表结构准备
CREATE TABLE student (
      id INT,
      name VARCHAR(20),
      age int,
      birthday DATE,
      sex char(2),
      address varchar(50)
);

注意:sqlyog创建表完毕后需要刷新才能看到效果;

17.1. 1.插入全部字段

17.1.1. 1.1 所有字段都写出来

-- sql格式如下:
INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2...);
-- 插入全部字段值时,有多少字段就写多少个
说明:
insert into:表示向当前表插入数据
 (字段名1, 字段名2...):表示需要的字段信息
 VALUES :表示字段的值
  (字段值1, 字段值2...):说明:字段顺序与值的顺序要一致;

需求:.向学生表中全字段插入测试数据id=1,name=张三,age=18,birthday='2020-01-01',sex=男,address=上海

insert into student(id,name,age,birthday,sex,address) 
values(1,'张三',18,'2020-01-01','男','上海');

image-20201030114536035

image-20201030114553076

17.1.2. 1.2 插入全部字段时也可不写字段名

说明:如果插入的数据对应的是表中的全部字段,那么字段可以省略不写;

-- 格式
INSERT INTO 表名 VALUES (字段值1, 字段值2...);

需求:向学生表中全字段插入测试数据id=2,name=李四,age=19,birthday='1998-01-01',sex=男,address=北京

insert into student values(2,'李四',19,'1998-01-01','男','北京');

image-20201030114815947

17.2. 2.插入部分字段

-- 格式
INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2...);
-- 需要多少,写多少,但是要保证字段值顺序与字段名顺序一致

需求:向学生表中全字段插入测试数据id=3,name=王五,age=20,address=深圳

/*
Error Code : 1136
Column count doesn't match value count at row 1 
说明:当前输入的是4个字段值,但是表需要6个字段,所以报上述错误;
*/
insert into student values(3,'王五',20,'深圳');
-- 解决
insert into student(id,name,age,address) values(3,'王五',20,'深圳');

17.3. 3.批量插入

-- 格式
INSERT INTO 表名 values(字段值1, 字段值2...),(字段值1, 字段值2...),(字段值1, 字段值2...);

需求:批量插入(4, '赵六', 18, '男', '上海'),(5, '田七', 20, '男', '杭州')两条记录

insert into student values(4, '赵六', 18,'1999-01-01', '男', '上海')
,(5, '田七', 20,'1999-09-09', '男', '杭州');

image-20201030115655396

image-20201030115710233

17.4. 4.小结

1.全字段插入?

insert into 表名 values(v1,v2,...);
说明:v1,v2,...顺序要与表的字段顺序一致;

2.选择字段插入?

insert into 表名(字段1,字段2,....) values(v1,v2,...);

3.批量插入?

insert into 表名(字段1,字段2,....) values(v1,v2,...),(v1,v2,...),....;

18. 18.DML更新表

18.1.1. 1.不带条件更新(全表更新)

-- 格式
UPDATE 表名 SET 字段名=新的值,字段名=新的值,..;-- 说明:最后一个更新的字段不加逗号
-- 关键字说明: 
update--更新表中数据的关键字
set-- 给相关的字段赋值

说明:不带条件的跟新就是对全表数据的更新;

需求1:不带条件修改数据,将所有的性别改成女

-- 在更新语句中,如果没有添加更新条件,那么全表更新
update student set sex='女';

image-20201030140838108

image-20201030140851601

18.1.2. 2.带条件修改

-- 格式
UPDATE 表名 SET 字段名=新的值,字段名=新的值,.. WHERE 条件
-- 关键字说明: update--更新  set--要修改那个字段  where--修改条件

需求2:带条件修改数据,将id号为2的学生性别改成男

update student set sex='女' where id=2;

image-20201030141229848

小结:

1.有/无条件更新语句格式?

1)全表更新(无条件)
update 表名 set 字段名1=v1,字段名2=v2,....;(最后一个没有逗号)
2)条件更新(只更新满足条件的部分)
update 表名 set 字段名1=v1,字段名2=v2,.... where 条件;

19. 19.DML删除表记录

19.1.1. 1.不带条件删除

说明:delete删除时,如果不带条件,就会全表删除

DELETE FROM 表名;
-- 表还在,可以操作,只是删除数据。

需求1:不带条件删除数据,删除表中的所有数据

delete from student ;

19.1.2. 2.带条件删除

DELETE FROM 表名 WHERE 条件;
delete:表示删除表中的数据的关键字;
from:表示指定要删除数据对应的表名称;
where:表示只删除满足条件的数据

需求2:带条件删除数据,删除id为3的记录

delete from student where id=3;
delete from student where id=7 or name='赵六2';

19.1.3. 3.truncate删除表记录,属于DDL

-- 格式
TRUNCATE TABLE 表名;
-- 说明:truncate表示清空表的结构和数据

需求3:清空表数据

truncate table student;

4.truncate和delete的区别

  1)delete是将表中的数据一条一条删除数据,不影响表结构;

  2)truncate是将整个表清除,重新创建一个新的表,新的表结构和原来表结构一模一样

​ 说明:truncate删除表的结构和数据,然后重新创建一张一样的表结构;

5.DML总结

1.插入有哪些方式?

1)全字段添加 insert into
insert into 表名(字段写全) values(顺序写入值);
insert into 表名 values(值1,值2,......);
2)部分字段插入
insert into 表名(字段名1,字段名2,...) values(v1,v2,....);
3)批量插入
insert into 表名(字段名1,字段名2,...) values(v1,v2,....),(v1,v2,....),....;

2.更新有哪些方式?

1)无条件更新(全表更新) update  set
update 表名 set 字段1=v1,字段2=v2,...;(最后一个没有逗号)
2)有条件更新(只更新满足条件的那一部分)
update 表名 set  字段1=v1,字段2=v2,... where 条件;

3.删除有哪些方式?

1)无条件删除(全表删除)delete from 
delete from 表名 ;
2)有条件删除(只删除满足条件的部分)
delete from 表名 where 条件;

20. 20、DQL没有条件的简单查询(重点)

DQL:是对表中的数据进行查询操作, select from

说明:DQL查询不会对数据库中数据进行修改,只是一种显示数据的方式!

20.1.1. 1.查询出所有列数据

-- 方式1:写全字段
SELECT 字段名1, 字段名2, ... FROM 表名;
-- 方式2:使用*表示所有列
select * from 表名 ;
说明:
select关键字:查询 
字段名1, 字段名2, ...:表示查询需要的字段
from:表示数据来自那张表

说明: SELECT -- 表示查询 * 通配符,代表表中的所有字段;

需求1.查询出所有学生信息

-- 全字段查询所有数据
select id,name,age,birthday,sex,address from student;
-- 使用*匹配表中所有字段
select * from student;

image-20201030144506239

20.1.2. 2.查询表中指定列数据

-- 格式
SELECT 字段名1, 字段名2 FROM 表名;
说明:需要哪些字段,就写哪些字段,但是最后一个字段不加逗号

需求2:查询student表中的name 和 age 列

select name,age from student;

image-20201030144703684

20.1.3. 3.AS别名查询

-- 1. 查询时给列、表指定别名需要使用AS关键字  给字段取别名
-- 2. 使用别名的好处是方便观看和处理查询到的数据 给查询的结果取别名;
   `SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;`
   `SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名;`

说明:AS关键字是给字段和查询结果取别名,同时as可以省略;

需求3:查询sudent表中name 和 age 列,name列的别名为”姓名”,age列的别名为”年龄”

select name as 姓名,age  '年龄' from student;

image-20201030145251751

20.1.4. 4.消除重复值

-- 查询指定列并且结果不出现重复数据,格式:
SELECT DISTINCT 字段名,字段名,.. FROM 表名;
说明:distinct关键字后的所有字段值都相同,才去重

需求4:查询address列并且结果不出现重复的address

select distinct address from student;

效果:

image-20201030145853466

select distinct address,age from student;

效果:

image-20201030150124522

image-20201030145800559

小结:

select distinct 字段1,字段2,.. from 表名;
-- 说明:字段值都相同则去重;

20.1.5. 5.查询结果参与运算

数据准备:

ALTER TABLE student ADD math INT;
ALTER TABLE student ADD english INT;
-- 添加数学\英语两个字段后,添加相关的测试数据
5.1 某列数据和固定值运算

需求1:查询姓名、年龄,将每个人的数学增加10分

select name,age,math+10 as 数学 from student;

image-20201030152020764

5.2 某列数据和其他列数据参与运算

需求1:查询所有列与math + english的和并使用别名”总成绩”

select name,math+english as 总成绩 from student;

image-20201030152202262

20.1.6. 6.DQL无条件查询总结

1.全字段查询格式?

1)写出全部字段
select 字段1,字段2,... from 表名;
2)使用*匹配所有字段
select * from 表名;

2.指定字段查询?

select 字段1,字段2from 表名;

3.别名查询?

select 字段1 as 'name1' ,字段2 name2 from 表名;

4.去重查询? distinct

select distinct 字段1,字段2,... from 表名;
-- 效果:所有字段值都相同,才能去重

5.字段参与运算查询?

select name,age,math[+,-,*,/]10 as 数学 from student;
select name,math+english as 总成绩 from student;-- 字段与字段进行数学运算

21. 21、蠕虫复制

什么是蠕虫复制:在已有的数据基础之上,将原来的数据进行复制,插入到对应的表中 语法格式:

insert into 表名1 select * from 表名2;
-- 作用:将表名2中的数据复制到表名1中
说明:insert into 插入表名1的数据来自select * from 表名2的查询数据
    前提:查询的数据要与插入的表中的字段类型和顺序要一致;

需求:

1.创建student2表,student2结构和student表结构一样

2.将student表中的数据添加到student2表中

-- 1.创建student4表,student4结构和student表结构一样
-- 说明:like关键字表示像,就是指定的表结构要一致
create table student4 like student;
-- 蠕虫复制
insert into student4 select * from student;

22. 22.DQL查询语句-条件查询(掌握)

条件查询语法格式:

-- 条件查询格式:
select 字段1,字段2,...... fromwhere  条件;

数据准备:

-- sql准备
CREATE TABLE student3 (
  id int,
  name varchar(20),
  age int,
  sex varchar(5),
  address varchar(100),
  math int,
  english int
);

INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港',99,99),(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);

22.1.1. 1.比较运算法

说明:比较运算符用于条件比较;

>    大于 
<    小于
<=    小于等于
>=    大于等于
=    等于
<>、!=    不等于

使用举例:
-- 查询年龄小于18岁的学生信息
select * from student where age < 18;
-- 需求1:查询math分数大于80分的学生
select * from student3 where math > 80;

-- 需求2:查询english分数小于或等于80分的学生
select * from student3 where english <=80;

-- 需求3:查询age等于20岁的学生
select * from student3 where age=20;

-- 需求4:查询age不等于20岁的学生
select * from student3 where age !=20;
select * from student3 where age <> 20;

22.1.2. 2.逻辑运算符

说明:逻辑运算符用于关联多个条件;

and(&&)  多个条件同时满足 一假即假 开发中用的最多个
or(||)  多个条件其中一个满足 一真即真
not(!)  不满足 取反
举例:
-- 查询名字等于张三且性别为男的学生:
select * from student where name='zhangsan' and sex='男';
-- 需求1.查询age大于35且性别为男的学生(两个条件同时满足)
select * from student3 where age >35 and sex='男';

-- 需求2:查询age大于35或性别为男的学生(两个条件其中一个满足)
select * from student3 where age >35 or sex='男';

-- 需求3:查询id是1或3或5或者7的学生
select * from student3 where id=1 or id=3 or id=5 or id=7;

22.1.3. 3.in关键字

-- 语法格式
SELECT * FROM 表名 WHERE 字段 in (值1, 值2, 值3);

说明:in里面的每个数据都作为一次查询条件,只要满足的就会显示;

需求1:查询id是1或3或5或者7的学生

select * from student3 where id in(1,3,5,7);

image-20201030155202044

需求2:查询id不是1或3或5或者7的学生(not in)

select * from student3 where id not in(1,3,5,7);

image-20201030155303036

扩展: 删除id为1,3,5,7的数据

delete from student3 where id in(1,3,5,7);

22.1.4. 4.between and 范围查询

-- 语法格式
between 值1 and 值2; -- 表示从值1到值2范围,包头又包尾(包含边界值)

比如查询年龄在80到100的用户:
select * from user where age BETWEEN 80 AND 100;

相当于:select * from user where age>=80 and age<=100;

需求:查询english成绩大于等于75,且小于等于90的学生

select * from student3 where english between 75 and 90;
-- 等价于
select * from student3 where english >= 75 and english <=90;

image-20201030155729993

22.1.5. 5.小结

1.比较运算符有哪些?

大于 >
小于 <
大于等于 >=
小于等于 <=
等于 =
不等于 <>  !=

3.逻辑运算符有哪些?

and :并且,多条件同时满足才显示;
or: 或,只要满足任意一个条件,就是显示;
not:条件取反 not in(1,3,5,7);

3.范围查询关键字?

in
between 值1 and  值2;(查询的结果包含边界值)

23. 23、模糊查询like(掌握)

生活中模糊搜索的例子非常多,比如网上购物时,根据输入商品名称模糊匹配;

LIKE表示模糊查询

-- 语法格式
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';

满足通配符字符串规则的数据就会显示出来 所谓的通配符字符串就是含有通配符的字符串 MySQL通配符有两个: %: 表示零到多个字符(任意多个字符) _: 表示一个字符

例如:  
name like '张%' 所有姓张学员。 张,张三,张三丰,张三丰收,... 

name like '%张%' 只要有张就可以。 张 小张 老张子

name like '张_' 所有姓张名字为两个字学员。张三 

name like '张__' 必须三个字,且姓张

name like '_张_'  只有中间是张,前面一个字,后面一个字。

需求1:查询姓马的学生

select * from student3 where name like '马%';

image-20201030161700021

需求2:查询姓名中包含'德'字的学生

select * from student3 where name like '%德%';

image-20201030161748347

需求3:查询姓马,且姓名有三个字的学生

select * from student3 where name like '马__';

image-20201030161852911

小结:

模糊搜索关键字与通配符?

关键字:like
%:匹配表示任意多个字符串(0到多个)
_:匹配单个字符

24. 24、DQL查询

通过ORDER BY子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)

SELECT 字段1,字段2,... FROM 表名 where 条件  ORDER BY 排序的字段 [ASC|DESC];

ASC: 升序排序(默认,可省略不写) DESC: 降序排序

24.1.1. 1.单列排序

说明:单列排序就是使用一个字段排序;

需求1:查询所有数据,使用年龄降序排序

select * from student3 order by age desc;

image-20201030162602469

24.1.2. 2.组合排序

组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推。 上面的例子中,年龄是有相同的。当年龄相同再使用math进行排序

-- 格式
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名1 [ASC|DESC], 字段名2 [ASC|DESC];
举例: 
order by a asc,b  asc
a     b
1     4
2     8 
3     4
2     6
-----结果-----
1     4
2     6
2     8 
3     4


总结:order by多字段排序,首先根据第一个字段进行排序,如果第一个字段有相同的值,那么按照第二个字段进行排序,如果第二个字段也相同,一次类推;
得出最终结论:
   如果第一个字段都不相同,那么后边的字段就不会参与排序运算;

需求:查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序

select * from student3 order by age desc,math desc;

image-20201030163350072

小结:

1.排序关键字及排序方式?

排序关键字: select * from 表名 order by 字段;
排序方式:升序asc(默认,可以不写)
        降序desc

2.多字段排序?

select * from 表名 order by 字段 [asc|desc],字段2....;

25. 25、DQL查询语句-聚合函数(掌握)

五大聚合函数:

count:在根据指定的列统计的时候,如果这一列中有null的行,该行不会被统计在其中。按照列去统计有多少行数据。count(字段) sum: 计算指定列的数值和,如果不是数值类型,那么计算结果为0 max: 计算指定列的最大值 min: 计算指定列的最小值 avg: 计算指定列的平均值

语法格式:

SELECT 聚合函数(字段) FROM 表名;

需求1:查询学生总数

-- 使用english统计学生总数 丢失一条数据
select count(english) from student3;-- 7
-- 一般统计记录数使用count(*)
select count(*) from student3;-- 8

需求2:查询年龄大于40的总数

select count(*) from student3 where age >40;-- 4
说明:如果统计的是全表数据数,那么不需要加条件;

需求3:查询数学成绩总分

select sum(math) from student3;-- 636

需求4:统计数学与英语的总和值。

​ 说明:使用2种方式统计,看效果;

-- 方式1 sum(math)+sum(english)
select sum(math)+sum(english) from student3;-- 1206
-- 方式2: sum(math+english)
-- 说明:在mysql中任何值与null进行数学运算,结果都等于null
select sum(math+english) from student3;-- 1120
-- 解决方式: ifnull(v1,v2),如果v1不为null,那么函数返回v1,否则返回v2
select sum(ifnull(math,0)+ifnull(english,0)) from student3;-- 1206

需求5:查询数学成绩最高分

需求6:查询数学成绩最低分

select max(math) from student3;-- 99

select min(math) from student3;-- 56

需求7:查询数学成绩平均分

说明:avg平均数小数为较多,可通过truncate或者round函数缩短小数为位;

select avg(math) from student3;-- 79.5000
-- 四舍五入 round(v1,v2) v1表示要处理的数据,v2表示要保留的小数位
select round(avg(math),0) from student3;-- 80
-- 不做四舍五入,简单截取 truncate(v1,v2) v1表示要处理的数据,v2表示截取位数
select truncate(avg(math),2) from student3;-- 79.50

小结:

如果聚合函数要聚合的字段值如果为null,不参与聚合运算;

1)行记录数统计: count(*) 
2)最大值:max(字段)
3)最小值:min(字段)
4)求和:sum(字段)
5)平均数:avg(字段)

26. 26、DQL查询语句-分组(掌握)

官方定义:分组就是按照某一列或者某几列。把相同的数据,进行合并输出

1.分组语法

-- 分组格式
select 字段,..... from 表名 group by 字段1,字段2,......
说明:
group by后边的字段值相同才能划分为一组;

1.数据准备

-- 车辆表
create table car(
    id int,
    color char(2),
    price float
);
-- 测试数据
insert into car(id,color,price) values(1,'黄色',16);
insert into car(id,color,price) values(2,'黄色',16);
insert into car(id,color,price) values(3,'蓝色',5);
insert into car(id,color,price) values(4,'红色',60);
insert into car(id,color,price) values(5,'白色',8);
insert into car(id,color,price) values(6,'红色',60);

需求1:查询停车场的每种颜色车辆的总价

select color,sum(price) from car group by color;
说明:
1)先分组,获取分组后的结果集;
2)sum函数对每一组进行求和运算;

image-20201030170913542

2.分组之后数据过滤使用having

-- 语法格式
select 字段,.....from 表名 group by 字段 having 条件;

需求2:查询停车场每种颜色车辆总价大于30W的车辆颜色,并显示总价

select color,sum(price) from car group by color having sum(price)>30;
-- 说明: 一般where条件句用户group by之前,having用于group by之后,表示对分组之后的结果集进行条件过滤;

image-20201030171622275

需求3:查询汽车单价大于10W ,且每种颜色车辆总价大于40W的车辆的颜色,并显示总价;

select color,sum(price) from car where price>10 group by color having sum(price)>40;-- 120

小结:

1.分组关键字?

group by 字段

2.where与having区别?

1)where用于分组之前,不能与聚合函数结合使用;
2)having用于分组之后的条件过滤,可以与聚合函数结合使用;

说明:今日重点17~26重点!

重点回顾:

1)DML:对表中的数据的增删改操作;
  1.添加数据 insert into
    insert into t(字段,....) values(v1,....);
    insert into t values(v1,.....);
    insert into t values(v1,.....),(v2,....);
   2.更新数据 update set
     update t set 字段1=v1,字段2=v2,.... where 条件;
   3.删除 delete from 
     delete from t where 条件;
     truncate table  t;(整张表删除,然后创建一个一样的表)
 2)DQL: 对表中的数据进行查询操作 select from
     select * from t;
     select 字段1,字段2,... from t where 条件;

     1.比较运算符 > < <= >= != = <>
     2.逻辑运算符: and or not
     3.范围查询: in, not in,between v1 and v2;包含边界值
     4.模糊查询:like '通配符字符串'---->%:表示任意多个字符,_:匹配一个字符
         select * from t where name like '张__';
     5.排序查询: order by 字段1 [asc|desc],  by 字段2 [asc|desc] 
        说明:排序规则是根据第一个字段进行排序,如果出现相同的值,那么使用第二个字段进行排序,依次类推;
             推到结论:如果第一个字段都不相同,那么其他字段不参与排序运算;
             select * from t order by a desc,b asc;
     6.5大聚合函数
        统计记录数:count(*)
        统计总和:sum(字段)
        最大值:max(字段)
        最小值:min(字段)
        平均值:avg(字段)
        select 聚合函数(字段) from 表 where 条件;
      7.分组:group by 字段 having 条件过滤
        select 分组字段,聚合函数(字段) from t group by 分组字段 having 条件;

results matching ""

    No results matching ""