什么是数据库?
答:数据库是储存和组织数据的仓库
什么是数据库管理系统?常见的有哪些?
答:管理和操作数据库的软件。常见的有:MySQL、SqlServer、Oracle、MongoDB、 Redis
什么是关系型数据库?
答:建立在关系模型的基础上,由多张二维表组成,这些二维表通过某种关系连接起来。
数据库与数据表的联系?
答:客户端 --- >数据库管理系统 --- >数据库 --->多张数据表
一个数据库管理系统中课创建多个数据库
一个数据库中可创建多个表
简单得DOS命令操作:
答:Win+R 跳出运行截面 输入cmd弹出窗口
1. 键盘 上 键 可以调出历史命令
2. cls 能够清屏
3. Tab 键 能够补全文件名
4. Ctrl+c 退出
使用DOS命令连接数据库
答:连接数据库
mysql -h localhost -P 3306 -u root -p
mysql -u root -p(简写)
查看已有数据库
show databases;(每一句执行语句后面都需要加分号;)
创建数据库
create database 数据库名;
删除数据库
drop database 数据库名;
使用数据库
use 数据库名;
查看正在使用的数据库名称
select database();
创建表
create table 表名(
字段一 数据类型(数据长度) comment “注释”,
字段二 数据类型(数据长度) comment “注释”,
字段三 数据类型(数据长度) comment “注释”,
...
) comment “注释”;
查看表结构
desc 表名;
查看创表语句
show create table userinfo;
常见数据库的数据类型
答:integer ----- js(number) 整数
real------ js(number) 浮点数
Text ----- js(string) 文本
时间维度 ---- js(new Date()) 时间
数据库表的三大范式
答:1NF:字段不可再分(字段唯一性)
2NF:一个表必须有主键,即每行数据都能被唯一的区分;非主属性依赖主属性
3NF:一个表中不能包涵其他相关表中非关键字段的信息,即数据表不能有冗余字段
注:需求 > 性能 > 范式
9.MySQL数据库系统
答:表:真正存放数据的地方
列:字段、属性,就是表头的定义
记录:一条一条的数据
数据:字段与记录交叉的地方
10.MySQL数据类型
答:在 MySQL 中,有三种主要的类型:Text(文本)、Number(数字)和 Date/Time(日期/时间)类型。
文本类型
char 固定长度的字符串
varchar 不是固定长度的字符串
text 文本类型
数字类型
int 0~255
tinyint
longint
float
double
时间类型
Datetime
11.MySQL添加数据
insert into 表名 (字段1,字段2) values (值1,值2)
insert into 表名 values (值)
12.MySQL删除数据
delete from 表名 //会删除整个表数据 id不会重新排序
delete from 表名 where //通过判断确定删除某个数据 id不会重新排序
truncate 表名 //不能跟条件 删除整个表得数据 id会重新排序
drop table 表名 //删除表结构和表数据(删除整个表)
13.MySQL修改数据
update 表名 set 字段1="值",字段2="值" // 更新整个表格
update 表名 set 字段1="值",字段2="值" where //通过判断具体更新某个记录
14.MySQL查询数据
基本查询
select * from 表名 //查询当前表里面得所有数据
select 字段1,字段2 from 表名 //查询某几个字段
select 字段1 as 别名,字段2 as 别名 from 表名 //查询字段并设置别名
select 字段1 别名,字段2 别名 from 表名 //查询字段并设置别名(省略as)
select distinct 字段1 from //查询唯一数据 有了这个distinct 不能查询其他字段,要查询其他字段也只能放在后面
select * from 表名 where //根据条件查询表里所有数据
条件查询
//跟在where后面条件组合
逻辑运算符 and or not
比较运算符 > < >= <= != / <>
between and / in
模糊查询
like "%字段%" //包含某个字段
like "字段%" //以某个字段开头
like "%字段" //以某个字段结尾
聚合函数
Max(字段),min(字段),avg(字段) //取该字段里面得最大值、最小值、平均值
count(字段) 统计该字段得个数 //不包括 null
count(*) 统计该表记录得个数 //包括 null
分组查询
select 字段(分组得字段) from 表名 [where] group by 字段
注意:分组查询 只能查 被分组得字段 和 聚合函数
分组查询和聚合函数天生一对
having where区别:
having后可跟聚合函数,where不行
having是对分组结果再次筛选,where条件判断后才分组:不满足条件则不参与分组
分页查询
limit 0,20 第一个表示起始下标,第二个值表示记录的个数
limit 20 表示查询的记录个数
排序
order by 字段 ASC 升序 DESC 降序
多表查询
内连接
//查询两个表里面的所有数据 不增加判断条件 会产生笛卡尔积的效果 隐式内连接
SELECT * FROM employee,dept;
//查询两个表里面的所有数据,增加判断条件 显示内连接 只查出了交集部分;
SELECT * FROM employee,dept WHERE employee.deptid = dept.deptid;
//查询两个表里面的所有数据,增加判断条件 设置别名 显示内连接 只查出了交集部分;
SELECT * FROM employee AS e,dept d WHERE e.deptid=d.deptid;
//显示内连接 只查出了交集部分
SELECT * FROM employee e INNER JOIN dept d ON e.deptid = d.deptid;
左连接
//LEFT JOIN 查询左表所有内容以及和右表相交的部分 如果左表的内容没有与右表对应 就用null 填充
SELECT * FROM employee e LEFT JOIN dept d ON e.deptid = d.deptid;
右连接
//RIGHT JOIN 查询右表所有内容以及和左表相交的部分 如果右表的内容没有与左表对应 就用null 填充
SELECT * FROM employee e RIGHT JOIN dept d ON e.deptid = d.deptid;
子连接
//根据查询条件一层一层内连接进行嵌套
//查询H5教学部的所有员工信息
SELECT * FROM employee WHERE deptid = (SELECT deptid FROM dept WHERE dname = "H5教学部");
//查询employee表中salary最大值对应的该条所有数据
SELECT * FROM employee WHERE salary = (SELECT MAX(salary) mas FROM employee);
SELECT * FROM employee e INNER JOIN (SELECT MAX(salary) mas FROM employee) a ON e.salary = a.mas
SELECT * FROM employee e,(SELECT MAX(salary) mas FROM employee) a WHERE e.salary = a.mas
//查询employee表中salary最大值对应的姓名和最大工资
SELECT e.name,a.mas FROM employee e,(SELECT MAX(salary) mas FROM employee) a WHERE e.salary = a.mas
//查询employee表中salary大于平均薪资的所有员工数据
SELECT AVG(salary) FROM employee;
SELECT * FROM employee WHERE salary >= (SELECT AVG(salary) FROM employee);
SELECT e.* FROM employee e INNER JOIN (SELECT AVG(salary) avs FROM employee) a ON e.salary >= a.avs
//查询employee表中salary大于平均薪资的所有员工数据 显示出对应的部门名称
SELECT a.*,d.dname FROM (SELECT e.* FROM employee e INNER JOIN (SELECT AVG(salary) avs FROM employee) a ON e.salary >= a.avs) a INNER JOIN dept d ON a.deptid = d.deptid;
//列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序
SELECT deptid,COUNT(*) num FROM (SELECT e.*,a.avs FROM employee e INNER JOIN (SELECT AVG(salary) avs,deptid FROM employee GROUP BY deptid) a WHERE e.deptid = a.deptid AND e.salary >= a.avs) a GROUP BY deptid ORDER BY deptid
DESC;
//列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序 并显示出部门名
SELECT a.*,d.dname FROM (SELECT COUNT(*) num,deptid FROM (SELECT e.*,a.avs FROM employee e,(SELECT AVG(salary) avs,deptid FROM employee GROUP BY deptid) a WHERE e.salary >=a.avs AND e.deptid = a.deptid) a GROUP BY deptid ) a
INNER JOIN dept d ON a.deptid = d.deptid ORDER BY deptid DESC;