私の認知MySQL

1.0 mysqlに関する研究ノート

查询语句,select关键字,select后面可以是字段列表,表达式和函数,列如select distinct name (字段名)  from 表名;查询该表中有哪些名字,去重复的效果。
条件查询,select关键字加上where就可以筛选出我们想要的结果了,如:select * from 表名 where name='张三' and salary>1000 and dep=10;where后面还可以跟or筛选出符合条件的信息,select * from name='张三' or name='李四' or name='王五',如果条件太多的话,这样写代码就比较累了,可以用in关键字像这样,select * from 表名 where name in(张三,李四,王五),可以选出名字和in中相同的所有人。当然相反的还有not in 用法和类似。
别名:可以给表,字段,函数,表达式取别名。加空格就可以取名字。格式要求类似Java,别名的关键字是as一般省略,能少些就少写。能不写绝不多写一个字母。
总结:where后面经常跟的关键字
	1.or 表示或
	2.and表示且
	3.四则运算符号,都行,大于等于>=,小于等于<=,不等于<>
	还可以用between and来代替where salary between 3000 and 5000;包含3000和5000
	4.is是对空置null做判断的比如 null=null返回的永远是false。
	5.is not表示除了这个的其他。
	比如说  select * from emp where name is not null;

2.0 MySQL関数

2.1.1数学関数

1.pi()    π的值
2.floor(x)返回小于x的最大整数,也就是说把小数位去掉。 
3.count(字段名)会把这一列不为空的信息做个统计。
4.sum(字段)会把这一列数据求和。
5.ceiling(x)返回大于的最小整数
6.round(x,y)返回x的小数点y位四舍五入的值。负数的话会往相反方向走。
7. truncate(x,y)返回x的小数点y位的截取。如果是-1的话,会以小数点相反向四		舍五入 。

2.1.2集約関数はグループ化関数とも呼ばれます

1.avg(x)求x这一列的平均数
2.sum(x)求x这一列的总和
3.min(x),max(x),最大最小值
4.count(x)返回x列不为空的行个数
5.max(x)求累加和
重点:分组函数在使用的时候,如果字段没有在分组函数中,则会报错,因为分组查询出来的结果和你的字段对应不上,一个表几行几列,你不能用分组求出来的三行,去对应一个十行的数据。比如select max(salary),name from emp group by job_id;这里的name就有问题,没有在分组函数中。这样是查不出来,匹配不上的。通过分组函数是查询不出来部门里面工资最大的那个人是谁。要用到子查询!!!
还有一个细节就是如果要把查询到的字段当为筛选条件的话,要用到having关键字,用了之后就可以筛选了 直接跟在group by 后面 连where 都不需要。如果没有这个关键字的话,他会去从你from的表中找,你原来的表中没有这个字段所有会报错

2.1.3文字列関数

1.concat(str1,str2)将字符串字段连接起来,比如concat(name,address);
2.ltrim,rtrim,trim去掉字符窜字段下的空格比如:ltrim(name)去掉name的空格
3.substring(str,x,y)截取字符串,x表示开始的位置(第一位是1),y表示截取的个数,y不写表示到结尾。
4.length返回字符串的长度

2.1.4日付関数

1.year(date),month(date),day(date),分别取出年月日,参数类型date
2.hour(time),minutes(time),second(time),参数类型time
2.date(datetime),time(datetime).
日期格式:
date表示YYYY-MM-DD精确到天
time表示HH:mm:ss精确到秒,当只需要一天的时间时候用。
datetime表示YYYY-MM-DD HH:mm:ss 精确到秒,
timestamp当业务需要精确到毫秒时,或者该系统用于不同的分区。

3.0サブクエリ

有时候分组不能满足需求的时候要用到子查询,子查询一般分为两种情况。
第一种:把查询结果当做筛选条件。
比如说:要在emp表中查询出来最大工资的人是谁,分组查询显然已经不能解决这个问题了,我们可以先求出求出来最大工资,然后把最大工资当成条件,再去查询这个人是谁,应当这样写select name,salaryfrom emp where salary=(select max(salary) from emp);

これは大丈夫です。
ここでは、同等の値のみが示されています。不等の値があり、大なり小なり比較が類似しています。
2番目:クエリ結果をデータソースとして使用します。
需要があり、どの部門が最大の平均給与ですか?
最初に各部門の平均給与とこの部門番号を尋ねます。これはグループ化で問題ありませんが、最大のものは何ですか。この表で最大のものを見つけて、max()を直接追加する必要がありますか?ただし、グループ関数はネストできないため、このテーブルをデータソースとして使用し、最大のものを確認してください。コードの書き方!
このように、emp_groupからjob_idによってjob_id、avg(salary)avg_sal(個人名を取得)を選択します。このjob_idグループは、各gob_idの平均給与を
見つけ、次にこのテーブルで最高の平均給与と対応するjob_idを見つけます。
最初の(から最大(avg_sal)を選択し、最大の平均賃金を見つける (選択JOB_ID、AVG(給与)avg_sal JOB_IDでEMPグループから)個々の名前を取る) ;
ゼロで、ここでは、ノートを取る、これは持っている必要がありますタイムテーブルをデータソースとして使用する場合、エイリアスを取得する必要がありますが、エイリアスは自由に取得できます。
このjob_idに対応して、avg_sal =この最大給与を使用します。
追加:テーブルを作成するときに、フィールド名がランダムに取得され、後で他のテーブルの名前と重複していることが判明することがあります。今回は、フィールド名を変更するために戻る必要があるマルチテーブルジョイントクエリの問題が発生します。オペレーション。
列の追加:テーブル名の変更フィールド名タイプの追加
列の削除:テーブル名の変更フィールド名のドロップ
列の変更:テーブル変更フィールド名、フィールド名、フィールドタイプの変更

4.0マルチテーブルクエリ

1.当一张表不能满足我们的需求的时候,我们需要在多张表中查询我们要找的数据,
先看两张表:
要查出来一个人是干什么工作的,因为emp表里面只有job_id,所以要到job表中去查询工作名称,所以要用到join关键字,代码如下
新写法:select name,job_name from emp join job on emp.job_id=job.id;
较早的写法:select name,job_name from emp,job where emp.job_id=job.id;
三表联合查询呢?如下
select name,job_name,dep_name from emp join job join dep on job.id=emp.job_id and dep.id=job.id
ddl表定义 data definition language
dml表操作  data manipulation language
元の4件の記事を公開 いいね2 訪問数596

おすすめ

転載: blog.csdn.net/NullPiontExcepution/article/details/83657998