高度なデータベース操作とレビュー

新データ

基本的な構文
[(フィールドリスト)]の値(値のリスト)テーブルに挿入、
挿入されたデータは、すでに存在しているプライマリ・キーに対応する値を仮定すると、挿入は失敗します。

主キー違反
の主キーの競合がある場合に、選択的に処理することができ、交換の更新

主キー違反:更新
テーブルへの挿入[(フィールドリスト:プライマリキー)]重複キー更新新しいフィールド=値上の値(値のリスト)

test_class値(1,1)に挿入します。
test_class値(1,2)に挿入します。

主キー違反:更新
にはtest_class値(1,2)に挿入重複キー更新roomId = 2;
ここに画像を挿入説明主キー違反:あるいは
はtest_class値(2,4)に置き換えます。

ここに画像を挿入説明データを追加しました:ワームのコピー

ワームのコピー:、既存のデータからそのデータを、データを取得し、新しい操作を実行するためには、指数関数的にデータを増加させました。

高度な表の作成:新しいテーブルを作成し、既存のテーブルから(テーブル構造をコピー)

。テーブルデータベースのテーブル名のようなテーブルを作成します。

ここに画像を挿入説明ただ、構造をコピーし、データがコピーされません。
ワームのコピー:最初のデータを検索し、再度分離されたデータを追加します。
データテーブルから* / SELECTフィールドリストテーブル[(フィールドリスト)]に挿入します。

例如: insert into copy select * from cc;
ここに画像を挿入説明蠕虫复制的意义
1、从已有表拷贝数据到新表中
2.可以快速让表中的数据膨胀到一定的数量级;测试表的压力以及效率。

更新数据
update 表名 set 字段=值 [where条件]

新增高级语法
update 表名 set 字段=值 [where条件] [limit更新数量]
例如:update copy set name=3 where name=1 limit 3;
ここに画像を挿入説明
删除数据
与更新类似:可以通过limit限制数量
delete from 表名 [where条件][limit条件]
例如 delete from copy where name=3 limit 2;

ここに画像を挿入説明
思路:数据的删除是不会改变表的结构,只能删除表后重建表。
truncate 表名
清空表:重置自增长

查询数据
基本语法
select 字段列表/* from 表名 [where条件]

完整语法
select [select 选项] 字段列表[字段别名] /* from 数据源 [where条件子句][group by 子句] [having 子句] [order by 子句] [limit 子句];

select选项
select选项:select对查出来的结果的处理方式
All:默认的,保留所有的结果
Distinct 去重,查出来的结果,将重复的给去除(所有字段都相同)

ここに画像を挿入説明select (distinct 字段列表),别的字段

字段别名
字段别名:当数据进行查询出来的时候,有时候名字并不一定就满足需求(多表查询的时候,会有同名字段),需要对字段名重新命名:别名

语法
字段名 [as] 别名;

select
stuId as 学号,
stuName as 姓名,
sex 性别 from test_student;
ここに画像を挿入説明有无as都可以。

数据源
数据源:数据的来源,关系型数据库的来源都是数据表,本质上只要保证数据类似二维表,最终都可以作为数据源。
数据源分为多种:单表数据源,多表数据源,查询语句
单表数据源:select * from 表名
多表数据源:select * from 表1,表2;
ここに画像を挿入説明从一张表中取出一条记录,去另外一张表中匹配所有记录,而且全部保留:(记录数和字段数),将这种结果称为:笛卡尔积(交叉连接):笛卡尔积没什么用,尽量避免。

子查询:数据的来源是一条查询语句(查询语句的结果是二维表)
select * from (select 语句) as 表名;

select * from (select * from test_student) as s;
ここに画像を挿入説明Where 子句
Where 子句:用来判断数据,筛选数据。

where子句返回结果:0或者1,0代表false,1代表true.
判断条件:比较运算符 >,<,>=,<=,!=,<>,=,like,between and,in,not in
逻辑运算符:&&(and),||(or),!(not)

where原理:where是唯一一个直接从磁盘获取数据的时候就开始判断的条件,从磁盘取出一条记录,开始进行where判断;判断的结果如果成立保存到内存,如果失败直接放弃。

rand 0-1之间的随机数,floor向下取整
update test_student set age=floor(rand()*20+20),height=floor(rand()*20+170);

ここに画像を挿入説明条件查询1:要求找出学生id为1,3的学生
select * from test_student where stuId=1 || stuId=3;
或 select * from test_student where stuId in(1,3);

ここに画像を挿入説明条件查询2:找身高在180到190之间的学生
select * from test_student where height >= 180 and height <= 190;
select * from test_student where height between 180 and 190;

ここに画像を挿入説明between本身是闭区间;between左边的值必须小于或者等于右边的值。
例如:select * from test_student where height between 190 and 180;
ここに画像を挿入説明所有条件都满足:
select * from test_student where 1;

ここに画像を挿入説明
Group by 子句
Group by:分组的意思,根据某个字段进行分组(相同的放一组,不同的分到不同的组)

基本语法:group by 字段名
例如:根据性别分组
select * from test_student group by sex;
ここに画像を挿入説明分组的意义:是为了统计数据(按组统计:按分组字段进行数据统计)
sql提供了一系列统计函数
count():统计分组后的记录数;每一组有多少记录
max(): 统计每组中最大的值
min():统计最小值
avg(): 统计平均值
sun(): 统计和
分组统计:身高高矮,年龄平均和总年龄
select sex,count(*),max(height),min(height),avg(age) sum(age) from test_student group by sex;

ここに画像を挿入説明count()函数:统计记录数,可以使用两种参数,*代表统计记录,字段名代表统计对应的字段(null不统计)

ここに画像を挿入説明分组会自动排序:根据分组字段,默认升序。
group by 字段 [asc|desc]; --对分组的结果然后合并之后的整个结果进行排序。

ここに画像を挿入説明多字段分组:先根据一个字段进行分组,然后对分组的结果再次按照其他字段进行分组。

alter table test_student add c_id int;
update test_student set c_id=ceil(rand3);
insert into test_student values(4,‘王五’,‘女’,24,170,2);
select c_id,sex,count(
) from test_student group by c_id,sex;

先班级,后男女
ここに画像を挿入説明有一个函数:可以对分组的结果中的某个字段进行字符串连接(保留该组所有的某个字段);
group_concat(字段);

ここに画像を挿入説明回溯统计: with rollup :任何一个分组后都会有一个小组,最后都需要向上级分组进行汇报统计;根据当前分组的字段,这就是回溯统计:回溯统计的时候会将分组字段置空。

select c_id,count(*) from test_student group by c_id with rollup;

ここに画像を挿入説明
select c_id,sex,count(*) from test_student group by c_id,sex,with rollup;

ここに画像を挿入説明多字段回溯:考虑第一层分组会有此回溯;第二次分组要看第一次分组的组数,组数是多少,回溯就是多少,然后加上第一层的回溯即可。

Having 子句
Having 子句:与where子句一样:进行条件判断的。
where是针对磁盘数据进行判断,进入到内存之后,会进行分组操作;分组结果需要having 来处理。
Having能做where能做的几乎所有事情,但是where却不能做having能做的所有事情。

1、分组统计的结果或者说是统计函数只有having能够使用

求出所有班级人数大于等于2的学生人数
select c_id,count() from test_student group by c_id hacing count ()>=2;
select c_id,count() from test_student where count() >= 2 group by c_id ;–错误
ここに画像を挿入説明2、having 能够使用字段别名;where不能;where是从磁盘中取数据,而名字只可能是字段名,别名是在字段进入到内存后才会产生。

select c_id,count() as total from test_student group by c_id having total>=2;
select c_id ,count(
) as total from test_student where total >= 2 group by c_id ;

ここに画像を挿入説明select stuName as 名字,stuId 学号 from test_student having 名字 like ‘张%’;
select stuName as 名字,stuId 学号 from test_student where 名字 like ‘张%’;–错误
ここに画像を挿入説明Order by子句

Order by子句:排序,根据某个字段进行升序或者降序排序,依赖校对集。
使用基本语法:
order by 字段名 [asc|desc];–asc是升序(默认),desc是降序

select * from test_student group by c_id;
select * from test_student order by c_id;

ここに画像を挿入説明排序可以进行多字段排序:先根据某个字段进行排序,然后排序好的内容,再按照某个数据进行再次排序。

多字段排序,先班级,后性别
select * from tese_student order by c_id,sex desc;
ここに画像を挿入説明Limit子句
Limit子句:是一种限制结果的语句:限制数量
limit 有两种使用方式
1、方案一:只用来限制长度(数据量):limit 数据量;
查询学生:前两个
select * from test_student limit 2;
ここに画像を挿入説明2、方案二:限制起始位置,限制数量:limit 起始位置,长度;
查询学生:前两个

select * from test_student limit 0, 2;–记录数从0开始编号

- ; test_studentリミット1,2から選択*レコード数が1から番号が付けられ
ここに画像を挿入説明
たリソースの無駄を削減、サーバーの応答効率を提出するユーザーのための時間を節約するために:制限スキーム2は、主ページングデータを実装するために使用されます。
ユーザーの場合:あなたは、ページングボタンをクリックすることができます:1,2,3,4
サーバーの用語の場合:ページ番号、未使用のデータを選択するようにユーザーを取得するには:制限は長さ、オフセット;

長さ:ページあたりのデータ量:実質的に変わりません。

オフセット:オフセット=(P -1)*ページあたりの量

レビュー

列のプロパティ:主キー、成長ユニークキー以来
の関係:1、多くの多くの多くの1つ、いずれか
のレイヤモデル:パラダイム
1NF:原子満たす必要がありますフィールド
2NF:(なし複合主キー)に部分的に依存が存在しない
3NF:欠席推移依存関係(テーブルを構築するための別のエンティティ)
非正規化:ゲームの効率性とディスクスペース

高度なデータ操作
、新たな操作:主キー違反(更新と交換してください)、ワームのコピーを
更新:制限:数の更新制限
削除を:削除されたの数を制限:制限を、テーブル(truncat)クリア
クエリ:オプションを選択し、フィールドエイリアス、データソースを(単一のテーブル、複数のテーブルとサブクエリ[別名])、WHERE句(条件決意:ディスク)、group by句(パケット統計情報、統計関数、パケットの順序、マルチフィールドパケット、バック統計)、HAVING句(レコードの()複数のフィールドをソートし、ソート結果、パケットの統計結果)、ORDER句を分析し、リミット(制限数、タブ)

おすすめ

転載: blog.csdn.net/weixin_44097082/article/details/94866696