基本介绍

关系数据库[编辑]

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

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

主条目:NoSQL

连接数据库

连接数据库的工具主要有:


数据库的连接信息

  1. 主机地址:rm-bp188nr95fk4l9545ao.mysql.rds.aliyuncs.com
  2. 端口号:3306
  3. 用户名:fanmao71
  4. 密码:abc@fanmao71

image.png
输入对应的连接信息,点击【测试连接】,出现 连接成功。
image.png
连接成功之后,默认数据库
image.png

数据库查询

新建查询

image.png

基本语法
查询students表中所有的数据

  1. select * from students;
  • select 关键字
    • 表示所有列
  • from 关键字,表示从 …. 表
  • students 表的名字

在navicat 中编写完成之后,选择已经写好的语句,右键—-运行;可以看到结果;
image.png
默认使用 * 查询所有的内容。

查询指定列的内容

基本语法

  1. select colname from tables;
  • colname 表示具体的列名
  • tables 表示具体的表名

  1. -- 查询students表中所有成绩 score
  2. select score from students;

查询多个列的内容时, 列名之间使用英文的逗号隔开 ,

  1. -- 查询students表中姓名name,分数score
  2. select name,score from students;

image.png

  1. -- 查询students表中姓名name,科目course,分数score
  2. SELECT name,course,score from students;

image.png

where 条件查询

基本语法

  1. select * from table
  2. where 条件;
语法 说明
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或者 != 不等于

  1. 查询score成绩及格的学生信息;

    1. select * from students WHERE score >= 60;
  2. 查询score成绩不及格的学生信息;

  3. 查询所有学生的语文成绩;
  4. 查询张三的所有成绩; ```sql — 2. 查询score成绩不及格的学生信息; SELECT * FROM students WHERE score < 60;

— 3. 查询所有学生的语文成绩;

SELECT * FROM students WHERE course = “语文”;

— 4. 查询张三的所有成绩; SELECT * FROM students WHERE name = “张三”;

  1. 5. 查看 除了科目是语文的其它所有信息; (不等于 语文)
  2. ```sql
  3. select * from students where course <> "语文";

in … 在范围之内

  1. 查看 张三,李四同学的所有信息;

    1. select * from students where name in ("张三","李四");

    image.png

  2. 查看成绩为 80,90,100,的同学信息;

    1. select * from students where score in (80,90,100);

    not in … 不在范围

  3. 查看成绩不为 10,也不为20分,还不为30 的信息;

    1. select * from students where score not in (10,20,30);

    not 表示相反
    not在使用的时候,推荐大家将not 放在条件的前面,表示相反的条件; ```sql select from students where not course <> “语文”; — 等效与下面语句 select from students where course = “语文”;

select * from students where not score in (10,20,30);

SELECT * FROM students WHERE not name = “张三”;

  1. <a name="vtpJV"></a>
  2. ### like 模糊匹配
  3. 1. 查询 1994 年出生的学生信息;
  4. ```sql
  5. SELECT * FROM students WHERE birthday like "1994%";
  1. -- 1. 查询 1994 年出生的学生信息;
  2. SELECT * FROM students WHERE birthday like "1994%";
  3. -- 2 .查询分数中 包含0的所有学生信息;
  4. select * from students where score like "%0%";
  5. -- 3. 所有 张姓 的同学信息;
  6. select * from students WHERE name like "张%";

在Like 模糊匹配中 支持两种匹配模式

  • % 匹配0次或者多次
  • _ 匹配1次

% 匹配多次

  1. -- 3. 所有 张姓 的同学信息;
  2. select * from students WHERE name like "张%";

image.png
可以匹配所有的 以张 开头的姓名。

_ 匹配1次

只能匹配1次,

查找姓张的同学,并且姓名只有2个字;

  1. select * from students WHERE name like "张_";

image.png

查询在 11-11 出生的学生信息;

  1. -- 查询在 11-11 出生的 并且是90后的学生信息;
  2. SELECT * from students WHERE birthday LIKE "%-11-11%";
  1. -- 查询在 11-11 出生的 并且是90后的学生信息;
  2. SELECT * from students WHERE birthday LIKE "199_-11-11%"

% 与 _ 的区别

  • % 匹配0次或者多次
  • _ 只能匹配1次

在网站中进行搜索操作的时候,后台执行的业务逻辑一般都是使用模糊匹配;

between … and … 介于区间之内

  1. 查询成绩在60-80分之间的学生信息; ```sql

SELECT * from students WHERE score BETWEEN 60 and 80;

  1. 包含60 80
  2. 2. 查询在1990-1995 出生学生信息;
  3. ```sql
  4. select * from students where birthday between '1990-01-01 00:00:00' and '1995-12-31 23:59:59';
  1. 查询11月过生日的同学; ```sql

SELECT * from students WHERE birthday like “%-11-%”;

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/87080/1635837746090-64ee1361-6f88-4b0e-9ffa-727951bc3df8.png#clientId=u6590c328-9743-4&from=paste&height=150&id=u89214d0c&margin=%5Bobject%20Object%5D&name=image.png&originHeight=300&originWidth=634&originalType=binary&ratio=1&size=33166&status=done&style=none&taskId=u5792817c-50f1-45db-95c8-bad45192616&width=317)
  2. <a name="WnLsS"></a>
  3. ## and 多个条件 `并且`
  4. 当有多个条件,使用 and 连接 表示并且,多个条件同时成立;
  5. 1. 查询性别为 man 并且成绩在60分以上的学生信息;
  6. ```sql
  7. -- 1. 查询性别为 man 并且成绩在60分以上的学生信息;
  8. SELECT * from students
  9. WHERE sex like "man"
  10. AND
  11. score > 60;
  1. 查询李姓的同学并且成绩 大于10分 同时在1995年出生的符合条件的学生信息;
    1. select * from students
    2. WHERE
    3. name like '李%'
    4. AND score > 10
    5. AND birthday like "1995%";
    and 的使用,中间可以跟多个条件,必须所有的条件都要符合;

or 符合其中1个条件 或者

查询的时候,使用or 表示符合其中一个条件即可;

  1. 查找1995年 以后出生(包含1995年) 或者 成绩在 60分 以上的同学;

    1. SELECT * from students WHERE
    2. birthday >="1995-01-01"
    3. OR
    4. score > 60;
  2. 查询语文成绩在60分以上或者数学成绩在80分以上的同学;

    1. -- 2. 查询语文成绩在60分以上或者数学成绩在80分以上的同学;
    2. SELECT * from students WHERE
    3. (course = "语文" and score > 60) -- 语文成绩大于 60
    4. OR
    5. (course ="数学" and score > 80); -- 数学成绩大于80

    is null 表示空

    image.png
    查询表中 成绩为 null 的学生信息

    1. select * from students WHERE score is null;

    image.png
    Null 表示没有值,为空;

not 表示相反

查询成绩不为Null的学生信息;

  1. select * from students WHERE not score is null;

总结

Mysql 单表查询.svg

作业

以heros表为例
image.png

  1. 查询 name(姓名)中包含刘的所有英雄信息;
  2. 查询 hp_max(最大血量) 在 6000-8000 之间的所有英雄信息; ```sql — 1. 查询 name(姓名)中包含刘的所有英雄信息; select * FROM heros where name like ‘%刘%’;

— 2. 查询 hp_max(最大血量) 在 6000-8000 之间的所有英雄信息; select * from heros where hp_max BETWEEN 6000 and 8000;

  1. 3. 查询 birthdate(上架日期)不为 null 的所有英雄信息;
  2. 3. 查询 birthdate(上架日期)在 2015年并且 hp_max(最大血量)在 8000以上的所有英雄信息;
  3. ```sql
  4. -- 3. 查询 birthdate(上架日期)不为 null 的所有英雄信息;
  5. select * from heros where birthdate is not null;
  6. -- 4. 查询 birthdate(上架日期)在 2015年并且 hp_max(最大血量)在 8000以上的所有英雄信息;
  7. select * from heros where birthdate like '2015%' and hp_max>8000;
  8. select * from heros WHERE
  9. birthdate BETWEEN '2015-01-01' and '2015-12-31'
  10. and hp_max > 8000;
  1. 查询 role_main (主要定位) 为 辅助或者坦克或者法师 的所有英雄信息;
  2. 查询 name(姓名)为两个字 并且 role_main(主要定位)为 法师辅助 的英雄信息;
  3. 查询 同时符合 birthdate(上架时间)不为null,attack_range 为 远程 的英雄信息; ```sql — 5. 查询 role_main (主要定位) 为 辅助或者坦克或者法师 的所有英雄信息; SELECT * FROM heros WHERE role_main = ‘辅助’ or role_main = “坦克” or role_main = “法师”;

SELECT * FROM heros WHERE role_main in (‘辅助’,”坦克”,”法师”);

— 6. 查询 name(姓名)为两个字 并且 rolemain(主要定位)为 法师 或 辅助 的英雄信息; SELECT * FROM heros WHERE name like “_“ and role_main in (“法师” , “辅助”);

SELECT FROM heros WHERE name like “__” and (role_main = “法师” or role_main = “辅助”); — 7. 查询 同时符合 birthdate(上架时间)不为null,attack_range 为 远程 的英雄信息; SELECT FROM heros WHERE NOT birthdate is null and attack_range = “远程”;

  1. ---
  2. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/87080/1635844624868-5687ba8e-b94f-4566-8acc-9dd2e0f846bc.png#clientId=u236522ee-f584-4&from=paste&height=281&id=u4d7fce2b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=561&originWidth=1153&originalType=binary&ratio=1&size=88142&status=done&style=none&taskId=ud339e6a1-214b-4f67-acac-f130afee578&width=576.5)<br />以students 表为例
  3. 1. 查询所有同学的英语成绩
  4. 1. 查询语文成绩大于80或者英语成绩小于50或者数学成绩大于60的同学信息;
  5. ```sql
  6. -- 1. 查询所有同学的英语成绩
  7. SELECT * from students where course ='英语';
  8. -- 2. 查询语文成绩大于80或者英语成绩小于50或者数学成绩大于60的同学信息;
  9. SELECT * from students where
  10. (course ='语文' and score>80)
  11. or
  12. (course ='英语' and score<50)
  13. or
  14. (course ='数学' and score>60);
  1. 查询出生日期中为 月份为1-6月 并且在 12:00-18:00 之间出生的同学;

    1. select * from students
    2. WHERE (birthday like "____-01-%" or birthday like "____-02-%" or birthday like "____-03-%" or birthday like "____-04-%" or birthday like "____-05-%" or birthday like "____-06-%" )
    3. and
    4. (birthday like "% 12:__:__" or birthday like "% 13:__:__" or birthday like "% 14:__:__" or birthday like "% 15:__:__" or birthday like "% 16:__:__" or birthday like "% 17:__:__" or birthday like "% 18:00:00");
  2. 查询 性别为 woman 同时为 90后的学生信息; ```sql

SELECT * FROM students WHERE sex=”woman” AND birthday like “199%”;

SELECT * FROM students WHERE sex=”woman” AND birthday BETWEEN “1990-01-01” and “1999-12-31 23:59:59”;

  1. 5. 查询 199519972011年出生的man
  2. ```sql
  3. SELECT * FROM students WHERE sex="man"
  4. and
  5. (birthday like "1995%"
  6. or birthday like "1997%"
  7. or birthday like "2011%");