关系数据库 --> 关系模型 --> 若干存储数据的二维表
行: 记录(recode ,逻辑数据) 列: 字段(column,同一行拥有相同若干字段,定义数据类型,是否为NULL等)\
关系数据库的关系(一对一,一对多,多对一) 主键 通过某个字段唯一区分出不同记录 不使用任何业务相关的字段作为主键 BIGINT 自增或GUID类型 联合主键,允许通过多个字段唯一标识记录 外键 通过一个表的外键关联到另一个表 ==> 一对多,多对一,多对多 索引 是关系数据库中对某一列或多个列的值进行预排序的数据结构 不必扫描整个表,而是直接定位到符合条件的记录 索引的效率取决于索引列的值是否散列 可对一张表创建多个索引,优点:提高查询效率 缺点:在插入,更新和删除记录时,需同时修改索引 唯一索引:可以保证某一列的值具有唯一性
查询数据 基本查询 select * from <tables>; select 1 # 测试数据库的连接是否有效 条件查询 select * frm <tables> where <条件表达式> NOT,AND,OR 的优先级 NOT class_it = 2 <==> class_id <> 2 投影查询 select col1,col2... from <tables> where <条件表达式> 可设备别名 SELECT id,score points,name FROM students 排序(默认是根据主键排序) ORDER BY ==> 按照从高到低排序 SELECT id,name,gender score FROM students ORDER BY score; DESC ==> 倒序 SELECT id,name,gender,score FROM students ORDER BY score DESC; ORDER BY score DESC,gender 表示先按照score列倒序,再按照gender列顺序 如果由WHERE 子句,那么ORDER BY 子句要放到WHERE子句的后面 分页查询 LIMIT <M> OFFSET <N> LIMIT总是设定为pageSize OFFSET计算公式为pageSize * (pageIndex - 1) 聚合查询 在使用聚合查询时,我们应该给列名设置一个别名,便于处理结果 在聚合查询中,只能放入分组的列 count() SELECT COUNT() num FROM students; SUM 计算某一列的合计值,该列必须为数值类型 AVG 计算某一列的平均值,该列必须为数值类型 MAX 计算某一列的最大值 MIN 计算某一列的最小值 分组聚合 ==> GROUP BY SELECT COUNT() num FROM students GROUP BY class_id SELECT class_id,gender,COUNT() num FROM student GROUP BY class_id,gender 多表查询 可以从多表查询数据 SELECT * FROM <tables1> <tables2> ==> 两张表的乘积,笛卡尔查询 SELECT * FROM students,classes; 为了便于字段区分,设置别名 SELECT students.id sid, students.name, students.gender, students.score, classes.id cid, classed.name cname FROM students,classes 可添加WHERE条件 连接查询 JOIN 查询是先确定一个主表为结果集,然后,把其他表的行有选择性的"连接"在主表结果集上 内连接 INNER JOIN SELECT s.id,s.name,s.class_id,c.name class_name,s.gender,s.score # 确定主表 FROM students s # 确定主表 INNER JOIN classes c # 再确定需要连接的表 ON s.class_id = c.id #确定连接条件,可选,加上WHERE子句,ORDER BY等子句 外连接 OUTER RIGHT OUTER JOIN (返回右表都存在的行,如果该行仅在右表存在,结果集会以NULL填充剩余字段)
LEFT OUTER JOIN (返回左表都存在的行,如果该行仅在左表存在,结果集会以NULL填充剩余字段)
FULL OUTER JOIN(是选出左右表都存在的记录)