数据库的分类(了解):
关系数据库
- 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)
Mysql 数据库的使用
连接Mysql
可以使用 navicat 工具来连接 mysql 数据库, navciat 只是一个连接工具,它不是数据库。
数据库的连接信息
Mysql 数据库连接:
外网地址: rm-bp188nr95fk4l9545ao.mysql.rds.aliyuncs.com
外网端口: 3306 (默认端口)
用户名: fanmao55
密码: ABCfanmao55
数据库: taofei55
打开navicat 工具
选择 Mysql
输入对应的信息, 【测试连接】— 【能够连接成功】即可。
数据库查询操作
新建查询
-- 查询所有考勤信息 * 表示表中的所有字段, checkin 表示表名(查询数据来源的表名)
select * from checkin;
- 表示所有的字段,可以看到所有的信息。
查询单独列的内容
比如上述查询语句中 显示的结果是表中所有列的内容,如果我只想看考勤的姓名,其他不看;
-- 查询单列 只查询name 列的内容
select name from checkin;
- name 表示单独的name列中的内容
查询多列内容的时候,select 后面跟上多个列名, 列名之间使用 英文逗号
,
隔开
-- 查询 name, checkintime
select name,checkintime from checkin;
总结: 进行数据查询的时候, *
表示所有的字段,查询对应的字段,请使用对应的字段名。
查询的基本语法
select 列名 from 表名;
where 条件查询
在一个表中有多条记录, 比如我想查询 张闯 的考勤信息。
select * from 表名
where name="张闯"
-- 查询 张闯的所有的考勤信息; name="张闯" 表示name值为张闯 条件
select * from checkin where name="张闯";
-- 查询 名字为张闯的同学 的 name 和 checkintime
select name,checkintime from checkin WHERE name="张闯";
where支持运算符
运算符 | 备注 | |
---|---|---|
= | 相等 | |
> | 大于 | |
< | 小于 | |
>= | 大于等于 | |
<= | 小于等于 | |
<> | 不等于 | |
like | 模糊匹配 |
- 查询成绩 大于60的人员信息
select * from scores where score>60;
-- 查询成绩 大于等于60的人员信息;
select * from scores where score>=60;
-- 查询成绩 小于60的人员信息
select * from scores where score < 60;
-- 查询成绩 不等于100的人员信息
select * from scores where score<>100;
like 语句
% 通配符(匹配多个)
%表示任何字符出现 任意次数;
- 查询签到表中 2021-07-01 的考勤记录
SELECT * FROM checkin
WHERE checkintime like "2021-07-01%";
% 在 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 "赵_";
下划线的用途与%一样,但下划 线只匹配单个字符而不是多个字符。
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);
-- 查询成绩 不为 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%";
作业
- 查询所有同学的所有信息;
- 查询所有男生同学的信息;
- 查询所有女生同学的 体育课程信息;
- 查询所有数学课成绩大于60分同学的信息;
- 查询年龄在25岁以下的男生同学的体育成绩;
- 查询 年龄在18,19,23 岁的所有同学成绩;
- 查询 姓名为2个字的同学的体育成绩;
- 查询 姓名为2个字的男同学的语文成绩和数学成绩;
- 查询 语文和数学成绩都大于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);
- 查询语文,数学,体育分数都大于 60分的同学;
只要最低成绩大于60 即可。
SELECT username, SUM(score), MAX(score),MIN(score) FROM students
GROUP BY username
HAVING MIN(score) > 60 -- 最低成绩大于60