基本介绍
关系数据库[编辑]
- MySQL
- PostgreSQL
- Microsoft Access
- Microsoft SQL Server
- Google Fusion Tables
- FileMaker
- Oracle数据库
- Sybase
- dBASE
- Clipper
- FoxPro
- foshub
几乎所有的数据库管理系统都配备了一个开放式数据库连接(ODBC)驱动程序,令各个数据库之间得以互相集成。
非关系型数据库(NoSQL)[编辑]
主条目:NoSQL
- BigTable(Google)
- Cassandra
- MongoDB
- CouchDB
-
键值数据库[编辑]
Apache Cassandra(为Facebook所使用[7]):高度可扩展[8]
- Dynamo
- LevelDB(Google)
连接数据库
连接数据库的工具主要有:
- Navicat : https://www.navicat.com.cn/
- Dbeaver : https://dbeaver.io/
数据库的连接信息
主机地址:rm-bp188nr95fk4l9545ao.mysql.rds.aliyuncs.com
端口号:3306
用户名:fanmao71
密码:abc@fanmao71
输入对应的连接信息,点击【测试连接】,出现 连接成功。
连接成功之后,默认数据库
数据库查询
新建查询
基本语法
查询students表中所有的数据
select * from students;
- select 关键字
- 表示所有列
- from 关键字,表示从 …. 表
students
表的名字
在navicat 中编写完成之后,选择已经写好的语句,右键—-运行;可以看到结果;
默认使用 * 查询所有的内容。
查询指定列的内容
基本语法
select colname from tables;
- colname 表示具体的列名
- tables 表示具体的表名
-- 查询students表中所有成绩 score
select score from students;
查询多个列的内容时, 列名之间使用英文的逗号隔开 ,
-- 查询students表中姓名name,分数score
select name,score from students;
-- 查询students表中姓名name,科目course,分数score
SELECT name,course,score from students;
where 条件查询
基本语法
select * from table
where 条件;
语法 | 说明 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> 或者 != | 不等于 |
查询score成绩及格的学生信息;
select * from students WHERE score >= 60;
查询score成绩不及格的学生信息;
- 查询所有学生的语文成绩;
- 查询张三的所有成绩; ```sql — 2. 查询score成绩不及格的学生信息; SELECT * FROM students WHERE score < 60;
— 3. 查询所有学生的语文成绩;
SELECT * FROM students WHERE course = “语文”;
— 4. 查询张三的所有成绩; SELECT * FROM students WHERE name = “张三”;
5. 查看 除了科目是语文的其它所有信息; (不等于 语文)
```sql
select * from students where course <> "语文";
in … 在范围之内
查看 张三,李四同学的所有信息;
select * from students where name in ("张三","李四");
查看成绩为 80,90,100,的同学信息;
select * from students where score in (80,90,100);
not in … 不在范围
查看成绩不为 10,也不为20分,还不为30 的信息;
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 = “张三”;
<a name="vtpJV"></a>
### like 模糊匹配
1. 查询 1994 年出生的学生信息;
```sql
SELECT * FROM students WHERE birthday like "1994%";
-- 1. 查询 1994 年出生的学生信息;
SELECT * FROM students WHERE birthday like "1994%";
-- 2 .查询分数中 包含0的所有学生信息;
select * from students where score like "%0%";
-- 3. 所有 张姓 的同学信息;
select * from students WHERE name like "张%";
在Like 模糊匹配中 支持两种匹配模式
- % 匹配0次或者多次
- _ 匹配1次
% 匹配多次
-- 3. 所有 张姓 的同学信息;
select * from students WHERE name like "张%";
可以匹配所有的 以张 开头的姓名。
_ 匹配1次
只能匹配1次,
查找姓张的同学,并且姓名只有2个字;
select * from students WHERE name like "张_";
查询在 11-11
出生的学生信息;
-- 查询在 11-11 出生的 并且是90后的学生信息;
SELECT * from students WHERE birthday LIKE "%-11-11%";
-- 查询在 11-11 出生的 并且是90后的学生信息;
SELECT * from students WHERE birthday LIKE "199_-11-11%"
% 与 _ 的区别
- % 匹配0次或者多次
- _ 只能匹配1次
在网站中进行搜索操作的时候,后台执行的业务逻辑一般都是使用模糊匹配;
between … and … 介于区间之内
- 查询成绩在60-80分之间的学生信息; ```sql
SELECT * from students WHERE score BETWEEN 60 and 80;
包含60 和 80 ;
2. 查询在1990-1995 出生学生信息;
```sql
select * from students where birthday between '1990-01-01 00:00:00' and '1995-12-31 23:59:59';
- 查询11月过生日的同学; ```sql
SELECT * from students WHERE birthday like “%-11-%”;
![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)
<a name="WnLsS"></a>
## and 多个条件 `并且`
当有多个条件,使用 and 连接 表示并且,多个条件同时成立;
1. 查询性别为 man 并且成绩在60分以上的学生信息;
```sql
-- 1. 查询性别为 man 并且成绩在60分以上的学生信息;
SELECT * from students
WHERE sex like "man"
AND
score > 60;
- 查询李姓的同学并且成绩 大于10分 同时在1995年出生的符合条件的学生信息;
and 的使用,中间可以跟多个条件,必须所有的条件都要符合;select * from students
WHERE
name like '李%'
AND score > 10
AND birthday like "1995%";
or 符合其中1个条件 或者
查询的时候,使用or 表示符合其中一个条件即可;
查找1995年 以后出生(包含1995年) 或者 成绩在 60分 以上的同学;
SELECT * from students WHERE
birthday >="1995-01-01"
OR
score > 60;
查询语文成绩在60分以上或者数学成绩在80分以上的同学;
-- 2. 查询语文成绩在60分以上或者数学成绩在80分以上的同学;
SELECT * from students WHERE
(course = "语文" and score > 60) -- 语文成绩大于 60
OR
(course ="数学" and score > 80); -- 数学成绩大于80
is null 表示空
查询表中 成绩为 null 的学生信息select * from students WHERE score is null;
Null 表示没有值,为空;
not 表示相反
查询成绩不为Null的学生信息;
select * from students WHERE not score is null;
总结
作业
以heros表为例
- 查询 name(姓名)中包含刘的所有英雄信息;
- 查询 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;
3. 查询 birthdate(上架日期)不为 null 的所有英雄信息;
3. 查询 birthdate(上架日期)在 2015年并且 hp_max(最大血量)在 8000以上的所有英雄信息;
```sql
-- 3. 查询 birthdate(上架日期)不为 null 的所有英雄信息;
select * from heros where birthdate is not null;
-- 4. 查询 birthdate(上架日期)在 2015年并且 hp_max(最大血量)在 8000以上的所有英雄信息;
select * from heros where birthdate like '2015%' and hp_max>8000;
select * from heros WHERE
birthdate BETWEEN '2015-01-01' and '2015-12-31'
and hp_max > 8000;
- 查询 role_main (主要定位) 为
辅助
或者坦克
或者法师
的所有英雄信息; - 查询 name(姓名)为两个字 并且 role_main(主要定位)为
法师
或辅助
的英雄信息; - 查询 同时符合 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 = “远程”;
---
![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 表为例
1. 查询所有同学的英语成绩
1. 查询语文成绩大于80或者英语成绩小于50或者数学成绩大于60的同学信息;
```sql
-- 1. 查询所有同学的英语成绩
SELECT * from students where course ='英语';
-- 2. 查询语文成绩大于80或者英语成绩小于50或者数学成绩大于60的同学信息;
SELECT * from students where
(course ='语文' and score>80)
or
(course ='英语' and score<50)
or
(course ='数学' and score>60);
查询出生日期中为 月份为1-6月 并且在 12:00-18:00 之间出生的同学;
select * from students
WHERE (birthday like "____-01-%" or birthday like "____-02-%" or birthday like "____-03-%" or birthday like "____-04-%" or birthday like "____-05-%" or birthday like "____-06-%" )
and
(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");
查询 性别为 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”;
5. 查询 1995,1997,2011年出生的man;
```sql
SELECT * FROM students WHERE sex="man"
and
(birthday like "1995%"
or birthday like "1997%"
or birthday like "2011%");