新データ
基本的な構文
[(フィールドリスト)]の値(値のリスト)テーブルに挿入、
挿入されたデータは、すでに存在しているプライマリ・キーに対応する値を仮定すると、挿入は失敗します。
主キー違反
の主キーの競合がある場合に、選択的に処理することができ、交換の更新
主キー違反:更新
テーブルへの挿入[(フィールドリスト:プライマリキー)]重複キー更新新しいフィールド=値上の値(値のリスト)
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句を分析し、リミット(制限数、タブ)