一、前端native,后端mysql,二者对接。前端
二、概念:数据库的做用:把数据以表的形式存储起来,方便查询。mysql
三、学习重点:查询语言sql
一、关系型数据库系统数据库
二、核心:以二维表的形式存储数据后端
三、行:一条记录,一个事物的信息。函数
列:一个字段,一个事物的某一种属性。学习
四、一个表中全部行是一类事物的集合测试
五、一个数据库由不少表组成。编码
一、结构化查询语言,用于关系型数据库spa
二、不区分大小写
三、重点:查询
一、开源、免费、支持多平台
一、端口号:通常为3306
二、服务端:启动、中止、重启
三、客户端:命令行客户端、native
一、点击native界面“链接”
二、主机名或IP地址、端口、用户名、密码。随便写链接名。
三、点击链接测试。点击肯定
四、点击链接名,启用变色。
五、建立数据库
六、建立表、添加字段、设计表
七、增删查改数据
一、整数:int(无符号-2147483648~2147483647,有符号0-4294967295),长度没有做用
二、小数:decimal,如decimal(5,2)表示共存5位数,小数2位,整数3位。
三、字符串:varchar,范围(0~65533),varchar表示最多3个字符,一个中文或一个字符都占据一个字符。
一、主键(primary key):int类型、无符号、自动递增、惟一的标识一条记录
1) Student_ID int(10) UNSIGNED NOT NULL PRIMARY KEY auto_increment
二、非空约束(not null):不容许为空值
三、惟一(unique):此字段步云山重复
四、默认值(default):不填写此值会使用默认值
五、外键(foreign key):两个表之间的关联关系
六、索引:快速访问数据库表中的特定信息、索引是对数据库中表中一列或者多列的值进行排序的一种结构,相似书籍的目录
一、DBA人员维护
二、备份:
1) 鼠标点击数据库,右击选择转储SQL文件》结构和数据
2) 选择文件保存位置,点击保存。
三、恢复:
1) 删除原先数据库,新建数据库。除名称不一致外,字符集和排序规则需一致
2) 选择数据库,右键运行SQL文件
3) 文件:选择文件所在位置,选择对应文件。点击“开始”
一、建立数据库:
1) Create语法:CREATE DATABASE 数据库名;
2) 若是数据库不存在则建立,存在则不建立。--- IF NOT EXISTS
3) 建立数据库,并设定编码集为utf8 --- CHARSET utf8 COLLATE utf8_general_ci
二、删除数据库
1) Drop语法:DROP DATABASE 数据库名;
一、建立数据表:
4) Create语法:CREATE table 表名 (字段名 类型 约束,字段名 类型 约束,字段名 类型 约束);
5) 若是数据表不存在则建立,存在则不建立。--- IF NOT EXISTS
6) 建立数据表,并设定编码集为utf8 --- DEFAULT CHARSET 'UTF8'
二、删除数据表
2) Drop语法:DROP TABLE 数据表名;
三、举例:
create table students(
id int auto_increment primary key,
name varchar(10) not null,
sex varchar(3) default '女',
address varchar(50),
phone int not null unique,
age,
);
drop table student;
ALTER TABLE 表名 ADD 字段名 类型 约束
一、insert into语法:insert into 表名( f字段1,字段2,字段3 )VALUES( value1, value2,...valueN );
二、举例:
insert into student (name,money,sex,phone) values ('hk',10000,'男',188);
insert into student values('','小明',100,'',120);
1、delete语法:delete from 表名 where ‘id’>10
一、Select语法:SELECT 字段1,字段2 FROM 表名
1) 查询语句中你可使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
2) SELECT 命令能够读取一条或者多条记录。
3) 你可使用星号(*)来表示表中所有数据:select * from students
一、UPDATE 表名 SET字段=值, 字段2=值2,WHERE `id`>10
一、筛选条件
二、关系
1) 能够在 WHERE 子句中指定任何条件。
2) 运算关系:
① 等于=
② 小于<
③ 大于>
④ 大于等于>=
⑤ 小于等于<=
⑥ 不等于!=、<>
3) 逻辑关系:
① 并、和=and。
② 或=or。
③ 不、非=not。
4) WHERE 子句相似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。
5) 若是给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据。
三、举例:
SELECT field1 FROM table_name1 WHERE `id`>5
一、排序方式
二、排序的条件:任何字段,可多个字段
三、升序关键字:ASC(默认状况)
四、降序关键字:DESC
五、举例
SELECT field table_name ORDER BY `id` ASC
SELECT student_name, student_class FROM student ORDER BYstudent_age, student_ID ASC
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
一、语法:SELECT 字段1, 字段2, ... 字段n, 聚合函数名 (表达式) FROM 表名WHERE 条件 GROUP BY 字段1, 字段2, ... 字段n
二、配合聚合函数,利用分组进行统计
三、与having一块儿使用
一、注意:使用 SELECT 语句,则这个 SELECT 必须使用 GROUP BY 语句!
二、语句:
1) Select 聚合函数名(字段名)from 表名 GROUP BY 字段1, 字段2, ... 字段n having 条件1 and 条件2 or 条件3
2) Select 聚合函数名(字段名)from 表名 where 条件1 and 条件2 or 条件3 GROUP BY 字段1, 字段2, ... 字段n
函数 |
描述 |
返回某列的平均值avg |
|
返回某列的行数(不包括 NULL 值)count |
|
返回被选行数count |
|
COUNT(DISTINCT column) |
返回列的不一样值的数目count |
FIRST(column) |
返回在指定的域中第一个记录的值first |
LAST(column) |
返回在指定的域中最后一个记录的值last |
返回某列的最高值max |
|
返回某列的最低值min |
|
返回某列的总和sum |
一、举例:
找到 OrderPrice 值高于 OrderPrice 平均值的客户
SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
计算 "Orders" 表中不一样客户的数目:
SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders
一、语句:语法:SELECT 字段1, 字段2, ... 字段n, 聚合函数名 (表达式) FROM 表名 GROUP BY 字段1, 字段2, ... 字段n having 条件1 and 条件2 or 条件3
一、
二、HAVING 对 GROUP BY 设置条件的方式= WHERE 和 SELECT 的交互方式。
三、增长 HAVING 子句缘由是,WHERE 关键字没法与聚合函数一块儿使用
四、若是 HAVING 中包含多个条件,那么这些条件将经过 AND、OR 或 NOT 组合在一块儿
五、举例:
六、SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000
七、
一、指定开始位置和显示条数
二、每页起始点=(当前页数 - 1) * 显示的条数
三、最值:limit 1
四、举例:
-- 0 表示起始点 5表示显示条数 能够断定显示为第一页
SELECT * FROM `table_name` WHERE `id` LIMIT 0,5;
二班男生中最高成级
Select students.id,students.name,score.score from students
inner join score on students.id=score.studentid
where students.class=”二班” and sex=”男”
Order by score.score asc
Limit 1
SELECT * FROM `table_name`
[ WHERE ] -- 查询条件 位置第一个
[ GROUP BY ] -- 配合聚合函数,利用分组进行统计 位置第二个
[ DESC ] -- 指定那种字段或者方式排序 位置第三个
[ LIMIT ] -- 分页显示 位置第三个
一、配合通配符和字符串进行匹配
二、举例:从 "Persons" 表中选取居住在包含 "lond" 的城市里的人
SELECT * FROM Persons WHERE City LIKE '%lond%',sex like ’%女%’
三、举例:从 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,而后是一个任意字符,而后是 "r",而后是任意字符,而后是 "er":
SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'
一、语法:SELECT 字段名(值) FROM 表名 WHERE 字段名 IN (value1,value2,...)
二、容许where中规定多个值
三、判断操做数是否为IN列表中的其中一个值,若是是,返回值为1;不然返回值为0
四、select 2 IN(1,3,5,'thks'),'thks' IN(1,3,5,'thks'); 返回值=0,1
五、SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')
一、BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值能够是数值、文本或者日期
二、语法:SELECT * FROM 表名 between 小值 and 大值
三、举例:
SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
SELECT name FROM Persons WHERE age BETWEEN 18 AND 20
一、表别名
SELECT column_name(s) FROM 表名 AS 别名
二、字段别名
SELECT字段名 AS 别名FROM table_name
一、查询出某个字段不重复的记录
二、语法:SELECT DISTINCT 字段名1 FROM 表名
三、举例:
返回不重复的用户名:select distinct name from student
过滤掉name和id两个字段都重复的记录:select distinct name,id from student
一、举例:从 "Persons" 表中选取居住在包含 "lond" 的城市里的人
SELECT * FROM Persons WHERE City LIKE '%lond%',sex like ’%女%’
一、举例:从 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,而后是一个任意字符,而后是 "r",而后是任意字符,而后是 "er":
SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'
一、举例:从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人
SELECT * FROM Persons WHERE City LIKE '[ALN]%'
一、举例:从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人
SELECT * FROM Persons WHERE City LIKE '[!ALN]%'
SELECT * FROM Persons WHERE City LIKE '[^ALN]%'
一、没法比较 NULL 和 “ ”;它们是不等价的
二、为null值:SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NULL
三、不带有 NULL 值:SELECT LastName,FirstName,Address FROM Persons WHERE Address IS not NULL
四、
一、语句1:Select 字段1,字段2,字段3 from 表1, 表2 where 关联关系(如a=b)
二、会产生冗余数据——笛卡儿积(没有加入关联条件,两张表之间的数据会进行任意组合的现象)。
三、举例:查找student和class表中学号相同的信息
Select * from student, class where student.studentId = class.studentId
Select * from student as stu, class as cla where stu.studentId = cla.studentId(带别名)
一、1、左链接和右链接指的都是外链接
二、2、外链接:指一个表中有一个字段是另外一个表的主键时
好比学生表里除了学生id还有一个成绩id名为scoreId,这个scoreId就是学生成绩表的主键,咱们须要一块儿查询这两个表的内容,经过成绩id把两个表联系起来就是外链接
三、左链接和右链接的区别:
写法上先写哪一个表就称之为左,
如:学生表中有的学生成绩id(scoreId)为空,成绩表中也有成绩在学生中没有出现过期
若是是左链接,学生表中就算学生成绩为空的学生也会被查出,而成绩表中只出如今学生表中出现的成绩
若是是右链接,则相反......
一、语句1:Select 字段1,字段2,字段3 from 表1 inner join 表2 on 关联关系
二、举例:查找student和class表中学号相同的信息
Select * from student inner join class on student.studentId = class.studentId
Select * from student as stu inner join class as cla on stu.studentId = cla.studentId(带别名)
三、Inner join取交集
如:A:1、2、3、4、5; B:2、3、4、6
Inner join后展现数据2——2、3——3、4——4
一、以左表为基础,根据ON后给出的两表的条件将两表链接起来。结果会将左表全部的查询信息列出,而右表只列出ON后条件与左表知足的部分。左链接全称为左外链接,是外链接的一种。
二、语句以下:
Select 字段1,字段2,字段3 from 表1
left join 表2 on 关联关系
left join 表2 on 关联关系
where 过滤筛选条件(如a=b)
三、Left join
如:A(左表):1、2、3、4、5; B:2、3、4、6
Left join后展现数据1——null、2——2、3——3、4——4、5——null
一、以右表为基础,根据ON后给出的两表的条件将两表链接起来。结果会将右表全部的查询信息列出,而左表只列出ON后条件与右表知足的部分。右链接全称为右外链接,是外链接的一种
二、语句以下:
Select 字段1,字段2,字段3 from 表1
right join 表2 on 关联关系
right join 表2 on 关联关系
where 过滤筛选条件(如a=b)
四、right join取交集
如:A(左表):1、2、3、4、5; B(右表):2、3、4、6
right join后展现数据2——2、3——3、4——4、6——null
四、等值链接语句1:
Select 字段1,字段2 from 表1, 表2,表3
where 关联关系(如a=b)
and (b=c)
and (a=c)
五、语句1:
Select 字段1,字段2,字段3 from 表1
inner join 表2 on 关联关系
inner join 表2 on 关联关系
六、等值链接会产生冗余数据——笛卡儿积。
七、举例:查找student、class和score表中学号相同的信息
Select * from student, class, score
where student.studentId = class.studentId
and class.studentId=score.studentId
Select * from student
inner join class on student.studentId = class.studentId
inner join score on class.studentId=score.studentId
一、语句1:
Select 字段1,字段2,字段3 from 表1
inner join 表2 on 关联关系
inner join 表2 on 关联关系
where 过滤筛选条件(如a=b)
and (b=c)
and (a=c)
自关联就是屡次对同一张表进行查询,也叫单表自查询
二、语句:select * from student as A,student as B where A.aid=B.pid
分类
有两类:按照位置分,按照查询结果分 ;
按照位置分:子查询(select 子语句)在外部查询语句(select 父语句)中出现的位置 ;
From 子查询 :子查询跟在 from 以后 ;
where 子查询:子查询出如今 where 条件中 ;
等等
按照查询结果分:根据查询获得的结果进行分类
标量子查询:子查询获得的结果是 一行一列 ;
列子查询:子查询获得的结果是 一列多行;
行子查询:子查询获得的结果是 一行多列;
几个出现的位置都是在 where 以后 ;
表子查询:子查询获得的结果是 多行多列
出现的位置在 from 以后 ;
-- 第一步,根据班级id查询学生
select * from student where c_id = ? ;
-- 第二步 ,查询班级 id
select id from class where name = '软件工程2021' ;
-- 合并
select * from student where c_id = (select id from calss where name = '软件工程2021') ;
查询全部在读(名字在班级表中)的学生 ;
语句:select * from student where c_id in (select id from calss ) ;
查询整个学生中,年龄最大而且身高是最高的
语句1低级:select * from student where age = (select max(age) from student) and height = (select max(height) from student);
语句2高级:select * from student where (age,height) = (select max(age),max(height) from student);
找出某个班中身高最高的人;
-- 先让学生表按照身高降序排序
select * from student order by height desc ;
-- 而后按照班级分组
select * from student group by c_id ;
-- 合并在一块儿,就是咱们须要的
select * from (select * from student group by c_id) as student order by height desc ;
在条件查询的结果中任意匹配一个便可,等价于in
主查询 where 列 =all(列子查询).等于里面的全部
主查询 where 列 ><all(列子查询).不等于里面的全部
select * from student where age >=any (select age from student where studeng.class=”一班”)