数据库的分类(了解):

关系数据库

几乎所有的数据库管理系统都配备了一个开放式数据库连接(ODBC)驱动程序,令各个数据库之间得以互相集成。

非关系型数据库(NoSQL)[编辑]

主条目:NoSQL

Mysql 数据库的使用

连接Mysql

可以使用 navicat 工具来连接 mysql 数据库, navciat 只是一个连接工具,它不是数据库。

数据库的连接信息

  1. Mysql 数据库连接:
  2. 外网地址: rm-bp188nr95fk4l9545ao.mysql.rds.aliyuncs.com
  3. 外网端口: 3306 (默认端口)
  4. 用户名: fanmao55
  5. 密码: ABCfanmao55
  6. 数据库: taofei55

打开navicat 工具
image.png

选择 Mysql

输入对应的信息, 【测试连接】— 【能够连接成功】即可。
image.png

数据库查询操作

image.png
image.png
新建查询

image.png

  1. -- 查询所有考勤信息 * 表示表中的所有字段, checkin 表示表名(查询数据来源的表名)
  2. select * from checkin;

image.png

    • 表示所有的字段,可以看到所有的信息。

查询单独列的内容

比如上述查询语句中 显示的结果是表中所有列的内容,如果我只想看考勤的姓名,其他不看;

  1. -- 查询单列 只查询name 列的内容
  2. select name from checkin;
  • name 表示单独的name列中的内容

查询多列内容的时候,select 后面跟上多个列名, 列名之间使用 英文逗号 , 隔开

-- 查询 name, checkintime 
select name,checkintime from checkin;

image.png

总结: 进行数据查询的时候, * 表示所有的字段,查询对应的字段,请使用对应的字段名。

查询的基本语法

select 列名 from 表名;

where 条件查询

在一个表中有多条记录, 比如我想查询 张闯 的考勤信息。

select * from 表名
where name="张闯"
-- 查询 张闯的所有的考勤信息; name="张闯"  表示name值为张闯 条件

select * from checkin where name="张闯";

image.png


-- 查询 名字为张闯的同学 的 name 和 checkintime 
select name,checkintime from checkin WHERE name="张闯";

image.png

where支持运算符

运算符 备注
= 相等
> 大于
< 小于
>= 大于等于
<= 小于等于
<> 不等于
like 模糊匹配

image.png

  1. 查询成绩 大于60的人员信息
    select * from scores where score>60;
    
    image.png
-- 查询成绩 大于等于60的人员信息;
select * from scores where score>=60;


-- 查询成绩 小于60的人员信息
select * from scores where score < 60;


-- 查询成绩 不等于100的人员信息
select * from scores where score<>100;

like 语句

% 通配符(匹配多个)

%表示任何字符出现 任意次数;

  1. 查询签到表中 2021-07-01 的考勤记录
SELECT * FROM checkin
WHERE checkintime like "2021-07-01%";

image.png
% 在 like语句中表示 匹配多次。

-- 查询scores表中 姓为赵 的人员信息;
SELECT * from scores where name like "赵%";

-- 查询scores表中 姓名中含有 飞 的所有信息;
select * from scores where name like "%飞%";

_ 通配符 (匹配1个)

_ 匹配1个字符, 一个下划线表示 1个任意字符

  • 查询 scores 表中姓名为2个字,姓为赵的同学的所有信息;

    select * from scores where name like "赵_";
    

    image.png

    下划线的用途与%一样,但下划 线只匹配单个字符而不是多个字符。

and,or 运算

where 还支持 and , or 运算符。

运算符
and 表示并且 必须满足所有条件
or 表是 or 满足其中任意条件

在scores表中 查找 分数 > 60 并且 姓 赵 的所有人员信息;


select * from scores 
where 
score > 60 
and 
name like "赵%";
-- 在scores表中 查找 分数 > 60 并且 姓 赵 并且 姓名为两个字 的所有人员信息;

SELECT * from scores
where score > 60
and name like "赵_";
-- 在scores 表中 查找 分数 > 60 或者 姓名是 三个字  的人员 所有信息;
select * from scores
where score > 60 
or 
name like "___";

not 表示相反

-- 查找scores 姓氏不为赵的其他所有成员信息
SELECT * from scores
where
name NOT like "赵%";
-- 在scores 表中 查找 分数 > 60 并且姓名是三个字的姓不为赵的人员 所有信息;

SELECT * from scores
WHERE
score > 60     -- 分数 大于60
AND
name not like "赵%"   -- 姓名中不包含姓赵
and
name like "___"   -- 姓名为三个字
-- scores 表中查询 符合如下两个条件
-- 1. 姓名中含有飞字,或者姓王  
-- 2. 成绩 > 60 
select * from scores
WHERE
(name like "%飞%" and score > 60)
or
(name like "王%" and score > 60);

-- 
SELECT * from scores
WHERE
(name like "%飞%" or name like "王%")
and
score > 60;

in 表示范围之内

使用方式

name in ("张三","李四") -- 表示姓名为 张三 或 李四
-- 查询 score 为80 或者 90 或者100 的人员信息
select * from scores 
where score in (80,90,100);

image.png

-- 查询成绩 不为 80, 同时也不为90 的信息

select * from scores
where not score in (80,90);

查看 checkin 表中 2021-07-01 和 2021-07-02 的签到信息。

-- 查看 2021-07-01, 2021-07-02 这两天的签到信息
select * from checkin
where checkintime like "2021-07-01%"
or
checkintime like "2021-07-02%";

image.png

作业

image.png

  1. 查询所有同学的所有信息;
  2. 查询所有男生同学的信息;
  3. 查询所有女生同学的 体育课程信息;
  4. 查询所有数学课成绩大于60分同学的信息;
  5. 查询年龄在25岁以下的男生同学的体育成绩;
  6. 查询 年龄在18,19,23 岁的所有同学成绩;
  7. 查询 姓名为2个字的同学的体育成绩;
  8. 查询 姓名为2个字的男同学的语文成绩和数学成绩;
  9. 查询 语文和数学成绩都大于70分的学员信息; ```sql — 语文,数学 都大于70分

— 1. 语文大于70 的 —人

select username from students WHERE course=”语文” and score > 70;

— 2. 武大郎 林冲 嫦娥 大乔 数学成绩大于 70 的人

SELECT username from students WHERE username in (“武大郎”, “林冲”, “嫦娥”, “大乔”) and score > 70 and course=”数学”;

— 3 查看 武大郎 嫦娥 大乔 三人的相信信息

SELECT * from students WHERE username in (“武大郎”, “嫦娥”, “大乔”) and not course=”体育”

SELECT username from students WHERE username in ( select username from students WHERE course=”语文” and score > 70 ) and score > 70 and course=”数学”;

— SELECT * from students WHERE username in ( SELECT username from students WHERE username in ( select username from students WHERE course=”语文” and score > 70 ) and score > 70 and course=”数学” ) and not course=”体育”;

使用分组实现
```sql
select * from students 
where username in (
SELECT username from students
  WHERE course in ("语文","数学")
  GROUP BY username
  HAVING min(score) > 70);

image.png

  1. 查询语文,数学,体育分数都大于 60分的同学;

只要最低成绩大于60 即可。

SELECT username, SUM(score), MAX(score),MIN(score) FROM students
GROUP BY username
HAVING MIN(score) > 60   -- 最低成绩大于60