数据库常用语句
Posted qurui1998
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库常用语句相关的知识,希望对你有一定的参考价值。
1 mysql安装--->mysql启动 2 基本sql create table create database select insert update delete 3 select 模糊查询 like 分组查询 group by 排序 order by 聚合函数 sum count avg min max 分页 limit index,count 为什么要分页:数据量比较大 如果全部查询 出现一下问题: 1 全部数据都展示用户 数据量太大 用户难以接受 2 数据量大 查询慢 3 如果将大量数据读取到java内存中 可能存储崩溃 ( 4GB 1GB = 1024MB 1MB = 1024KB 1KB = 1024B 1B = 8b int a = 10 4字节 ) 分页:(链接数据库查询 是非常占用资源) A 全部查询 在前台展示的时候 只展示 其中的一部分(js) (数据库较少) B 数据库获取数据的时候 就只查询部分数据(当前页展示的数据)然后前台直接展示 (数据量大) B : 在查询的时候 只查询部分数据 -----》 limit index,length select * from product limit 0,5 -- 1 5 select * from product limit 1,5 -- 2 6 select * from product limit 3,7 -- 4 10 首页 上一页 1 2 3 4 5 6 下一页 尾页 跳转【】页 每页【5】条 共20页 问题1 : 第一页 limit 0,5 第二页 limit 5,5 第三页 limit 10,5 第四页 limit 15,5 第n页 每页x条 limit (n-1)* x ,x 问题2 : 100条 5 总:20 101条 5 总:21 105条 5 总:21 106条 5 总:22 t条 x 总:(t+x-1)/x 4 多表查询 1 为什么会多表 (主键,外键) 学生表 id name age grade 1 张三 18 QY97 2 李四 18 QY97 3 王五 60 QY98 4 马六 61 QY98 领导通知: QY97 ----》 最强97 班主任 : update student set grade = 最强97 where grade = QY97 (80亿) 数据库数据冗余(减少冗余) 学生表 班级表 id name age gid id gname 1 张三 18 1 1 QY97 2 李四 18 1 2 QY98 3 王五 18 2 4 马六 18 2 班主任: update grade set gname=最强97 where id = 1 2 两张表如何查询数据? select * from student 1 张三 18 1 2 李四 18 1 3 吴昂无 18 2 4 王阿斯顿18 2 5 阿斯顿 19 3 6 暗室逢灯19 3 班级我们其实希望看到 是 班级的名字 并不是班级的编号(我们需要将数据多表存储 又需要在查询的时候 将多表的数据 全部查询出来) 多表查询会出现 "笛卡尔乘积"问题 (a,b) (c,d) ===> ac,ad,bc,bd (哪几张表,各个表之间的联系) 内连接 隐式内连接 SELECT s.id,s.name,s.age,g.gname FROM student s, grade g WHERE s.gid = g.id ==>消除笛卡尔乘积 显示内连接 SELECT s.id, s. NAME, s.age, g.gname FROM student s INNER JOIN grade g ON s.gid = g.id select 列名 from 表1 inner join 表2 on 表1.列 = 表2.列 外连接 左外(需求:查询所有学生信息 如果有班级显示班级名称) SELECT s.id, s. NAME, s.age, g.gname FROM student s left JOIN grade g ON s.gid = g.id 右外 SELECT s.id, s. NAME, s.age, g.gname FROM student s right JOIN grade g ON s.gid = g.id 内连接查询的是多个表的交集 外连接查询的是一张表的全部数据和另一张表满足要求的数据 5 子查询 需求: 查询张三的同班同学 1 查询张三是哪个班? select gid from student WHERE name = "张三" 2 查询和张三班级一样的同学 select * from student where gid = 1 SELECT * FROM student WHERE gid = ( SELECT gid FROM student WHERE NAME = "张三" )
数据库范式(数据库设计的规范): 注意:后面的范式一定满足前面 第一范式: 原子性(范式、事务ACID、线程)(不可再分 列不能再分) 表:存储用户信息 手机号 (需求 一个用户可能没有手机号 也可能有多个手机号) 错误一:( 关系型数据库(列固定 行多个)MySQL oracle sqlserver 非关系型数据库NoSQL 是关系型数据库的补充(基于内存)缓存服务 redis ) id name age sex tel tel1 tel2 tel3 tel4 tel5 错误二: id name age sex tel 1 张三 18 男 2 李四 18 男 110 3 王五 18 男 120,130,140 正确 User telephone id name age sex id uid tel 1 张三 18 男 1 2 120 2 李四 19 男 2 3 130 3 王五 19 男 3 3 140 第二范式:唯一性 设计: 学生 选修课 成绩 id 姓名 年龄 选修课 成绩 1 张三 18 化学 99 2 张三 18 毛概 66 3 李四 18 物理 99 4 李四 18 java 59 学生表 成绩表 id 姓名 年龄 id sid 课程 成绩 1 张三 18 1 1 化学 99 2 李四 18 2 1 毛概 66 3 2 物理 99 4 2 java 59 第三方式:减少冗余 id name age gname 班主任 1 张三 18 QY97 罗 2 李四 18 QY97 罗 3 王五 18 QY98 罗 4 赵六 18 QY98 萝 id name age gid id gname 1 张三 18 1 1 QY97 2 李四 18 1 2 QY98 3 王五 18 2 4 赵六 18 2 问题: 主外键 总结 哪张表应该加外键 一对多 一个班级 有 多个学生 一个用户 有 多个手机号 一个学生 有 多个课程 反三范式:在实际开发中,适当的冗余能提高开发效率
以上是关于数据库常用语句的主要内容,如果未能解决你的问题,请参考以下文章